2019年1月23日 星期三

[經驗分享]調整 Proxmox VE 內建 KSM 機制參數



現代的伺服器虛擬化技術成熟,可以幫助企業省下許多硬體設備支出。

但虛擬化以後,最常聽見的是記憶體短缺,有沒有什麼方法可以讓我們更有效率的在虛擬機上使用有限的記憶體?




技術說明

Proxmox VE 從 1.5 版起支援 KSM,現在的版本均預設有啟用 KSM (Kernel Samepage Merging) 技術,簡單來說可以稱之為是記憶體版本的「重複資料刪除」(Deduplication),透過將記憶體中相同的區塊予以整合,可以省下大量的空間。

在 PVE 中,並不會隨時執行 KSM 機制,預設值是記憶體使用量達到 80% 以後才啟動,此時你會看到記憶體的使用量漸漸減少,在 Node 節點的 Summary 概觀中可以看到 KSM sharing 的數值持續增加。



KSM 大幅節省記憶體用量


上圖中是一個經典的案例,KSM 技術幫我們省下大量的記憶體,在 KSM sharing 欄位中明確看到它幫我們省掉 95.59G 的記憶體。

也就是說,原本應該使用大約 168G 的記憶體,經過 KSM 技術加持以後只使用了約 73G,這樣的效益非常驚人,在這台機器上將可以容納更多的虛擬機執行,根本是窮困 IT 虛擬化必備神器。



窮困如我,KSM 要有


如果想要讓 KSM 效益極大化,最好在同一個節點上的虛擬機,儘量執行同樣的作業系統,這樣才能消去更多的重複資料。




調整設定

過去有些朋友可能是認為 KSM 不穩定,或是認為 KSM 為了做重複資料刪除會用到一部份 CPU 資源而想要予以停用,可以使用下列方法,但我必需補充,目前 KSM 已經相當穩定,可以放心使用它。



關閉 KSM 機制


停用 KSM 最簡單的方法是到 WebUI 的 [System] -> [ksmtuned] -> [Stop],即可立即停用。

停用 KSM 機制




調整 KSM 參數


另一種想法,想要修改預設在 80% 才執行的門檻,例如提早到 60% 就執行,或是要到 90% 再執行呢?

KSM 的設定檔都放置在 /etc/ksmtuned.conf 這個檔案裡。

KSM 參數設定檔


如果想要調整啟用的比例門檻,需要修改的是「KSM_THRES_COEF」這個參數,預設值為 20%,即表示在剩下 20% 的時候啟動,換個說法也就是記憶體使用率到達 80% 時啟動。

若要改成 60% 就啟動,請先這個值修改為 40,並把前方的註解 # 去掉。

修改 KSM 啟動門檻值


接著,依據前面的說明,在 WebUI 上重新啟動 ksmtuned 服務即可。


提醒:
進階修改請小心服用,建議先做備份再進行,以策安全。





其它平台

除了 Proxmox VE 支援此功能,其它平台也有類似技術:

  • VMware:Transparent Page Sharing (TPS)
  • Xen:Memory CoW
  • VirtualBox:PageFusion





參考資料