2021-02-06 分類: 網站建設
KVM的KSM技術介紹
共享內存的概念在現代操作系統(tǒng)中很常用了,比如,一個程序啟動時會與父進程共用它的全部內存。但子或父進程需要修改共享內存的時候,linux便再分配新內存,然后copy原區(qū)域內容到新內存。這個過程就叫copy on write。
而KSM是linux的新屬性,它做的東西剛好與共享內存相反。 當linux啟用了KSM之后,KSM會檢查多個運行中的進程,并比對它們的內存。如果任何區(qū)域或者分頁是一樣的,KSM就會毫不猶豫地合并他們成一個分頁。 那么新分頁也是被標記成copy on write。如果VM要修改內存的話,那么linux就會分配新的內存給這個VM。
KSM技術應用場景
了解了KSM技術后,覺得KSM可以在KVM大有作為哦。
優(yōu)點:
a. 一個VM啟動,則只繼承了父進程(qemu-kvm)的內存。一臺VM的內存,可以讓相同操作系統(tǒng)或者運行相同應用的VM共享。
b. 當開啟了KSM,常用的進程數據存在緩存和主內存中。這樣可以減少VM的緩存未命中,同時也提高了VM性能。
c. 共享內存降低了VM的總體內存使用率,從而允許更高的密度和更大的資源利用率。
當然每種技術都有局限性的,不同場景下,它的缺點也暴露無疑。
a. 利用KSM使內存超用。這會導致消耗一定的計算資源用于內存掃描,加重了CPU的消耗。內存超用,使得頻繁地使用swap交互,導致VM性能下降。
b. KSM使用了邊通道(side channels),可能存在泄露客戶信息的潛在風險。為此就要考慮在VM上關閉KSM。
所以總結一下應用的場景:
a. 生產環(huán)境慎用,應急時可開啟。
b. 測試環(huán)境建議使用。
c. 桌面虛擬化環(huán)境建議使用,但要注意內存使用情況。
KSM技術實踐
Linux的2.6.32 內核中新增了 KSM(Kernel Samepage Merging),在CentOS 6和Fedora 16中,KSM默認是打開的。而debian和ubuntu默認是沒有這個服務的。 KSM通過兩個服務:ksmd和ksmtuned實現,管理員應該判斷他們的環(huán)境并決定保持KSM處于運行狀態(tài)還是關閉它。
1. 對centos6系統(tǒng)來說,在沒有開啟KSM時就能夠滿足虛擬機的內存需求,那么最好關閉KSM。關閉的方法如下:
- chkconfig ksmd off
- chkconfig ksmtuned off
- service ksmd off
- service ksmtuned off
2. 而ubuntu默認沒有KSM服務, 如果需要使用則安裝ksmtuned服務
- sudo apt-get install ksmtuned
- service ksmtuned start
3. 查看KSM運行情況
在/sys/kernel/mm/ksm目錄下,
pages_to_scan: ksmd睡眠前需要掃描多少分頁(默認是100)。
sleep_millisecs :文件定義執(zhí)行另一次頁面掃描前 ksmd 休眠的毫秒數。
max_kernel_pages :文件定義 ksmd 可以使用的大頁面數(默認值是可用內存的 25%,但可以寫入一個 0 來指定為無限)。
pages_to_scan :文件定義一次給定掃描中可以掃描的頁面數。任何用戶都可以查看。這些文件,但是用戶必須擁有根權限才能修改它們。
full_scans :文件表明已經執(zhí)行的全區(qū)域掃描的次數。
pages_shared:KSM 正在使用的不可交換的內核頁面的數量。
pages_sharing:一個內存存儲指示。 多少節(jié)點被共享并且多少被保存。
pages_unshared:為合并而重復檢查的惟一頁面的數量。
pages_volatile:頻繁改變的頁面的數量。
max_page_sharing: 每個分頁能運行共享的次數。
merge_across_nodes: 是否指定多個numa節(jié)點的內存進行合并。
run :設置ksm屬性的狀態(tài)。
use_zero_pages : 是否合并空白分頁,默認關閉。
4. KSM設置
即然上面對KSM的作用進行了了解,那么如何在使用KSM時進行調優(yōu)呢?
KSM的參數可以在/etc/ksmtuned.conf文件中調整。其默認參數如下:
以下是對于該參數的具體解釋:
KSM_MONITOR_INTERVAL表示ksm每次內存掃描的時間;
KSM_SLEEP_MSEC表示每次掃描休息的間隔時間(最小值為10),KSM掃描會占用一些CPU的開銷,所以當KVM虛擬機數量或者應用軟件較少時可以調整KSM_SLEEP_MSEC至一個較大的值,反之則設置較小的值;同時當Hypervisor里面的虛擬機的內存調優(yōu)到達一個穩(wěn)定狀態(tài),也可以根據情況把這個參數調小節(jié)省CPU的開銷;
KSM_THRES_COEF表示臨界值系數;
KSM_THRES_CONST表示臨界值常量;
KSM_NPAGES_BOOST表示內存頁合并增加數量;
KSM_NPAGES_DECAY表示內存頁合并減少數量;
KSM_NPAGES_MIN表示內存頁合并最小值;
KSM_NPAGES_MAX表示內存頁合并大值;
LOGFILE表示ksmtuned的日志存放路徑,建議使用默認路徑;
DEBUG取消注釋才生效,建議使用默認值。
5. 對vm的設置
在kvm環(huán)境中,可以選擇VM是否允許內存合并。
為了保護客戶的信息不泄露,一般我們還是會關閉KSM。步驟很簡單,修改VM的xml:
- <memoryBacking>
- <nosharepages/>
- </memoryBacking>
文章題目:玩轉KVM: 聊聊KSM內存合并
瀏覽路徑:http://m.newbst.com/news19/99469.html
成都網站建設公司_創(chuàng)新互聯,為您提供用戶體驗、手機網站建設、自適應網站、App設計、軟件開發(fā)、網站內鏈
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯
猜你還喜歡下面的內容