Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

5.2. 巨型分頁與通透式巨型分頁

記憶體是成區管理的,每個區塊稱為「分頁」(page)。每個分頁的大小是 4,096 位元組。1 MB 的記憶體等於 256 個分頁;1 GB 的記憶體等於 256,000 個分頁,餘此類推。CPU 擁有內建的「記憶體管理單元」(memory management unit),每個分頁都透過「分頁表條目」(page table entry)來參照得知。
要啟用系統以管理大量記憶體,有兩種方式:
  • 在硬體的記憶體管理單元裡,增加分頁表的條目
  • 增加分頁大小
第一種方法代價不菲,因為現代處理器中的硬體記憶體管理單元僅支援上百或上千個分頁表條目。除此之外,與成千上萬個分頁(數百萬位元組的記憶體)運作良好的硬體與記憶體管理的演算法則,並不一定與上百萬個分頁(甚至十億以上)的運作良好。這會導致效能上的問題:當應用程式需要使用超過記憶體管理單元所支援的記憶體分頁時,系統就會回到較慢、以軟體為基礎的記憶體管理模式,這會讓整台系統更慢。
RHEL 6 透過「巨型分頁」(huge page),採用第二種方法。
簡單來說,巨型分頁是大小為 2 MB 與 1 GB 的記憶體區塊。2 MB 分頁的分頁表適用於管理以 GB 為單位的記憶體大小;而 1 GB 分頁的分頁表適用於管理以 TB 為單位的記憶體大小。
巨型分頁必須在啟用時就指定。手動管理巨型分頁並不容易,同時常需要大量變更程式碼,讓使用上更有效率。因此,RHEL 6 採用了「通透式巨型分頁」(THP,transparent huge page)。THP 是將建立、管理、使用巨型分頁等工作自動化的萃取層。
THP 會隱藏使用巨型分頁時的複雜事,不讓系統管理者與程式設計師接觸到。因為 THP 的目標是改進效能,因此設計師(不管是來自社群還是 Red Hat)都在多種系統、配置、應用程式、與負載下,測試過 THP 並加以優化。這讓 THP 的預設值能改善大多數系統配置下的效能。
請注意 THP 目前只能對應匿名的記憶體區域,例如堆積與堆疊區域。