2010年8月28日土曜日

RHEL KVM ksmctlでメモリの効率化


このエントリーをはてなブックマークに追加


KVMにはKSMという仮想マシンのメモリ最適化の仕組みが搭載されている。
デフォルトはOFF。

KSMは Kernel Samepage Merging(またはkernel sharepage merging)の略で、カーネルがユーザプロセスのメモリをスキャンし、同じ内容があればマージしてメモリを節約する機能。
同一OSを複数起動する仮想環境ではかなり効果がある。

こんな感じで使う。設定は簡単。

■現在の状態を確認(実行されているか、いないか)
# ksmctl info

■ksmを開始する。
# ksmctl start npages sleep
npages 一回の走査でスキャンするページ数
sleep スキャンの間隔(ミリ秒??)

■ksmを停止する。
# ksmctl stop

という形で指定する。
使ってみた感じは以下。


■4つの仮想マシン(RHEL5.5 仮想メモリ1GB)を起動した状態のホストのメモリ状態が以下

[root@ml115g5-1 sections]# free
             total       used       free
Mem:       8035680    1627576    6408104
-/+ buffers/cache:    1298064    6737616
Swap:     10223608          0   10223608


■ksmを有効にする
[root@ml115g5-1 sections]# ksmctl info
flags 0, pages_to_scan 0, sleep_time 0 ← 未設定状態

[root@ml115g5-1 sections]# ksmctl start 50 5000
created scanner

[root@ml115g5-1 sections]# ksmctl info
flags 1, pages_to_scan 50, sleep_time 5000 ← 設定状態


■5分ほど待った後のメモリ状態
[root@ml115g5-1 sections]# free
             total       used       free
Mem:       8035680    1156148    6879532
-/+ buffers/cache:     825160    7210520
Swap:     10223608          0   10223608

使用量が減っているのが確認できると思う。


■KSMの設定を永続化する。
コマンドラインからの有効化は一時的なものなので、再起動すると失われてしまう。
これを恒久設定にするには、rc.local等に記載しておくしかないような感じ(RHEL/CentOS5.5時点)


参考>> KSM内部解析
参考>> Using KSM (Kernel Samepage Merging) with KVM

KVM徹底入門

KVM徹底入門

価格:3,444円(税込、送料別)