zvolにスワップを作るのは意味がない?

自宅鯖にslog/L2ARC用のSSDを追加するついでに、現在HDD上にあるスワップ専用パーティションをSSDのZFSボリュームに移そうと画策していたが、zvol上のスワップってまともに動くのか不意に気になりだした。 いや、だってさ、潤沢なメモリを必要とするZFSがメモリ不足時に機能するスワップを読み書きするという、相反する2つの事象が発生するわけで。それ本当に大丈夫なの?という疑問が湧くのは当然じゃないかと。

ググってみたら、案の定というか、スワップ on zvolだとメモリ枯渇でシステムが応答しなくなる事例が幾つか出てきた。

swap無しだと数分でOSごと固まる。 zvolで4G分swapをとってもほぼ同じ。
60GBのHDDに4G分swapを取るとこけなくなるが、まれに書き込みエラーで展開がアボートする。

(中略)

swap無しの場合はメモリを食いつぶした時点でプロセスが死んで終了。特に影響無し。
zvolで4G取ってswapにした場合、pageoutがしばらく続いて反応がなくなる。zvolにディスクが100%割り当てられている状態でも同じだった。
60GB HDDに普通のswapを4G取った場合、各プロセスがメモリの上限に達して死ぬ。OSには影響無し。
zfs again | dogmap.jp

SWAP partition

Now let’s see how the system behaves if we run memory.c on an installation with a normal 2GB swap partition:

The system stays responsive and kills memory.c as soon as it runs out of swap space.

ZVOL

Now let’s try the same thing with the swap space on a ZVOL:

It still replies to ping requests, but it has stopped being responsive. You cannot kill memory.c or do anything else useful.
(中略)

And if you can trust the top output, it crashed with only about 60MB of swap space used. Philipp Schmid - FreeBSD 10: does SWAP work on a ZVOL?

全然だめじゃーん。てか、FreeBSD Wikiにも「実メモリが全くなくなると、システムは応答しなくなる可能性がある」って書いてあった……。

引用元の前者は物理メモリ1GB、後者はVMで256MB割り当てた環境と、そもそもZFSを動かすのには適していなかったりもするが…。メモリが増えた所で、枯渇時の挙動が大幅に変わるとも思えないし。

というわけで方針変更。zvol方式はやめてSSDに従来通りスワップパーティションを設ける形で。今のスワップは全部あわせて40GBとかなり豪勢だが、8GBもあれば十分だろう。所詮家鯖だし。てか、設定ミスで今現在はスワップなしだけど24GBの物理メモリで全く問題なく動いてるし。




  • blog/2015/2015-03-31.txt
  • 最終更新: 2015-03-31 11:00
  • by Decomo