Proxmox VE KSM 與 SWAP --- >PVE的 Summary 頁面,會看到SWAP usage,還會看到KSM Sharing兩個數據。 >記憶體的安全機制,不建議沒有,但記憶體很大量的時代,百分比太低會太早觸發, >透過調整,只有快見底的時候才需要的作法。 ### SWAP swap幾乎不陌生, 曾經在其他Linux平台,因為swap的交換,遇過CPU飆高的現象。 當swap與實體記憶體交換的時候,CPU與硬碟IO是會耗用的。 經驗上曾遇到大量交換的狀況,整台Server的服務癱瘓。 swappiness 大多數預設為60,也就是記憶體占用40%,有機會觸發swap機制。 那基於debain的PVE也有,預設也是60。 那因為記憶體夠多,個人也在其他Linux平台, 習慣上調整到10,也就是90%, 本身也怕這件事發生在PVE。 但本次實驗故意40%來實驗提高觸發機率。 ### KSM KSM是一種技術,可以將相同的記憶體合併, 讓記憶體總量占用減少。 但它跟swap一樣都會有額外的CPU耗用, PVE預設值當80%記憶體耗用,會開始有機會執行記憶體合併。 當KSM數據正在提高的時候,實體記憶體的耗用會跟著降低,因為被合併節省下來了。 ### 實驗 預設的情況下,看到swap 與 ksm 在 Summary頁面有數據, 代表記憶體曾經達標過或正在達標觸發的狀態。 預設值回顧 swap是40%,KSM是80%。 我故意在一台PVE開幾台VM故意調高記憶體耗用, 占用大量記憶體,馬上使記憶體達到滿載做觀察。 swap會開始有量出現,不夠的量往swap吃了。 過一陣子,KSM開始慢慢吃到1GB, 代表掃描結果認為可以合併的記憶體有1GB, 當KSM顯示多少,實體記憶體會有相對的記憶體數量節省,使占用%數明顯下降。  然後關閉所有VM,已經沒VM了,swap跟ksm會保持有數值。  但是VM都關閉了或是部分關閉,已經放掉大量記憶體了, 佔用並沒有釋放,有辦法歸零嗎? 一般重開機即可,但有沒有可能不重開機釋放,再實驗一下, 開啟幾個VM運行但整體記憶體20~30%低耗,host記憶體還很充足的狀況,來做實驗, 關於KSM的部分,由於它是合併記憶體來節省, 那當它釋放掉就是把合併的節省量還回來, 要**確認記憶體非常充足**,目前是滿足的, 先執行釋放關閉 echo 2 |tee /sys/kernel/mm/ksm/run 再執行恢復KSM運作 echo 1 |tee /sys/kernel/mm/ksm/run 如果沒執行恢復,之後記憶體吃上去也不會觸發 KSM合併記憶體, 我故意不恢復運作,吃上去高占用記憶體狀況下確實不會合併, 再恢復KSM運作,會發現記憶體開始合併,CPU也會開始消耗。 會看到 KSM 歸零,實體記憶體會依照釋放掉量往上提升。 KSM是持續掃描記憶體的,當開始有合併的時候,合併越多CPU耗用需求會提高。 關於swap則是透過開關,把swap還回記憶體,記憶體也是要**先確認非常充足**。 swapoff -a && swapon -a 但這個**操作會有明顯卡頓,CPU/與硬碟IO飆高的現象,請小心**。 兩者歸零後,回來看故意開著VM還正常運作。 ### 實驗心得 KSM是持續掃描記憶體的,當開始有合併的時候, 合併量越多CPU掃描記憶體所耗用需求會提高。 swap再交換的時候會有CPU耗用,大量交換或是遇到特殊意外情況, 會有CPU高耗癱瘓的情況。 現在記憶體量都很大,可能將KSM與swap觸發條件提高80~90%, 然後平常跟80%保持距離,可能是最不影響效能的狀況吧。 上述條件下保持80%距離, 若看到swap跟 KSM還是有機會觸發有數據,代表曾經超過且有觸發, 可以當作是要不要再塞VM進去的指標,畢竟都調整到80%以上才作用。 ### 個人策略主張 我主張SWAP跟KSM是需要, 但是預設值我偏好KSM預設80%,SWAP的swappiness調整到10(即90%), 畢竟突然不足的時候才有緩衝的作用,不至於OOM引發更嚴重的問題。 這時代這麼大記憶體,上述條件下還有數值的話,當指標有數值,考慮不要再塞VM進去了。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up