第7章 KSM
qemu-kvm
プロセスからメモリーのみが継承されます。ゲスト仮想マシンが実行されると、ゲストが同じオペレーティングシステムまたはアプリケーションを実行しているときに、ゲスト仮想マシンのオペレーティングシステムイメージのコンテンツを共有できます。
/sys/kernel/mm/ksm/merge_across_nodes
を 0
に変更して、NUMA ノード間でページがマージされないようにします。カーネルメモリーが計算した統計情報は、ノード間での大量のマージ後にはそれぞれの間で相反する場合があります。そのため、KSM デーモンが大量のメモリーをマージすると、numad が混乱する可能性があります。システムに未使用のメモリーが大量にあると、KSM デーモンをオフにして無効にすることでパフォーマンスが高まる場合があります。NUMA の詳細は、『Red Hat Enterprise Linux パフォーマンスチューニングガイド』 を参照してください。
ksm
サービスは、KSM カーネルスレッドを開始および停止します。ksmtuned
サービスはksm
を制御し、調整し、同じページのマージを動的に管理します。ksmtuned
サービスはksm
を開始し、メモリー共有が必要ない場合はksm
サービスを停止します。ksmtuned
サービスは、retune
新しいゲストが作成または破棄されたときに実行するパラメーター。
KSM サービス
ksm
サービスは qemu-kvm パッケージに含まれています。KSM は、Red Hat Enterprise Linux 6 ではデフォルトでオフになっています。ただし、Red Hat Enterprise Linux 6 を KVM ホスト物理マシンとして使用する場合は、ksm/ksmtuned
サービスによってオンにされる可能性があります。
ksm
サービスが開始されていない場合、KSM は 2000 ページのみを共有します。このデフォルトは低く、メモリー節約の利点は限られています。
ksm
サービスが開始されると、KSM はホスト物理マシンシステムのメインメモリーの最大半分を共有します。ksm
サービスを開始して、KSM がより多くのメモリーを共有できるようにしてください。
# service ksm start Starting ksm: [ OK ]
ksm
サービスは、デフォルトの起動シーケンスに追加できます。chkconfig コマンドを使用して、ksm
サービスを永続化します。
# chkconfig ksm on
KSM チューニングサービス
ksmtuned
サービスにはオプションがありません。ksmtuned
サービスは、ksm
をループして調整します。さらに、ゲスト仮想マシンが作成または破棄されると、ksmtuned
サービスに libvirt から通知されます。
# service ksmtuned start Starting ksmtuned: [ OK ]
ksmtuned
サービスは、retune
パラメーターを使用して調整できます。retune
パラメーターは、チューニング機能を手動で実行するように ksmtuned
に指示します。
thres
: アクティベーションキーのしきい値 (kbytes)KSM サイクルは、全thres
プロセス RSZ の合計にシステムメモリーの合計にqemu-kvm
値が追加されるとトリガーされます。このパラメーターは、KSM_THRES_COEF
で定義されたパーセンテージの kbytes と同じです。
/etc/ksmtuned.conf
ファイルは、ksmtuned
サービスの設定ファイルです。以下のファイル出力は、デフォルトの ksmtuned.conf
ファイルです。
# Configuration file for ksmtuned. # How long ksmtuned should sleep between tuning adjustments # KSM_MONITOR_INTERVAL=60 # Millisecond sleep between ksm scans for 16Gb server. # Smaller servers sleep more, bigger sleep less. # KSM_SLEEP_MSEC=10 # KSM_NPAGES_BOOST is added to thenpages
value, whenfree memory
is less thanthres
. # KSM_NPAGES_BOOST=300 # KSM_NPAGES_DECAY Value given is subtracted to thenpages
value, whenfree memory
is greater thanthres
. # KSM_NPAGES_DECAY=-50 # KSM_NPAGES_MIN is the lower limit for thenpages
value. # KSM_NPAGES_MIN=64 # KSM_NAGES_MAX is the upper limit for thenpages
value. # KSM_NPAGES_MAX=1250 # KSM_TRES_COEF - is the RAM percentage to be calculated in parameterthres
. # KSM_THRES_COEF=20 # KSM_THRES_CONST - If this is a low memory system, and thethres
value is less thanKSM_THRES_CONST
, then resetthres
value toKSM_THRES_CONST
value. # KSM_THRES_CONST=2048 # uncomment the following to enable ksmtuned debug information # LOGFILE=/var/log/ksmtuned # DEBUG=1
KSM 変数とモニターリング
KSM は、監視データを /sys/kernel/mm/ksm/
ディレクトリーに保存します。このディレクトリー内のファイルは、カーネルによって更新される、KSM の使用状況と統計の正確な記録です。
/etc/ksmtuned.conf
ファイルの設定可能な変数でもあります。
/sys/kernel/mm/ksm/
ファイル
- full_scans
- フルスキャンが実行されます。
- pages_shared
- 共有されたページの総数。
- pages_sharing
- 現在共有されているページ。
- pages_to_scan
- スキャンされていないページ。
- pages_unshared
- 共有されなくなったページ。
- pages_volatile
- 揮発性ページの数。
- run
- KSM プロセスが実行されているかどうか。
- sleep_millisecs
- スリープのミリ秒。
DEBUG=1
行が /etc/ksmtuned.conf
ファイルに追加された場合、KSM チューニングアクティビティーは /var/log/ksmtuned
ログファイルに保存されます。ログファイルの場所は、LOGFILE
パラメーターを使用して変更することができます。ログファイルの場所を変更することはお勧めできません。SELinux 設定の特別な設定が必要になる場合があります。
KSM の非アクティブ化
KSM にはパフォーマンスのオーバーヘッドがあり、特定の環境またはホストの物理マシンシステムには大きすぎる可能性があります。
ksmtuned
および ksm
サービスを停止することで非アクティブ化できます。サービスを停止すると KSM が非アクティブになりますが、再起動後も持続しません。
# service ksmtuned stop Stopping ksmtuned: [ OK ] # service ksm stop Stopping ksm: [ OK ]
# chkconfig ksm off # chkconfig ksmtuned off