Am Donnerstag, 19. Juni 2003 21:38 schrieb Thomas Hertweck:
Thomas Hofer schrieb:
[...] Wenn ich rechne: 393128 "used" minus 39124 "buffers" minus 213168 "cached", dann komme ich auf 130836k durch Programme belegten Speicher. Wenn ich aber die Prozessgrößen (Spalte VIRT in top) aufaddiere, komme ich auf einen wesentlich kleineren Wert:
top -bn1|sed '1,7d'|awk '{s+=$7}END{print s}'
66923
Dabei ist noch nicht einmal der Speicher abgezogen, den sich verwandte Prozesse teilen (SHR). Diese Diskrepanz wird übrigens auch größer, wenn ich in Runlevel 5 gehe und dann wieder zu Runlevel 3 zurückkehre.
Mal davon abgesehen, dass wie Christian schon schrieb auch bei mir VIRT in Spalte 5 sitzt: es ist auch moeglich, dass dort Einheiten benutzt werden. Normalerweise ist die Ausgabe in Kilobytes, aber es kann auch 18m da stehen, das steht dann fuer 18 Megabytes. Das scheinst Du bei Deiner Addition nicht zu beruecksichtigen.
Die Einheit wird erst bei Prozessgrößen >=100MB ausgegeben, und solche Prozesse gab es bei mir nicht.
Ferner bin ich mir nicht sicher, ob Du wirklich VIRT aufaddieren willst. VIRT ist ja RES + SWAP.
Stimmt auch, aber da ich keinen Swap belegt hatte, ist RES==VIRT.
Ich bin mir nicht sicher, ob das alles so einfach geht, wie Du es Dir hier vorstellst. Du findest z.B. eine Zeile wie
12267 root 15 0 278m 22m 4584 S 0.3 4.4 0:52.38 X
beim Aufruf von "top", da waere VIRT 278 Megabytes. Das kann aber nicht sein, denn bei mir ist momentan
Mem: 514824k total, 494876k used, 19948k free, 46508k buffers Swap: 1004020k total, 8k used, 1004012k free, 292624k cached
d.h. used - cached - buffers = 155744 Kilobytes. Laut Deiner Rechnung waere also bei mir nun schon durch VIRT von X (278 MB) alleine mehr Speicher belegt, als durch Programme (ca. 155 MB) ganz allgemein. Irgendwie haut bei Deiner Rechnung etwas nicht hin. Ich glaube nicht, dass VIRT der wirklich belegte RAM + SWAP Speicherplatz ist...
Hmm, falls Du genaueres ueber die Ausgabe bzw. das Problem findest, ich waere auch interessiert.
Ich hab eine Idee: wenn ich ein mmap auf eine Datei mache und tatsächlich darauf zugreife, dann ist dieser Speicher sowohl in "cached" als auch in VIRT drinnen. Anders gesagt: Teile vom Cache können zum virtuellen Speicher von Prozessen gehören. Weiters können Cache-Pages gleichzeitig in mehreren Prozessen gemappt sein. Theorie eines Ahnungslosen: Ich könnte mir vorstellen, daß X ein Device-File in seinen virtuellen Speicher mmap-t, hinter dem kein Hauptspeicher steht, sondern vielleicht der Speicher der Graphikkarte. Grüße, Thomas.