KSM與KVM CPU、內存控制

今天在登陸一臺KVM物理機時,發現進程ksmd竟然佔用50%以上的cpu,較之單個qemu-kvm進程佔用的cpu還大 。由於對該進程做什麼用的不甚瞭解。所以不敢貿然將其kill掉 。具體什麼是KSM呢 ?

ksm是基於內核的虛擬機(KVM)被設計爲自調優,但是可以調整一些參數使KVM主機性能更好。最重要的參數是內核同頁合併(kernel samepage merging ,KSM),這一特性允許內核更有效地處理內存。KSM允許Linux內核識別出包含相同內容的內存頁,然後合併這些內存頁,將數據整合在一個位置可以多次引用。

如果在主機上使用KVM,通常會激活數個客戶操作系統,而且這些操作系統經常運行相同的OS,這意味着大量的內核頁面被多次加載。通過應用KSM,許多虛擬機可以使用相同數量的內存啓動。事實上,KSM允許虛擬機過度分配內存。但是使用KSM存在性能損失,在一般的環境中,性能損失大概是10%,這也是在某些環境中關閉KSM的原因。
在RHEL 6(CentOS 6)和Fedora 16中,KSM默認是打開的。KSM通過兩個服務:ksmd和ksmtuned實現,這兩個服務在系統初始化時自動啓動。管理員應該判斷他們的環境並決定保持KSM處於運行狀態還是關閉它。

在具體的環境中是否要使用ksm呢?

如果目標是運行儘可能多的虛擬機,而且性能不是問題,應該保持KSM處於運行狀態。例如KSM允許運行30個虛擬機的主機上運行40個虛擬機,這意味着最大化硬件使用效率。但是,如果服務器在運行相對較少的虛擬機並且性能是個問題時,那麼應該關閉KSM。

對任何系統來說,最佳選擇將取決於創建虛擬環境時的內存估算。如果在虛擬主機中有足夠的物理內存,在沒有開啓KSM時就能夠滿足虛擬機的內存需求,那麼最好關閉KSM。關閉的方法如下:


chkconfig ksmd offchkconfig ksmtuned offservice ksmd offservice ksmtuned off

注:如果主機內存緊張,那麼最好保持KSM處於運行狀態。

即然上面對ksm的作用進行了瞭解,那麼如何在使用ksm時進行調優呢?

ksm的參數可以在/etc/ksmtuned.conf文件中調整。其默認參數如下:


$cat 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=300# KSM_NPAGES_DECAY=-50# KSM_NPAGES_MIN=64# KSM_NPAGES_MAX=1250# KSM_THRES_COEF=20# KSM_THRES_CONST=2048# uncomment the following if you want ksmtuned debug info# LOGFILE=/var/log/ksmtuned# DEBUG=1

如果你想獲取優化KSM的調試信息,取消以下注釋:

# LOGFILE=/var/log/ksmtuned# DEBUG=1


配置文件中最重要的參數是KSM_SLEEP_MSEC。Fedora 16使用的默認值是大型服務器的設置值。當在主機上運行較少的虛擬機,使用KSM時最好讓主機休眠更長的時間。例如,嘗試設置KSM_SLEEP_MSEC=50,然後測試對虛擬機的影響。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章