第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 the npages value, when free memory is less than thres.
# KSM_NPAGES_BOOST=300
# KSM_NPAGES_DECAY Value given is subtracted to the npages value, when free memory is greater than thres.
# KSM_NPAGES_DECAY=-50
# KSM_NPAGES_MIN is the lower limit for the npages value.
# KSM_NPAGES_MIN=64
# KSM_NAGES_MAX is the upper limit for the npages value.
# KSM_NPAGES_MAX=1250
# KSM_TRES_COEF - is the RAM percentage to be calculated in parameter thres.
# KSM_THRES_COEF=20
# KSM_THRES_CONST - If this is a low memory system, and the thres value is less than KSM_THRES_CONST, then reset thres value to KSM_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