KSM與KVM CPU、內存控制

今天在登錄一臺KVM物理機時,發現進程ksmd居然佔用50%以上的cpu,較之單個qemu-kvm進程佔用的cpu還大 。因爲對該進程作什麼用的不甚瞭解。因此不敢貿然將其kill掉 。具體什麼是KSM呢 ?服務器

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

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

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

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

對任何系統來講,最佳選擇將取決於建立虛擬環境時的內存估算。若是在虛擬主機中有足夠的物理內存,在沒有開啓KSM時就可以知足虛擬機的內存需求,那麼最好關閉KSM。關閉的方法以下:優化


chkconfig ksmd offchkconfig ksmtuned offservice ksmd offservice ksmtuned off

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

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

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的調試信息,取消如下注釋:debug

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


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

相關文章
相關標籤/搜索