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中共享記憶體的使用會出現上述情形。
b、Huge Pages
在下圖中,本地的page table 與system page table中都包含了huge page屬性。是以page table中的任意一個page可能使用了正常的page,
也有可能使用了huge page。同樣程序1和程序2都共享了其中的Hpage2。圖中的實體記憶體正常的page size是4kb,huge page size 是4mb。
四、 hugepage 優點
對于較大的系統記憶體以及sga,使用hugepage可以極大程度的提高Oracle資料庫性能。
a、Not swappable
無需交換。也就是不存在頁面由于記憶體空間不足而存在換入換出的問題
b、Relief of TLB pressure
減輕TLB的壓力,也就是降低了cpu cache可緩存的位址映射壓力。由于使用了huge page,相同的記憶體大小情況下,管理的虛拟位址數量變少。
TLB entry可以包含更多的位址空間,cpu的尋址能力相應的得到了增強。
c、Decreased page table overhead
降低page table負載,對于普通的page,每個entry需要64bytes進行管理,對于50gb的記憶體,管理這些entry,需要800mb的大小
(50*1024*1024)kb/4kb*64bytes/1024/1024=800mb。
d、Eliminated page table lookup overhead
消除page table查找負載
e、Faster overall memory performance
提高記憶體的整體性能
參考 : http://blog.csdn.net/leshami/article/details/8777639
本文轉自 張沖andy 部落格園部落格,原文連結: http://www.cnblogs.com/andy6/p/7479426.html ,如需轉載請自行聯系原作者