Memory
Linux Huge Pages 使用統計
我已經將 Huge Pages 配置為與 Java 一起使用,儘管我對 /proc/meminfo 中的會計有疑問,但它似乎執行良好。為了顯示
# grep HugePages /proc/meminfo AnonHugePages: 274432 kB HugePages_Total: 1008 HugePages_Free: 596 HugePages_Rsvd: 594 HugePages_Surp: 0
我的問題涉及“免費”和“Rsvd”數字 - 為什麼它們加起來不等於 1008 的“總計”?它們實際上加起來是 1190。我在這裡不明白什麼?
這是因為 HugePages_rsvd 本質上是從 HugePages_Free 中讀取的。這意味著,在 596 個免費的大頁面中,有 594 個已被某些應用程序保留以供使用。那就是核心已經承諾這 594 個大頁面可供應用程序使用。
如果現在有 3 個大頁面的請求,那麼它將失敗,因為只有 2 個可以被保留。將其視為 malloc() 呼叫,當您保留記憶體虛擬頁面以說明程序的 VSZ 但當程序實際使用它們時,它成為程序的 RSZ(執行集)。
由於大頁面總是駐留在主記憶體中,當應用程序請求它們時,核心會從空閒池中減少它並增加 Rsvd 計數器。
這是來自核心原始碼。https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt
where: HugePages_Total is the size of the pool of huge pages. HugePages_Free is the number of huge pages in the pool that are not yet allocated. HugePages_Rsvd is short for "reserved," and is the number of huge pages for which a commitment to allocate from the pool has been made, but no allocation has yet been made. Reserved huge pages guarantee that an application will be able to allocate a huge page from the pool of huge pages at fault time. HugePages_Surp is short for "surplus," and is the number of huge pages in the pool above the value in /proc/sys/vm/nr_hugepages. The maximum number of surplus huge pages is controlled by /proc/sys/vm/nr_overcommit_hugepages.