Linux

如何知道我的伺服器是否應該使用大頁面(記憶體頁面大小)

  • February 26, 2018

我們在集群中有幾台伺服器,我們想知道在什麼情況下我們需要配置大頁面?

我也有幾個問題

  1. 劑量“記憶體頁面大小”等於巨大的頁面?

在我的 linux 伺服器中,我輸入了以下命令來驗證預設記憶體頁面大小

grep Hugepagesize /proc/meminfo

Hugepagesize: 2048 kB

getconf PAGESIZE

4096
  1. 但正如大家在這裡看到的那樣,我們得到了不同的結果,為什麼?
  2. 使用大頁面有什麼風險?
  3. 劑量禁用透明大頁面 - 意味著禁用大頁面選項?

當應用程序需要對它們進行隨機訪問的大型映射時,大頁面很有趣,因為對於翻譯備份緩衝區 (TLB) 而言,這是最壞的情況。您可以權衡 TLB 條目的映射粒度。

頁面,包括大頁面,只能映射到相同大小的物理記憶體塊,並與該大小對齊。所以一個2MB的hugepage需要映射到物理RAM中2MB的邊界,1GB的hugepage需要映射到1GB的邊界,因為低位定址的是page裡面的數據,這裡不能加offset。

這意味著大頁面通常在系統啟動時保留,此時物理記憶體還沒有碎片化。大頁面感知的應用程序可以hugetlbfs用來分配它們。

您必須使用核心參數來決定大頁面的大小應該是 2MB 還是 1GB,您不能混合使用這些。正常的 4kB 頁面始終可用。

最常見的案例是虛擬機(qemu/kvm 可以使用大頁面),這允許將 VM 的整個記憶體映射保留在少量 TLB 條目中,因此永遠不會被驅逐,因此 VM 內部的記憶體訪問需要一個頁面僅在來賓上下文中查找表。

一些數據庫系統也支持大頁面,但這通常僅在您使用大型數據集和索引時才有用。

問題:

  1. 有普通(4kB)頁面和巨大(2MB 或 1GB)頁面。查詢頁面大小時,獲取普通頁面的大小,查詢大頁面大小時,獲取大頁面的設置。普通頁面和大頁面都可以並行使用,但不能混合使用不同的大頁面大小。
  2. 你會得到不同的結果,因為這是兩個不同的東西。普通頁面的大小在硬體中是固定的,因此不是設置。
  3. 大頁面需要儘早分配,雖然記憶體在技術上是“空閒的”,但它只能用於大頁面感知應用程序,因此除了這些應用程序之外的所有應用程序都將擁有​​更少的可用記憶體。這通常不是問題,因為您會在專用於記憶體密集型應用程序(如 VM 或數據庫)的機器上使用大頁面。
  4. 透明大頁嘗試將記憶體用作緩衝區和記憶體(與#3相反),並嘗試將大頁提供給映射大記憶體塊的應用程序,因此不知道大頁的應用程序仍然可以從中獲利——基本上是一個應用程序如果可能,請求 2MB/1GB 記憶體塊將獲得一個大頁面。這是否有助於或損害性能取決於您的應用程序。如果您有一個支持大頁面的應用程序並且想要手動分配記憶體,則需要禁用 THP,而具有不理解大頁面的數據庫應用程序的系統可能會受益。

引用自:https://serverfault.com/questions/898746