スワップの運用について考えてみる
システムにおけるスワップ運用の私見
Linuxのスワップ ~正確にはページフォルトであるが~ は、どう運用すべきかを考える。 古くから「メモリサイズの2倍か3倍のサイズを取る」というのが慣習的に行われている。 しかし、この数字はベストプラクティスであって、理論的背景があって決められている数字ではない。 稼働させるアプリケーションと搭載メモリ量、そしてハードディスク搭載容量に依存する。
- Red Hat Enterprise Linux 推奨されるパーティション分割スキーム
- Solaris のシステム管理 (デバイスとファイルシステム) スワップ空間の計画
これらの例からわかるのは「4GBぐらいのメモリ量の場合は、同等なスワップ領域であるが十分なメモリ量がある場合、スワップ領域はメモリサイズよりもはるかに少ない。」 「もし256GBのメモリ量で3倍のサイズとなると750GBとなり、現状、大容量ハードディスクが安くなったからといっても大きな領域を必要となり、システムを圧迫する。」ということです。
つまり搭載しているメモリやハードディスクだけに着目して、スワップ領域のサイズを決定するのは、何か決定的な根拠があるわけではなく、ただこれくらいあれば良いだろうという目安程度の話になってくる。 あくまでも利用するマシンでどのようなアプリケーションがどのような形で動作し、また、どこまで耐えるのか、ということがポイントであり、汎用な最適なスワップ領域サイズの解はないといえる。
では私自身はどうしているかというと、搭載されているメモリ量ではなく、ハードディスクのパーティションを切る際に余った領域をスワップ領域に割り当てる方法を取っている。特定のスワップ領域のサイズをターゲットにして取っているわけではない。
必要なパーティションを切っていって、最後余った領域をスワップパーティションとして残す。1つのハードディスクでせいぜい数GB程度であり、現在数百GBから1TBを越えるハードディスクが利用される現在では、数GBはハードディスク領域としては無視出来るサイズである。尚、複数のハードディスクにスワップ領域を分散させるのは、高速化を狙っているためである。
簡単にまとめると以下のようになる。
- アプリケーションや利用状況に関係なく汎用的に適切なスワップ領域サイズというものはない。
- スワップ領域を決める時は慣用的なサイズで設定する場合が多いが、その根拠はきわめて曖昧である。
- 古典的なメモリ量の2倍のスワップ領域というのは、現在の大容量メモリ搭載時代では、あまり合理的な方法とはいえない。
- 複数のハードディスク上のパーティションを同時に利用する場合、個々のパーティションサイズは小さくとも総量としては大きい領域が確保できる。