能書き
おうちサーバー構築報告:予告からのおうちサーバー構築です。
以前ProxmoxVE 9 をインストールして、コンテナや仮想マシンを立てて色々入れてきた訳ですが。ふと思い立ち、ProxmoxVEに於けるスワップメモリの設定について調べてみたのでした。主にCopilotへの相談でしたが。
そうしたらSSDの場合は設定を変更した方が良いとの回答。今回はその内容についてです。
参考文献
前提
予告で紹介している通り、マシンはNUCなのでストレージデバイスはSSD(NVMe)です。ちなみにRAMは32GBを積んでます。
ストレージがSSDの場合スワップは基本的に避けた方が良いんだよね?と重要な事を思い出したのが発端でした。こんな重要事項を今まで忘れていた方がまずいんですが。
スワップを減らすべき理由
なぜスワップを減らすべきなのか?SSDでもスワップが多いと下記の問題が発生します。
- I/O が詰まる
仮想マシンがスワップを使い始めると、SSDでもランダムI/Oが急増し、全体のパフォーマンスが落ちます。 - SSD の寿命を削る
スワップは書き込みが多いためTBW(総書き込み量)を無駄に消費します。 - 仮想化環境ではスワップの効果が薄い
仮想マシン内のスワップとホストのスワップが重なると「二重スワップ」になり、逆に遅くなります。
実践的な最適解
下記の設定が最適です。
- ホスト:少量のスワップ(5〜10%)+ swappiness を下げる
- 仮想マシン:1〜2GBの保険程度
- LXCコンテナ:0〜512MB
- メモリ不足はスワップではなくRAM増設で解決
swappiness
vm.swappinessとはLinuxカーネルが持っているパラメータです。RAMの内容をスワップ領域に書き出す際の積極性を表します。
参考文献によると、その値は下記のような意味になるとの事。
| 値 | 意味 |
|---|---|
| 0 | できる限りスワップを使わない |
| 10 | 本当に必要になるまでスワップを使わない |
| 60 | 余裕があっても早めにスワップに退避する(デフォルト値) |
| 100 | 積極的にスワップを使う |
10が推奨値のようです。
確認
現在のswappinessを確認する方法は2つあります。
-
実行中の
swappinessを確認ProxmoxVEホストマシンcat /proc/sys/vm/swappiness -
sysctlで確認する方法ProxmoxVEホストマシンsysctl vm.swappiness
変更
一時的に変更するには下記を実行します。この設定は再起動で元に戻ります。
sysctl -w vm.swappiness=10
永続化する場合は下記になります。
echo "vm.swappiness = 10" >> /etc/sysctl.d/99-pve-tuning.conf
sysctl -p /etc/sysctl.d/99-pve-tuning.conf
なお完全に0にするのは推奨されません。swappinessを0にするとOOM Killerが発動しやすくなります。
仕舞い
…と、言う事でした。
ホストマシンは動かしながら調整できるとして、コンテナや仮想マシンは作り直しですかね。過去記事のスワップ領域指定も全部修正しておきます。