2016-05-16 5 views
0

Ich reserviere Speicher mit "riesigen Seiten (1MB Größe)" und mit mmap. Nach dem Zuordnen von 4 GB Speicher schlägt mmap fehl.Gibt es eine Begrenzung des Speichers, der mit großen Seiten belegt wird?

mmap(NULL, memsize, PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_ANONYMOUS |MAP_POPULATE | MAP_HUGETLB, -1, 0); 

hier memsize = 1 GB

ich in einer Schleife obige Aussage nenne. Bis zu 4 Iterationen ist es in Ordnung. In der 5. Iteration ist die mmap fehlgeschlagen.

Die obige Anweisung (ohne hugepages) funktioniert perfekt für eine beliebige Anzahl von Iterationen. Fehle ich irgendwelche Informationen in Bezug auf riesige Seiten? Ich versuchte "MAP_NORESERVE" Flagge auch wie in mmap fail after 4GB erwähnt.

Jede Art von Informationen wird sehr geschätzt. Vielen Dank.

+0

'mmap kehrt scheitern' - das ist nicht sinnvoll – KevinDTimm

+0

Wie viel ist auf Ihrem System verfügbar? Sie können es mit 'cat/proc/meminfo | auflisten grep HugePages'. Zusätzliche Lektüre: https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt –

+0

@KevinDTimm: Ich überprüft Rückgabewert (MAP_FAILED) dann nur ich abgeschlossen mmap fehlgeschlagen. – ANTHONY

Antwort

1

Ändern der zugeteilten „Anzahl von großen Seiten“ in der Datei

/proc/sys/vm/nr_hugepages 

nach der Größe des Speichers Sie zuordnen wollen. Früher sagt:

>cat /proc/meminfo | grep HugePages 
HugePages_Total = 2500 

4GB => es hat 2048 * 2 MB = 4Gb

2048 riesige Seiten bereits verbraucht.

ein weiteres GB Speicher benötigen (1GB/2MB = 512) 512 größere Seiten. Aber 2500 - 2048 = 452 nur übrig. Aber Sie brauchen 512. Das ist das Problem, warum mmap fehlgeschlagen ist. Wenn Sie den Inhalt der oben genannten Datei (/ proc/sys/vm/nr_hugepages) auf 2560 bearbeiten, sind 5 GB möglich. Ändern Sie es entsprechend der Menge an Speicher, die Sie benötigen. Danke @ Klas Lindbäck. Ich habe zurück verwiesen the link, kleine Forschung ausgesetzt die Arbeit