Verwenden von mmap und madvise für große Seiten

8

Ich möchte Speicher auf den riesigen Seiten reservieren, die von einem Linux-Rechner benutzt werden. Ich sehe, dass es zwei Möglichkeiten gibt, dies zu tun, mit mmap und madvise .

Das heißt, das MAP_HUGETLB Flag mit dem mmap Aufruf verwenden -

%Vor%

Und das MADV_HUGEPAGE Flag mit dem madvise Aufruf -

%Vor%

Könnte jemand den Unterschied zwischen den beiden erklären?

    
subzero 26.05.2015, 23:59
quelle

1 Antwort

9

Beide Funktionen führen verschiedene Operationen aus, die in Ihrem Kontext von Bedeutung sein können oder nicht:

  • madvise setzt eine Markierung für alle Speicherzuordnungen, die der an sie übergebenen Region entsprechen, und teilt dem khugepaged -Kernel-Thread mit, dass er diese Zuordnungen für die Hochstufung auf große Seiten berücksichtigen kann. Das funktioniert nur, wenn die transparente Unterstützung für riesige Seiten aktiviert ist (Der Status der transparenten Unterstützung für riesige Seiten ist unter /sys/kernel/mm/transparent_hugepage/enabled verfügbar), was in den meisten Distributionen der Fall sein wird, aber auf eingebetteten Systemen möglicherweise deaktiviert ist.

  • mmap wird tatsächlich fortfahren und die Seiten vom internen hugetlbfs -Monitor des Kerns reservieren, dessen Status unter /sys/kernel/mm/hugepages zu sehen ist. Die betroffenen Seiten müssen bis zum Aufruf von mmap verfügbar sein (siehe HugePages_Free in /proc/meminfo ), oder mmap wird fehlschlagen.

Die beiden Mechanismen haben ihre eigene doc-Datei in der Kernbaumstruktur: hugetlbpage.txt und transhuge.txt

    
Frederik Deweerdt 27.05.2015, 04:48
quelle