mmap
-
Ich habe hier Laufzeitmessungen, bei denen
M_MMAP_MAX = 0
als Umgebungsvariable gesetzt wurde.
Die Erklärung die ich dazu gefunden habe:
The maximum number of chunks to allocate with mmap. Setting this to zero disables all use of mmap.Also wird mmap nicht verwendet. ZU mmap gibt es sogar einen Wikipedia-EIntrag.
Leider verstehe ich nicht ganz, was dort steht. Anscheinend wird eine Art Memory-mapping verwendet und wenn ich nachlese, was das ist (auch wieder Wiki) hört sich das ganz gut an.Interessanterweise haben die Messungen, bei dem mmap nicht deaktiviert wurde, längere Laufzeiten und mehr Cachemisses.
Kann mir jmd (laientauglich) erklären, welche Wirkung die obige Umgebungsvariable hat und wie man damit niedrigere Laufzeiten/Cachemisses erklären kann?
-
Da sich sonst nichts meldet,...
MMap steht für memory map. also kann man, wenn es "disabled" ist, nichts mehr auf dem heap alloziieren. (malloc() sollte fehl schlagen..?)
Sicher bin ich mir auch nicht.
-
lk schrieb:
Da sich sonst nichts meldet,...
MMap steht für memory map. also kann man, wenn es "disabled" ist, nichts mehr auf dem heap alloziieren. (malloc() sollte fehl schlagen..?)
Sicher bin ich mir auch nicht.
sbrk
-
http://www.gnu.org/s/hello/manual/libc/Efficiency-and-Malloc.html#Efficiency-and-Malloc
Very large blocks (much larger than a page) are allocated with mmap (anonymous or via /dev/zero) by this implementation. This has the great advantage that these chunks are returned to the system immediately when they are freed. Therefore, it cannot happen that a large chunk becomes “locked” in between smaller ones and even after calling free wastes memory. The size threshold for mmap to be used can be adjusted with mallopt. The use of mmap can also be disabled completely.
-
This has the great advantage that these chunks are returned to the system immediately when they are freed.
Das ist es ja was mich stutzig macht. Ich lese überall wo ich was finde, dass mmap klasse ist.
Aber meine Laufzeiten sind kürzer, wenn es deaktiviert ist - das kann ich mir nicht erklären
-
Wenn ich Deine Informationen zur Verfügung hätte, würde ich mir ungefähr sowas zusammenreimen:
Dein Prog ohne mmap nimmt sich Speicher. Und gibt ihn während der gesamten Laufzeit nicht zurück. Kein Bißchen. Das ist schnell. Mit mmap wird öfters mal Speicher zurückgegeben und gleich darauf wieder geholt. Das ist langsamer. Aber mmap kann supi helfen, wenn das Prog zum Beispiel nur kurze Spitenlasten hat. Beim Models-Laden braucht es zwischendurch mal 298M, gibt die aber gleich wieder frei und läuft dann stundenlang mit 17M. Die freigegebenen 281M sind frei und müssen nicht auf die swap-Partition ausgelagert werden bzw können von anderen Programmen genutzt werden und wenn den Speicher gar keiner beaucht, wird er halt zu Plattencache und macht alles ein wenig schneller.
-
Mit mmap wird öfters mal Speicher zurückgegeben und gleich darauf wieder geholt.
Weiß davon nichts...
Quelle?