Am Samstag, 21. Juni 2003 15:09 schrieb Kristian Koehntopp:
On Sat, Jun 21, 2003 at 10:50:52AM +0200, Thomas Hertweck wrote:
Wenn Du nun noch kurz erlaeutern koenntest, wie das nun mit den Ausgaben von "top" und dort insbesondere den Spalten VIRT, RES, und SHR in Einklang zu bekommen ist, dann waere ich gluecklich.
Du meinst wie nachstehend? Oder was willst Du genau vorgerechnet haben?
Die Erklärung der memory-map war sehr informativ, danke. Nur hast du nichts über die Ausgaben von top erzählt, die uns in erster Linie interessieren. "ps axuwww" liefert nämlich nicht das selbe wie "top -bn1" kris@valiant:~> ps axuwww| grep X root 1800 0.2 2.6 86432 6848 ? SL Jun19 5:18 /usr/X11R6/bin/X vt7 -auth /var/lib/xdm/authdir/authfiles/A:0-bH6HYe Die 86432KB sind der Wert VSZ (=VmSize, die Summe aller memory-mappings). Wir dagegen sind von der Spalte VIRT in top ausgegangen, die einen kleineren Wert hat als VmSize. Meine Interpretation von VIRT, die ich im nächsten Absatz widerlegen werde, ist diese: VIRT ist der Anteil vom virtuellen Speicher, der sich tatsächlich im realen Speicher (RAM plus Swap) befindet. RES ist der Anteil im RAM und VIRT-RES==Swap. SHR ist der Anteil, der potentiell mit anderen Prozessen geteilt werden kann (z.b. eine shared Library). Dies kann ich aber nicht mit folgendem in Einklag bringen: Wie ich gerade probiert habe, kann ich Prozesse erzeugen, deren VIRT größer ist als der gesamte Hauptspeicher+Swap, indem ich ein mmap auf /dev/mem mache und dann auf den Speicher lesend zugreife. Konkret: 512MB RAM, 1GB mmap auf /dev/mem und auf die ersten 500MB lesend zugreifen; das ergibt ein VIRT von über 950MB, ohne daß Swap verwendet wird. Vorsicht: Nachdem ich solche Sachen ein paarmal probiert habe, hat der Kernel (2.4.21) angefangen, zu crashen (Bugs im Memorymanagement-Code). Wahrscheinlich lag es daran, daß ich bei einigen Testläufen auf Speicherbereiche >512MB zugegriffen habe, wodurch der Prozess zu loopen begann. Meine Interpretation scheint für das mmap-en von normalen Files zu stimmen, nicht aber für komische character-devices wie /dev/mem. Jedenfalls kann die Aussage "VIRT = SWAP + RES", wie sie in der top-manpage zu finden ist, nicht stimmen. Grüße, Thomas.