圖解|透明大頁(yè)原理與實(shí)現(xiàn)
在《圖解|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)閱讀
-
圖解|透明大頁(yè)原理與實(shí)現(xiàn)
在《圖解|Linux大內(nèi)存頁(yè)原理》一文中,我們介紹過標(biāo)準(zhǔn)大頁(yè)的原理與... -
難受的這兩天,你們?cè)趺礃樱?/a>
12月23號(hào)周五,下班回來小云說中午下樓買菜碰到小區(qū)認(rèn)識(shí)的一個(gè)媽媽... -
超越ConvNeXt!Transformer 風(fēng)格的卷積...
↑點(diǎn)擊藍(lán)字關(guān)注極市平臺(tái)作者丨科技猛獸編輯丨極市平臺(tái)極市導(dǎo)讀本文... -
極市直播預(yù)告丨NeurIPS 2022 Oral-張...
↑點(diǎn)擊藍(lán)字關(guān)注極市平臺(tái)|極市線上分享第107期|一直以來,為讓大家更... -
【天天時(shí)快訊】最大CLIP!LAION發(fā)布CLIP...
點(diǎn)藍(lán)色字關(guān)注“機(jī)器學(xué)習(xí)算法工程師”設(shè)為星標(biāo),干貨直達(dá)!近日,LAI... -
百事通!使用PyTorch 2.0 加速Hugging...
點(diǎn)藍(lán)色字關(guān)注“機(jī)器學(xué)習(xí)算法工程師”設(shè)為星標(biāo),干貨直達(dá)!?PyTorch...