7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ProxmoxAdvent Calendar 2023

Day 5

Kernel Samepage Mergin (KSM) @Proxmox で仮想基盤のメモリ使用量が3分の1になった!

Last updated at Posted at 2023-12-04

Kernel Samepage Merging (KSM) は、Linux カーネルによって提供されるオプションのメモリ重複排除機能であり、Proxmox VE ではデフォルトで有効になっています。
同じOSが複数動いている仮想環境でメモリ使用量の最適化出来ます。

今回、ふとしたことからこの設定を変更して挙動を見ることが出来たのでメモしておきます。

環境

  • Proxmox VE 8.1.3 x 3台のクラスタ (ISOファイルのダウンロード
    • メモリ128GB
    • 1ノードあたり、12GBのメモリを割り当てたWindows11の仮想マシンが7台

経緯

3台のProxmoxVEクラスタで同じ量のVMを動かしているのに、1台だけメモリ容量が少なくて『なんでだろ?』と思っていました。
ある時ノードのサマリ画面でKSM sharingがメモリ使用量の少ないノードだけ40GB程になっており、他の2台は0GBでした。

proxmox_summary.png

『同じ設定のはずなのにKSMの状況が違う?』と思い調べてみることにしました。

やってみたこと

  • まずは実際にKSMが有効かどうかを調べることにしました。

    cat /sys/kernel/mm/ksm/run
    

    ※出力が 1 ならば、KSMは有効になっています。0 の場合は無効です。

    ★結果、状況が示す通り、1台は1、他2台は0でした。

  • Proxmoxのフォーラムを検索するとジャストな話題が!
    どうやら/etc/ksmtuned.confの設定値KSM_THRES_COEF=20によってKSMが動作の開始タイミングが変わるようです。

  • フリーメモリがこの割合以下になった場合にKSMが動作を開始するための閾値です。デフォルトは20%です。KSM_SLEEP_MSECKSM_NPAGES_MAXも合わせて以下のように設定しました。

    • KSM_THRES_COEF=99
      • 上記の通り、フリーメモリがこの割合以下になった場合にKSMが動作を開始するための閾値。Default 20 → 99
    • KSM_SLEEP_MSEC=50
      • KSMスキャン間のスリープ時間。大きいサーバでは短くすることが推奨らしい。Default 100 → 50
    • KSM_NPAGES_MAX=1250
      • KSMによってスキャンされるページ数の最大値。Default 1250 → 5000
      vim /etc/ksmtuned.conf
          KSM_THRES_COEF=99
          KSM_SLEEP_MSEC=50
          KSM_NPAGES_MAX=1250
      
  • 上記のように/etc/ksmtuned.confを書き換えたらksmtunedサービスを再起動します。

    systemctl restart ksmtuned
    
  • KSMが有効かどうかを確認します。

    cat /sys/kernel/mm/ksm/run
    1  ※有効になっていることが確認できた
    
  • 少し待っていたらみるみるKSM sharingの値が増え、メモリ使用量が減っていきました。
    メモリ使用率65%程だったものが20%程まで圧縮され、心躍りました!!
    proxmoxve_memory.png

注意点

以下ProxmoxのWikiより


KSM はメモリ使用量を削減できますが、VM をサイドチャネル攻撃にさらす可能性があるため、セキュリティ リスクも伴います。調査によると、KSM の特定の特性を利用することで、同じホスト上の 2 番目の VM を介して、実行中の VM に関する情報を推測できることがわかっています。

したがって、Proxmox VE を使用してホスティング サービスを提供している場合は、ユーザーに追加のセキュリティを提供するために、KSM を無効にすることを検討する必要があります。さらに、KSM の無効化が法的要件となっている場合があるため、国の規制を確認する必要があります。


しかし、、リスクの少ない環境であれば、
沢山の同じOSのVMを稼働させる時に、この効率化はめちゃめちゃ魅力的だと思いました!

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?