2015-05-26 13 views
8

Ich möchte Speicher auf den riesigen Seiten reservieren, die von einem Linux-Rechner verwendet werden. Ich sehe, dass es zwei Möglichkeiten gibt, dies zu tun, mit mmap und .Verwenden von mmap und madvise für große Seiten

Das heißt, mit der MAP_HUGETLB Flagge mit dem mmap Anruf -

base_ptr_ = mmap(NULL, memory_size_, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0); 

Und die MADV_HUGEPAGE Flagge mit dem madvise Anruf -

madvise(base_ptr_, memory_size_, MADV_HUGEPAGE); 

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

Antwort

9

Beide Funktionen führen verschiedene Operationen, die nicht im Zusammenhang Rolle kann oder auch:

  • madvise legt an sie übergeben, wird ein Flag für alle Speicherzuordnungen an die Region entsprechend sagt die khugepaged kernel Thread, Es kann diese Zuordnungen für die Werbung auf großen Seiten berücksichtigen. Dies funktioniert nur, wenn die transparente Unterstützung von rianglepage aktiviert ist (Der Status der transparenten rugpage-Unterstützung ist unter /sys/kernel/mm/transparent_hugepage/enabled verfügbar), was in den meisten Distributionen der Fall ist, aber auf eingebetteten Systemen möglicherweise deaktiviert ist.

  • mmap tatsächlich gehen Sie vor und behalten Sie die Seiten aus dem internen Kernel hugetlbfs Halterung, deren Status unter /sys/kernel/mm/hugepages zu sehen ist. Die betreffenden Seiten müssen zu dem Zeitpunkt verfügbar sein, an dem mmap aufgerufen wird (siehe HugePages_Free in /proc/meminfo) oder mmap schlägt fehl.

Die beiden Mechanismen haben ihre eigene doc-Datei im Kernel-Baum: hugetlbpage.txt und transhuge.txt

+0

So gegeben, es gibt genug Seiten verfügbar ... 'mmap' ist die zuverlässigere Option? Ist das korrekt? – subzero

+3

Es hängt davon ab, ob Sie alles, was sich auf der Maschine befindet, kontrollieren und genau wissen, wie sich Ihr Programm verhalten wird. Mit "mmap" können Sie genau festlegen, wie sich das Programm verhalten soll. Wenn Sie nicht sicher sind, wie der Speicher verwendet wird (wird er fragmentiert? Gibt es andere große Seitenbenutzer im System), dann wird Ihnen die transparente rigipage das bestmögliche Ergebnis geben. –