読者です 読者をやめる 読者になる 読者になる

解き放たれしソフトウェア

GNU/LinuxなどFLOSSについて書いてみるつもり

【Linux】swappiness でスワップアウトのしやすさを変える

Linux カーネルに対する設定で定番の手法ですが、vm.swappiness の値を変えることでスワップアウトのしやすさを変えられます。

0〜100までの範囲で数値を設定します(デフォルトは60)。 0にすれば限界までスワップアウトを避けます。 メモリが充分にあるシステムであっても、実際にはスワップアウトをしても性能に大きな影響を与えないようなデータもあるはずですから、例えば10くらいで足りると思います。 反対にメモリが少なく逼迫しているがスワップ領域は沢山とってあるようなシステムならば、数値を増やすことで性能が上がることがありえます。

/etc/sysctl.d 内に適当な名称のファイルをつくって書きます。

$ sudoedit /etc/sysctl.d/90-swappiness.conf

vm.swappiness=10

それを読み出させて有効にします。(再起動をしても有効になります。)

$ sudo sysctl -p

なお、従来は /etc/sysctl.conf に追記してもかまわないのですが、Systemd では /etc/sysctl.d/ 内を読み出し /etc/sysctl.conf を読まなくなりました。 ただ Systemd 下でも、 /etc/sysctl.d/99-sysctl.conf/etc/sysctl.conf みたいなシンボリックリンクが張られているならば、 /etc/sysctl.conf に追記してもかまいません。

zram や zswap との関係

メモリが潤沢であれば、そもそも swappiness を減らしてスワップアウトを避けることで、 zram や zswap をも利用する意義は乏しくなると思います。

スワップアウトが少なければ zram でスワップデバイスをつくる意義が乏しいでしょう。(アクセスが少ないのだから、HDDやSSDでもいいわけです。)

メモリが潤沢であれば、zswap でキャッシュを圧縮する意義は下がります。 むしろ圧縮復元に要する演算処理のせいで遅くなることがありえます。

近年のデスクトップPCはメモリ搭載量が多い傾向があります。 こうしたシステムでは、少しばかりのスワップアウトには寛容的になった方が速い結果になりえます。

他方で、「タブレット」や Embbed や VPS の類など、メモリの少ないシステムが新たに増えています。 こうしたシステムでのチューニングにはかなりの試行錯誤が要るかもしれません。