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