Linux 之 hugepage 大頁記憶體理論

2021-09-07 14:38:33 字數 2056 閱讀 6458

hugepages是通過使用大頁記憶體來取代傳統的4kb記憶體頁面,使得管理虛擬位址數變少,加快了從虛擬位址到實體地址的對映以及通過摒棄記憶體頁面的換入換出以提高記憶體的整體效能。尤其是對於8gb以上的記憶體以及較大的oracle sga size,建議配值並使用hugepage特性。本文基於x86_64 linux下來描述如何配值 hugepages。

1、hugepage的引入

作業系統對於資料的訪問直接從物理記憶體要比從磁碟讀寫資料要快的多,但是物理記憶體是有限的,這樣就引出了物理記憶體與虛擬記憶體的概念。虛擬記憶體就是為了滿足物理記憶體的不足而提出的策略,它是利用磁碟空間虛擬出的一塊邏輯記憶體,這部分磁碟空間windows下稱之為虛擬記憶體,linux下被稱為交換空間(swap space)。

對於這個大記憶體的管理(物理記憶體+虛擬記憶體),大多數作業系統採用了分段或分頁的方式進行管理。分段是粗粒度的管理方式,而分頁則是細粒度管理方式,分頁方式可以避免記憶體空間的浪費。相應地,也就存在記憶體的實體地址與虛擬位址的概念。通過前面這兩種方式,cpu必須把虛擬位址轉換程物理記憶體位址才能真正訪問記憶體。為了提高這個轉換效率,cpu會快取最近的虛擬記憶體位址和物理記憶體位址的對映關係,並儲存在乙個由cpu維護的對映表中。為了盡量提高記憶體的訪問速度,需要在對映表中儲存盡量多的對映關係。

linux的記憶體管理採取的是分頁訪問機制,為了保證物理記憶體能得到充分的利用,核心會按照lru演算法在適當的時候將物理記憶體中不經常使用的記憶體頁自動交換到虛擬記憶體中,而將經常使用的資訊保留到物理記憶體。通常情況下,linux預設情況下每頁是4k,這就意味著如果物理記憶體很大,則對映表的條目將會非常多,會影響cpu的檢索效率。因為記憶體大小是固定的,為了減少對映表的條目,可採取的辦法只有增加頁的尺寸。因此hugepage便因此而來。也就是打破傳統的小頁面的記憶體管理方式,使用大頁面2m,4m,16m等等。如此一來對映條目則明顯減少。如果系統有大量的物理記憶體(大於8g),則物理32位的作業系統還是64位的,都應該使用hugepage。

二、hugepages相關概念

page table: page table也就是一種用於記憶體管理的實現方式,用於實體地址到虛擬之間的對映。因此對於記憶體的訪問,先是訪問page table,然後根據page table 中的對映關係,隱式的轉移到實體地址來訪問資料。

tlb: translation lookaside buffer (tlb) ,cpu中的一塊固定大小的cache,包含了部分page table的對映關係,用於快速實現虛擬位址到實體地址的轉換。

hugetlb: hugetlb 是tlb中指向hugepage的乙個entry(通常大於4k或預定義頁面大小)。 hugepage 通過hugetlb entries來實現,也可以理解為hugepage 是hugetlb page entry的乙個控制代碼。

hugetlbfs: 乙個類似於tmpfs的新的in-memory filesystem,在2.6核心被提出。

三、regular pages 與 hugepages

a、regular pages

在下圖中有兩個不同的程序,兩個程序對於記憶體的訪問是首先訪問本地的page table,而本地的page table又參照了system-wide table的page(也就是前面描述的tlb),最終system-wide table中的entry指向了實際的實體地址。圖中實體地址page size大小4kb。也可以看到程序1和程序2在system-wide table中都指向了page2,也就是同乙個實體地址。oracle sga中共享記憶體的使用會出現上述情形。

在下圖中,本地的page table 與system page table中都包含了huge page屬性。因此page table中的任意乙個page可能使用了常規的page,

也有可能使用了huge page。同樣程序1和程序2都共享了其中的hpage2。圖中的物理記憶體常規的page size是4kb,huge page size 是4mb。

四、 hugepage 優點

大前端之 Vue Router

本質上路由就是對應關係 1.後端路由 3.前端路由引入檔案 需要注意的是,兩者順序不能相反,因為vue router依賴vue.js lib vue 2.5.22.js script lib vue router 3.0.2.js script 提供路由變換的元件 const user const ...

linux 大頁記憶體

1 什麼是大頁記憶體 大記憶體頁 有助於 linux 系統進行虛擬記憶體管理。顧名思義,除了標準的 4kb 大小的頁面外,它們還能幫助管理記憶體中的巨大的頁面。使用 大記憶體頁 你最大可以定義 1gb 的頁面大小。2 為什麼使用大頁記憶體 如果在系統中使用了huge page,則記憶體頁的數量會減少...

linux三大劍客

awk是一種很棒的語言,適合文字處理和報表生成。使用方法 awk 儘管操作可能會很複雜,但是語法總是這樣,其中pattern表示awk再資料中查詢的內容,而action是再找到匹配內容時所執行的一系列命令,包括 不需要再程式中始終出現,pattern就是要表示的正規表示式,用斜槓括起來。action...