swap partitionはもう作るな、swap fileを使え
Stop making swap partitions–use swap files instead
swap fileは20年以上前からswap partitionと同じ性能特性を持っているのに、Linuxディストリビューションはいまだにインストール時にswap partitionを推奨し続けている。インストール後の追加・削除・変更・拡張が簡単なswap fileの作り方を、fallocateから/etc/fstabへの追記まで具体的なコマンドとともに解説。btrfs向けの手順も紹介する。
swap fileは20年以上にわたりswap partitionと同じ性能特性を持っているのに、Linuxディストリビューションはいまだにインストール時にswap partitionの使用を促し続けている。
HNでの議論
149- rini17
代わりにzramを使え。これは今俺が使っているポンコツ8G RAMのマルチメディア/ブラウジング用ミニPCでの話だ。SSDはかなり遅く、ブラウザはメモリを食い荒らすので、ディスクスワップから改善された。
$ zramctl
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 zstd 3G 482.9M 86.7M 91.8M 4 [SWAP]
- dogline
うーん、この投稿でzswapとzramのどちらを使うか見直すきっかけになった。zswapを拡張してzramを無効にした。他の人にとって違いがあるかはわからないが、自分にはおそらく良いだろう。
- ghostly_s
壊れたリンクがいくつかある、どこの馬の骨とも知れないgithubユーザーの言うことより、自分のOSベンダーの言うことを聞き続けるよ、どうも。
(この件で教育される気はない、他にやることがある。Debianに言ってくれ。)
- cesarb
> fallocate / chmod / mkswap
なぜ「mkswap --size ... --file ...」を使わないのか?これはこれら3つ以上のことをやってくれる。例えば、mkswapのmanページによれば、「[...] 新しく作成されたファイルにnocow属性を設定する [...]」とあり、このgistには欠けているように思える詳細だ。
- SoftTalker
RAMのサイズが非常に大きくなって以来しばらくの間、Linuxサーバーをスワップなしでセットアップしていた。システムがすでに128GBの実RAMを使い果たしているのに、2GBのスワップファイルが何の役に立つというのか?
これをやっていて問題を見たことは一度もないが、Linuxは理想的にはある程度のスワップ領域を欲しがり、何らかのハウスキーピング的なことに使うということを学んだ。
- weinzierl
かつては、最適なパフォーマンス(スワップファイル)のためにOSがパーティションを使う必要があっただけでなく、アプリケーションもそうだった時代があった。
90年代後半には、データベースは定期的に生のパーティションにデータを保存するようにセットアップされていた。他にもパーティションを必要とするアプリケーションの種類はあったが、データベースでは本当に一般的だった。
この慣行が本当に廃れたのは、OSがアプリに通常のファイルシステムキャッシュをバイパスすることを許可するようになってからだ。
LinuxではこれがO_DIRECTであり、興味深いことにLinuxはこのパーティーに超遅れて参加した。Linusがこれを情熱的に嫌っていたからだ。彼だけではなかった、少なくともAlan CoxとAndrew Mortonは懐疑的で、他の人たちもそうだった。Linusはこれについて異常に極端で、あの特定の議論はおそらく人々が彼に対して使う引用の大多数の唯一の源だろう。
- kazinator
スワップパーティションは、日常使用をカバーする、設定して忘れる恒久的なインストールだ。
スワップファイルは、「ああクソ、大量のVMを必要とする珍しいものを実行しなきゃ」という時のためのものだ。作成し、「swapon」して、終わったら「swapoff」して削除する。
- spijdar
スワップディレクトリが持てるのに、なぜスワップファイルを使うのか? ;-)
Spriteは(私見では)スワップに対して本当に興味深い解決策を持っていた。各ホストは、`/swap`ディレクトリの下でそのホストIDによって参照されるディレクトリを持ち、そのディレクトリ内で仮想メモリの個々のセグメントが保存された:https://github.com/OSPreservProject/sprite/blob/master/src/k...
Spriteは現代のOSのようにメモリをオーバーコミットし、セグメントを個別に保存したのでプロセスのマイグレーションが機能した(セグメントがスワップアウトされた場合、スワップファイルへのパスはクラスタ上のどこでも同じままで、プロセスがマイグレーションされた場合、マイグレーション前にセグメントをスワップインする必要がなかった):
eery@cherimoya [1] > cd /swap
eery@cherimoya [2] > ls
1 10 11 12 13 14 15 16 17 2 3 4 5 6 7 8 9
eery@cherimoya [3] > ls 3
1 113 129 148 161 172 185 20 218 238 252 33 48 63 77 95
100 114 130 15 162 173 186 203 219 24 253 34 49 64 8 96
101 115 132 150 163 174 187 204 22 240 254 36 50 66 80 97
102 116 133 152 164 175 188 205 221 242 255 38 51 67 81 98
103 117 134 153 165 176 19 207 222 243 26 39 52 7 82 99
104 12 135 154 166 177 190 209 225 244 27 4 55 70 85
105 121 139 155 167 179 191 21 226 246 28 40 56 71 86
106 122 14 156 168 180 193 210 227 247 29 42 57 72 87
107 125 140 157 169 181 194 213 23 248 3 44 6 73 9
11 126 143 158 17 182 1 […]