国产精品夜色视频一级区_hh99m福利毛片_国产一区二区成人久久免费影院_伊人久久大香线蕉综合影院75_国产精品久久果冻传媒

您的位置:首頁(yè) >聚焦 >

圖解|透明大頁(yè)原理與實(shí)現(xiàn)

2022-12-30 17:45:21    來源:程序員客棧

在《圖解|Linux大內(nèi)存頁(yè)原理》一文中,我們介紹過標(biāo)準(zhǔn)大頁(yè)的原理與其優(yōu)點(diǎn),現(xiàn)在我們回顧一下標(biāo)準(zhǔn)大頁(yè)有哪些優(yōu)點(diǎn):


(相關(guān)資料圖)

減少轉(zhuǎn)譯后備緩沖區(qū)(Translation Lookaside Buffer,TLB)的失效情況,TLB 是 CPU 為了加速虛擬內(nèi)存地址轉(zhuǎn)換成物理內(nèi)存地址而增加的緩沖區(qū)。減少頁(yè)表的內(nèi)存消耗。減少缺頁(yè)異常(page fault)發(fā)生的次數(shù),缺頁(yè)異常處理例程需要對(duì)虛擬內(nèi)存地址進(jìn)行映射,而這個(gè)映射過程也是一個(gè)耗時(shí)的過程。

可以看出,使用大頁(yè)能夠加速系統(tǒng)的運(yùn)行效率。

但是標(biāo)準(zhǔn)大頁(yè)使用起來比較麻煩,需要掛載 Hugetlb 文件系統(tǒng),并且需要使用 mmap 系統(tǒng)調(diào)用來對(duì)大頁(yè)進(jìn)行映射。為了解決標(biāo)準(zhǔn)大頁(yè)使用麻煩的問題,紅帽子(Red Hat)公司開發(fā)出透明大頁(yè)(Transparent Huge Pages,THP)功能。

要使用透明大頁(yè)功能,只需要使用以下命令開啟即可:

echoalways>/sys/kernel/mm/transparent_hugepage/enabled

開啟了透明大頁(yè)功能后,內(nèi)核將會(huì)創(chuàng)建一個(gè)名為khugepaged的內(nèi)核線程。

khugepaged內(nèi)核線程會(huì)不斷掃描進(jìn)程的虛擬內(nèi)存空間(vma,virtual memory area),如果發(fā)現(xiàn)存在 2MB 地址連續(xù)的虛擬地址空間,那么判斷其是否滿足轉(zhuǎn)換成大頁(yè)的條件,如果滿足則將這些物理內(nèi)存合并成一個(gè)大頁(yè)。如下圖所示:

相對(duì)于使用繁瑣的標(biāo)準(zhǔn)大頁(yè),透明大頁(yè)顯得更加友好。

透明大頁(yè)原理

操作系統(tǒng)管理內(nèi)存時(shí),是以頁(yè)作為單位的,常用的頁(yè)大小有4KB、2MB和1GB。4KB 的內(nèi)存頁(yè)被稱為普通內(nèi)存頁(yè),而 2MB 和 1GB 的內(nèi)存頁(yè)被稱為大頁(yè)。

通常來說,4KB 的內(nèi)存頁(yè)使用頻率最多,但有時(shí)候?yàn)榱藴p少缺頁(yè)異常發(fā)生的次數(shù)(提升程序的性能),所以會(huì)使用 2MB 或者 1GB 的內(nèi)存頁(yè)來代替 4KB 的內(nèi)存頁(yè)。

透明大頁(yè)核心思想

透明大頁(yè)的核心思想很簡(jiǎn)單:不斷掃描進(jìn)程的虛擬內(nèi)存區(qū)間(vma),如果發(fā)現(xiàn)大小超過 2MB 的內(nèi)存區(qū)間,將會(huì)判斷其是否滿足轉(zhuǎn)換成大頁(yè)的條件,如果滿足則將這些物理內(nèi)存合并成一個(gè)大頁(yè)。

我們知道每個(gè)進(jìn)程都有一個(gè) mm_struct 結(jié)構(gòu),用來管理進(jìn)程的虛擬內(nèi)存空間和映射物理地址的頁(yè)表等信息,而虛擬內(nèi)存的區(qū)間是通過 vm_area_struct 結(jié)構(gòu)(vma)來管理的。

透明大頁(yè)的核心邏輯步驟:

查找滿足轉(zhuǎn)換成大頁(yè)的內(nèi)存區(qū)間

khugepaged內(nèi)核線程會(huì)掃描進(jìn)程的虛擬內(nèi)存空間,如果發(fā)現(xiàn)內(nèi)存區(qū)間大于等于 2MB,并且滿足轉(zhuǎn)換成大頁(yè)的條件,那么將會(huì)進(jìn)入下面的步驟。

關(guān)鍵詞: 虛擬內(nèi)存 物理內(nèi)存 異常發(fā)生

相關(guān)閱讀