本發(fā)明屬于通信技術(shù)領(lǐng)域,具體涉及一種基于大頁(yè)的缺頁(yè)異常解決方法。
背景技術(shù):
在當(dāng)今的電信云環(huán)境下,為了提高物理資源的使用效率,單臺(tái)物理服務(wù)器上整合了幾十甚至上百個(gè)虛擬機(jī)來(lái)承載電信業(yè)務(wù)。用戶把大量虛擬機(jī)整合到少數(shù)的物理機(jī)上,這樣可以更高效的使用物理資源。整合比(consolidationratio)作為衡量一臺(tái)物理機(jī)運(yùn)行的虛擬機(jī)數(shù)據(jù)的一種標(biāo)準(zhǔn),其數(shù)值高低代表了平臺(tái)的效率。高的整合比代表了低成本高效率。而復(fù)用技術(shù)(overcommitment)是提高整合比的關(guān)鍵技術(shù),其中分為內(nèi)存復(fù)用和cpu復(fù)用技術(shù)。
所謂內(nèi)存復(fù)用(memoryovercommitment)就是一種有效提高整合比的綜合技術(shù)。其定義如下:允許用戶開啟的虛擬機(jī)的總的配置內(nèi)存大于實(shí)際運(yùn)行的物理機(jī)內(nèi)存的一種技術(shù)。
內(nèi)存復(fù)用在通用操作系統(tǒng)中最典型的體現(xiàn)就是虛擬內(nèi)存。所有運(yùn)行的應(yīng)用的映射的虛擬內(nèi)存往往超過實(shí)際物理內(nèi)存。如果所有正在運(yùn)行的應(yīng)用的工作集超過了物理內(nèi)存,那么os可以通過swap回收內(nèi)存,從而騰出空間。
如今,隨著技術(shù)的發(fā)展,我們的計(jì)算機(jī)的內(nèi)存變得越來(lái)越大,傳統(tǒng)的內(nèi)存管理將內(nèi)存以4k的粒度來(lái)進(jìn)行劃分也變得越來(lái)越低效。
現(xiàn)有的典型的內(nèi)存復(fù)用技術(shù),主要有以下幾種:內(nèi)存壓縮、內(nèi)存去重、ballooning技術(shù)、transcendentmemory技術(shù)以及swap技術(shù)等。
內(nèi)存去重(memorydedulplication)就是把內(nèi)存中的重復(fù)內(nèi)容消除以提高內(nèi)存利用率的技術(shù)。由于現(xiàn)代計(jì)算機(jī)的內(nèi)存是分頁(yè)管理的,所以內(nèi)存去重技術(shù)往往指的就是頁(yè)共享(pagesharing)技術(shù)。它通過共享相同內(nèi)容的物理內(nèi)存頁(yè)從而降低物理內(nèi)存消耗。內(nèi)存去重是去掉重復(fù)的物理內(nèi)存,以節(jié)省物理內(nèi)存。
ballooning技術(shù)和transcendentmemory技術(shù)是基于虛擬化平臺(tái)上的內(nèi)存復(fù)用技術(shù)。簡(jiǎn)而言之,就是通過監(jiān)測(cè)虛擬化平臺(tái)上各個(gè)虛擬機(jī)的實(shí)際內(nèi)存使用情況,來(lái)對(duì)各個(gè)虛擬機(jī)的內(nèi)存進(jìn)行管理,即將實(shí)際使用內(nèi)存少于分配的內(nèi)存的虛擬機(jī)內(nèi)存進(jìn)行回收,來(lái)供給其余用途。
內(nèi)存壓縮則比較好理解:由于現(xiàn)今計(jì)算機(jī)的cpu利用率比較空閑,因此,通過使cpu變得“忙碌”起來(lái),將內(nèi)存中的一些“冷頁(yè)”進(jìn)行壓縮然后重新存放到內(nèi)存中,從而來(lái)使我們有更多的可用內(nèi)存。
在現(xiàn)有內(nèi)核中,已經(jīng)有了基于伙伴系統(tǒng)實(shí)現(xiàn)大頁(yè)(hugetlb)的整套機(jī)制,包括缺頁(yè)異常的實(shí)現(xiàn),但是該機(jī)制對(duì)系統(tǒng)所產(chǎn)生的開銷比較大(一個(gè)2m大頁(yè)需要分配512個(gè)4k的小頁(yè)),同時(shí)由于對(duì)物理內(nèi)存的連續(xù)性要求,在系統(tǒng)運(yùn)行較長(zhǎng)一段時(shí)間后,基于該機(jī)制的大頁(yè)分配會(huì)經(jīng)常失敗。
內(nèi)存壓縮可以有效的提高內(nèi)存有效容量,降低頁(yè)故障率,同時(shí)不會(huì)有大容量?jī)?nèi)存的使用帶來(lái)的能耗和空間消耗。同時(shí)可以提高內(nèi)存帶寬使用率。但是壓縮和解壓縮會(huì)帶來(lái)延遲,如果處理不當(dāng)可能把壓縮帶來(lái)的好處抵消掉。因此有效使用壓縮技術(shù)需要謹(jǐn)慎選擇實(shí)現(xiàn)框架、壓縮算法等等。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述,本發(fā)明提供了一種基于大頁(yè)的缺頁(yè)異常解決方法,該實(shí)現(xiàn)方法能夠有效地解決由于新產(chǎn)生大頁(yè)不在內(nèi)存中所產(chǎn)生的缺頁(yè)異常以及該頁(yè)被壓縮后再次被訪問所產(chǎn)生的壓縮缺頁(yè)異常問題。
一種基于大頁(yè)的缺頁(yè)異常解決方法,包括以下步驟:
(1)系統(tǒng)根據(jù)新產(chǎn)生的頁(yè)故障,判斷大頁(yè)p是否存在于頁(yè)緩存中,若是,讀取該大頁(yè)p,設(shè)置該頁(yè)p對(duì)應(yīng)的頁(yè)描述符,并執(zhí)行步驟(5),若否,執(zhí)行步驟(2);
(2)系統(tǒng)向2m大頁(yè)管理系統(tǒng)申請(qǐng)一個(gè)新大頁(yè)pn;
(3)系統(tǒng)初始化設(shè)置新大頁(yè)pn對(duì)應(yīng)的頁(yè)描述符,并將該新大頁(yè)pn的內(nèi)容設(shè)置為0;
(4)系統(tǒng)調(diào)用解壓縮接口,并根據(jù)該接口調(diào)用的返回值判斷大頁(yè)p是否被壓縮過,
若返回值為0,則大頁(yè)p已被壓縮,利用解壓縮接口對(duì)大頁(yè)p進(jìn)行解壓縮,將解壓縮得到的內(nèi)容寫入新大頁(yè)pn中,并設(shè)置新大頁(yè)pn對(duì)應(yīng)的頁(yè)描述符,并執(zhí)行步驟(5);
若返回值為m2ram_no_data,大頁(yè)p沒有被壓縮,保持新大頁(yè)pn的頁(yè)描述符不變,并執(zhí)行步驟(5);
若返回值既非0也非m2ram_no_data,解壓縮過程出錯(cuò),返回錯(cuò)誤至上層接口;
(5)系統(tǒng)設(shè)置大頁(yè)p或新大頁(yè)pn的頁(yè)表項(xiàng)。
所述的2m大頁(yè)管理系統(tǒng)包括:大頁(yè)內(nèi)存及調(diào)用大頁(yè)內(nèi)存的接口函數(shù),其中,大頁(yè)內(nèi)存分為多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)分為多個(gè)分區(qū),每個(gè)分區(qū)由以雙向鏈表的形式連接在一起的多個(gè)2m大頁(yè)組成;接口函數(shù)包括用于獲取單個(gè)大頁(yè)的申請(qǐng)函數(shù)、用于釋放大頁(yè)的釋放函數(shù)、用于將大頁(yè)占為己有且禁止其他進(jìn)程訪問的鎖函數(shù)以及用于恢復(fù)大頁(yè)自由的解鎖函數(shù)。
本發(fā)明提供了一種基于大頁(yè)的缺頁(yè)異常的處理方法,在相同的物理硬件設(shè)施的情況下,該方法結(jié)合壓縮模塊與2m大頁(yè)管理系統(tǒng)能夠增大可用物理內(nèi)存。不僅在成本開銷上,有很大的節(jié)省,同時(shí)通過大頁(yè)的支持,能夠很明顯地降低tlb的miss率,這對(duì)性能的提升有著很大的幫助。
附圖說(shuō)明
圖1是實(shí)施例基于大頁(yè)的缺頁(yè)異常處理方法的流程圖。
具體實(shí)施方式
為了更為具體地描述本發(fā)明,下面結(jié)合附圖及具體實(shí)施方式對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說(shuō)明。
正常的linux系統(tǒng)中,當(dāng)頁(yè)錯(cuò)誤產(chǎn)生時(shí),判斷頁(yè)錯(cuò)誤是否為大頁(yè)錯(cuò)誤,若否,系統(tǒng)對(duì)該頁(yè)執(zhí)行小頁(yè)錯(cuò)誤相應(yīng)處理流程,若是,系統(tǒng)對(duì)該頁(yè)執(zhí)行大頁(yè)錯(cuò)誤相應(yīng)處理流程,此處大頁(yè)進(jìn)入的是linux系統(tǒng)中原有的基于伙伴系統(tǒng)來(lái)進(jìn)行分配的大頁(yè)缺頁(yè)調(diào)用。
本發(fā)明借用現(xiàn)有的hugetlbfs架構(gòu),將原有的基于伙伴系統(tǒng)的大頁(yè)故障處理流程替換為基于2m大頁(yè)管理系統(tǒng)的大頁(yè)故障處理流程,具體是通過定義一個(gè)宏來(lái)使后續(xù)流程進(jìn)行2m大頁(yè)管理系統(tǒng)的大頁(yè)框架缺頁(yè)處理流程,該大頁(yè)框架缺頁(yè)異常處理流程如圖1所示,具體為:
s01,系統(tǒng)產(chǎn)生類型為新頁(yè)的頁(yè)故障;
s02,系統(tǒng)判斷大頁(yè)p是否存在于頁(yè)緩存pagecache中,若是,從pagecache中讀取該大頁(yè)p,并設(shè)置該頁(yè)p對(duì)應(yīng)的頁(yè)描述符,并執(zhí)行s05,若否,執(zhí)行s02;
s02,系統(tǒng)向2m大頁(yè)管理系統(tǒng)申請(qǐng)一個(gè)新大頁(yè)pn;
s03,系統(tǒng)初始化設(shè)置新大頁(yè)pn對(duì)應(yīng)的頁(yè)描述符,并將該新大頁(yè)pn的內(nèi)容設(shè)置為0;
s04,系統(tǒng)調(diào)用解壓縮接口,并根據(jù)該接口的返回值判斷大頁(yè)p是否被壓縮過,
若返回值為0,則大頁(yè)p已被壓縮,利用解壓縮接口對(duì)大頁(yè)p進(jìn)行解壓縮,將解壓縮得到的內(nèi)容寫入新大頁(yè)pn中,并設(shè)置新大頁(yè)pn對(duì)應(yīng)的頁(yè)描述符,并執(zhí)行s05;
若返回值為m2ram_no_data,大頁(yè)p沒有被壓縮,保持新大頁(yè)pn的頁(yè)描述符不變,執(zhí)行s05;
若返回值既非0也非m2ram_no_data,解壓縮過程出錯(cuò),返回錯(cuò)誤至上層接口;
s05,系統(tǒng)設(shè)置大頁(yè)p或新大頁(yè)pn的頁(yè)表項(xiàng)。
本實(shí)施例中的2m大頁(yè)管理系統(tǒng)是大頁(yè)內(nèi)存及調(diào)用大頁(yè)內(nèi)存的接口函數(shù),其中,大頁(yè)內(nèi)存分為多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)分為多個(gè)分區(qū),每個(gè)分區(qū)由以雙向鏈表的形式連接在一起的多個(gè)2m大頁(yè)組成,接口函數(shù)包括用于獲取單個(gè)大頁(yè)的申請(qǐng)函數(shù)、用于釋放大頁(yè)的釋放函數(shù)、用于將大頁(yè)占為己有且禁止其他進(jìn)程訪問的鎖函數(shù)以及用于恢復(fù)大頁(yè)自由的解鎖函數(shù)。
利用本實(shí)施例的方法,可以有效地解決由于新產(chǎn)生大頁(yè)不在內(nèi)存中所產(chǎn)生的缺頁(yè)異常以及該頁(yè)被壓縮后再次被訪問所產(chǎn)生的壓縮缺頁(yè)異常問題。
以上所述的具體實(shí)施方式對(duì)本發(fā)明的技術(shù)方案和有益效果進(jìn)行了詳細(xì)說(shuō)明,應(yīng)理解的是以上所述僅為本發(fā)明的最優(yōu)選實(shí)施例,并不用于限制本發(fā)明,凡在本發(fā)明的原則范圍內(nèi)所做的任何修改、補(bǔ)充和等同替換等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。