2009-08-06 10 views
1

Wir wollten wissen, ob es eine Beziehung gibt zwischen der maximalen Speichermenge, die verwendet werden kann, um eine Datei über mmap() abzubilden und der Größe des RAM in einer Linux-Box . Ich habe versucht, einige Dateien im Speicher abzulegen, und habe festgestellt, dass ich keine weiteren Dateien zuordnen kann, wenn die Verwendung von "Mapped" dem "MemTotal" nahe kommt (angezeigt über cat/proc/meminfo).Speicherverbrauch beim Laden von Dateien via mmap()

Von/proc/meminfo auf der 64-Bit-Linux-Box:

MemTotal: 32909628 kB

MemFree: 221.744 kB

Puffer: 1800 kB

Mapped: 31642928 kB

CommitLimit: 38012616 kB

Committed_AS: 42641120 kB

VmallocTotal: 536870911 kB

VmallocUsed: 299.920 kB

VmallocChunk: So 536.568.999 kB

, bin ich recht in der Annahme, dass die "Mapped" usage würde niemals das "MemTotal" überschreiten. Die Verwirrung, die ich habe, war ich der Meinung, dass die Erinnerung immer virtuell ist, wenn wir eine Datei mappen.

Danke!

Antwort

1

Nein, es sei denn, Sie haben memlock() ed in den Speicher geschrieben, Sie treffen höchstwahrscheinlich auf einen OS-Adressraum. Die Tatsache, dass es genau wie Ihr Arbeitsspeicher auf 32 GB kommt, ist wahrscheinlich ein Zufall.

bearbeiten: Eigentlich, wenn Sie MAP_PRIVATE verwenden sind, dann können Sie in der Tat Speichergrenzen schlagen sein (MAP_PRIVATE wird als private Zuteilung entfielen, und so muss es physikalischen RAM oder Swap sein, es sei denn, aggressiver overcommit abzudecken aktiviert). Versuchen Sie es mit MAP_SHARED, wenn Sie es nicht bereits sind.

+0

Weitere Informationen in meiner Frage hinzugefügt. Unter MAC-Adressraumlimit versteht man das Limit des virtuellen Speichers. Aber ich habe zu dieser Zeit eine Menge virtuellen Speicher. – sim

+0

Ich meine die Grenze, wie viel Adressraum ein einzelner Prozess gleichzeitig kartieren kann. – bdonlan

+0

Ich würde denken, das wäre eine Menge in einer 64-Bit-Linux-Box. Mein Programm lädt nur eine 1,5-GB-Datei in den Speicher. – sim

0

Sie können größere Dateien in Blöcken abbilden, die in den Speicher passen (siehe len und off Parameter von mmap).