Hugepage介紹以及實踐

在Linux 64位系統裏面,默認內存是以4K的頁面(Page)來管理的,當系統有很是多的內存的時候,管理這些內存的消耗就比較大;而HugePage使用2M大小的頁面來減少管理開銷。node

Hugepage的背景


操做系統對於數據的存取直接從內存要比從硬盤讀寫數據要快的多,可是內存是有限的,這樣就引出了物理內存與虛擬內存的概念。虛擬內存是利用硬盤空間虛擬出的一塊邏輯內存,這部分磁盤空間Windows下稱之爲虛擬內存,Linux下被稱爲交換空間(Swap Space)。linux

對於這個大內存的管理(物理內存+虛擬內存),大多數操做系統採用了分頁的方式進行管理。分頁方式能夠避免內存空間的浪費。相應地,也就存在內存的物理地址與虛擬地址的概念,CPU必須把虛擬地址轉換程物理內存地址才能真正訪問內存。爲了提升這個轉換效率,CPU會緩存最近的虛擬內存地址和物理內存地址的映射關係,並保存在一個由CPU維護的映射表中(快表)。爲了儘可能提升內存的訪問速度,須要在映射表中保存儘可能多的映射關係。算法

linux的內存管理採起的是分頁存取機制,爲了保證物理內存能獲得充分的利用,內核會按照LRU算法在適當的時候將內存中不常常使用的內存頁自動交換到虛擬內存中,而將常常使用的信息保留到內存。一般狀況下,Linux默認狀況下每頁是4K,這就意味着若是物理內存很大,則映射表的條目將會很是多,會影響CPU的檢索效率。由於內存大小是固定的,爲了減小映射表的條目,可採起的辦法只有增長頁的尺寸。所以Hugepage便所以而來。緩存

Hugepages相關概念


  • Page Table:頁表,也就是一種用於內存管理的實現方式,用於物理地址到邏輯地址之間的映射。所以對於內存的訪問,先是訪問Page Table,而後根據Page Table中的映射關係,隱式的轉移到物理地址來存取數據。
  • TLB: Translation Lookaside Buffer (TLB) ,CPU中的一塊固定大小的cache,包含了部分page table的映射關係,用於快速實現虛擬地址到物理地址的轉換。
  • hugetlb: hugetlb 是TLB中指向HugePage的一個入口。

Regular Pages 與 HugePages


  • Regular Pages:在下圖中有兩個不一樣的進程,兩個進程對於內存的訪問是首先訪問本地的page table,而本地的page table又參照了TLB,指向了實際的物理地址。圖中物理地址page size大小4kb。

  • HugePages:在下圖中,本地的page table 與TLB中都包含了huge page屬性。所以page table中的任意一個page可能使用了常規的page,也有可能使用了huge page。

Hugepage 優勢


  • 減小了TLB的工做量,因爲使用了huge page,相同的內存大小狀況下,管理的虛擬地址數量變少。
  • 增大TLB的覆蓋範圍,能夠包含更多的地址空間,cpu的尋址能力相應的獲得了加強。
  • 下降page table負載,消除page table查找負載,提升內存的總體性能。

使用Hugepage


在NUMA機器上,應該在單獨的節點上明確分配頁面(假定須要1024頁):ide

echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages

查看Hugepage使用狀況:性能

cat /proc/meminfo|grep Huge

若是已經配置好了大內存頁機制,就可讓DPDK利用大內存頁的機制了。spa

mkdir /mnt/huge 
mount -t hugetlbfs nodev /mnt/huge
相關文章
相關標籤/搜索