Linux

如何確定 HugePages 計數?

  • May 8, 2020

我有許多伺服器用作 KVM 管理程序節點。我們希望啟用大頁面並利用此功能解決與性能相關的問題。

我在網上查看瞭如何啟用大頁面,這非常清楚和簡單,但我找不到的是如何確定應該使用的大頁面計數值。

為了給您一些觀點,這是我們擁有的系統(在整個集群中相同):

$ free -g
             total        used        free      shared  buff/cache   available
Mem:            503           5         497           0           1         495
Swap:             0           0           0

我們希望啟用大小為 1GB 的巨頁,但巨頁數是我們不知道如何定義的。這個數字是如何確定的,是否基於記憶體,任何輸入都將不勝感激。

有問題的配置:

GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX hugepagesz=1G hugepages=<what goes here> transparent_hugepage=never"

為了進行測試,請在小頁面上完全載入具有典型工作負載的這些虛擬機管理程序主機之一。所以,不要設置hugepages開始。

擷取一些/proc/meminfo. 觀察如果PageTables:記憶體佔用太大,系統 CPU 很重,那就是成本。成本可能不會讓人無法忍受,但 500 GB 已經很多了,大頁面應該會帶來好處。

DirectMap1G:是核心使用 1GB 映射跟踪的內容,以 kB 為單位。不一定是顯式的大頁面,只是核心能夠找到的連續的。將實驗值除以 1048576 以獲得巨大頁面的起始值。

也記錄DirectMap2M:一下,這些是 2MB 的地圖,以防大頁面效果更好。

巨大的頁面分配不能是主機記憶體的 100%,只有 4k 使用,VM 主機不應過度使用客戶記憶體。大約,至少百分之幾用於核心、記憶體、管理程序,還有一點免費。其餘的大部分可以用於大頁面。

RHEL 文件建議使用早期啟動腳本來戳/sys/devices/system/node/node*/hugepages/hugepages-1048576kB/nr_hugepages 的頁數。請注意,如果您有多個 NUMA 節點,您可能需要調整腳本以在每個節點中插入一個值。

hugepages在核心命令行上仍然是一個選項,但是您必須使用引導載入程序配置維護特定於主機記憶體大小的數字。

說到引導載入程序配置,我同意transparent_hugepage=never. THP 會產生大量成本碎片整理頁面並將它們打亂。在具有已知工作負載的大型記憶體盒上不受歡迎。

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