Abrechnung der Linux-Nutzung großer Seiten

Abrechnung der Linux-Nutzung großer Seiten

Ich habe Huge Pages für die Verwendung mit Java konfiguriert und es scheint gut zu funktionieren, obwohl ich eine Frage zur Abrechnung in /proc/meminfo habe. Zur Veranschaulichung

# grep HugePages /proc/meminfo 
AnonHugePages:    274432 kB
HugePages_Total:    1008
HugePages_Free:      596
HugePages_Rsvd:      594
HugePages_Surp:        0

Meine Frage betrifft die Zahlen „Free“ und „Rsvd“ – warum ergeben sie zusammen nicht „Total“ von 1008? Tatsächlich ergeben sie zusammen 1190. Was verstehe ich hier nicht?

Antwort1

Dies liegt daran, dass HugePages_rsvd im Wesentlichen von HugePages_Free gelesen wird. Das bedeutet, dass von den 596 freien Huge Pages 594 bereits von einer Anwendung zur Nutzung reserviert sind. Das heißt, der Kernel hat festgelegt, dass diese 594 Huge Pages für die Anwendung verfügbar sind.

Wenn jetzt eine Anforderung für 3 große Seiten vorliegt, schlägt sie fehl, da nur 2 reserviert werden können. Stellen Sie es sich als einen malloc()-Aufruf vor, wenn Sie virtuelle Speicherseiten reservieren, um die VSZ für den Prozess zu berücksichtigen, aber wenn der Prozess sie tatsächlich verwendet, werden sie zum RSZ (Running Set) des Prozesses.

Da große Seiten immer im Hauptspeicher vorhanden sind, dekrementiert der Kernel sie aus dem freien Pool, wenn eine App sie anfordert, und erhöht den Rsvd-Zähler.

Dies stammt aus der Kernelquelle.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.

verwandte Informationen