oxygen wrote:sogo wrote:
Nein, das hat mit swap nichts zu tun. RSS/VSS ist - als Daumenregel - der Unterschied von angeforderten Speicher und benutzten Speicher.
-- sogos
Meine Aussage stimmt. Kannst gerne nachlesen. Einen unterschied zwischen angefordertem Speicher und benutztem Speicher gibt es nicht. Soviel wie Prozess fodert bekommt er auch (oder stürzt mit einem malloc ab).
Doch, nennt sich memory over commitment. Beispiel:
Code: Select all
> cat allyoucaneat.c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
#define MEGAB 1024*1024
int i;
int *ret;
do
{
ret=malloc(10*MEGAB);
printf("allocated %d MBn",10*MEGAB/1024/1024);
usleep(200);
} while (ret);
printf("ate enough...n");
sleep(1000);
return(0);
}
Code: Select all
[... viele]
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
allocated 10 MB
ate enough...
Code: Select all
ps auxxww | grep allyou
xxxx 11325 0.0 0.0 3116804 1600 pts/3 S+ 16:28 0:00 ./allyoucaneat
Das sind stolze 3.1GB (auf x86,deswegen Ende hier...) aber nur 1600
non-swappable Speicher belegt.
Code: Select all
>free
total used free shared buffers cached
Mem: 2073240 1933892 139348 0 33600 359628
-/+ buffers/cache: 1540664 532576
Swap: 2031608 571180 1460428
Aber nur 500MB swapped (war schon vorher).
Schauen wir uns mal den Speicher an:
Code: Select all
> cat /proc/11325/maps
00110000-00111000 r-xp 00110000 00:00 0 [vdso]
00922000-0093d000 r-xp 00000000 fd:00 13205515 /lib/ld-2.7.so
0093d000-0093e000 r-xp 0001a000 fd:00 13205515 /lib/ld-2.7.so
0093e000-0093f000 rwxp 0001b000 fd:00 13205515 /lib/ld-2.7.so
00945000-00a98000 r-xp 00000000 fd:00 13205517 /lib/libc-2.7.so
00a98000-00a9a000 r-xp 00153000 fd:00 13205517 /lib/libc-2.7.so
00a9a000-00a9b000 rwxp 00155000 fd:00 13205517 /lib/libc-2.7.so
00a9b000-00a9e000 rwxp 00a9b000 00:00 0
0123d000-08048000 rwxp 0123d000 00:00 0
08048000-08049000 r-xp 00000000 fd:00 8824045 /home/xxxxxx/allyoucaneat
08049000-0804a000 rw-p 00000000 fd:00 8824045 /home/xxxxxx/allyoucaneat
08300000-08321000 rw-p 08300000 00:00 0
08321000-08400000 ---p 08321000 00:00 0
08489000-b7fa3000 rw-p 08489000 00:00 0
b7fc4000-bf7d2000 rw-p b7fc4000 00:00 0
bf866000-bf87b000 rw-p bffea000 00:00 0 [stack]
Das Data Segment an 08489000-b7fa3000 sind unsere ca. 3GB. was noch interessant ist, dass fast alle Segemente swapbar sind.
Nicht swapbar ist (natuerlich) der vdso (obwohl zaehlt nicht mit), sowie die executable, der Rest kann ohne Probleme auf die Platte ausgelagert werden.
Interessant waere, wenn ich ein mlock() auf den malloc-ed Speicher machen wuerde...
oxygen wrote:
man ps wrote:rss, the non-swapped physical memory that a
task has used (in kiloBytes). (alias rssize, rsz).
vsz, the amount of (virtual) memory that the process is using in KiB
(1024-byte units). (alias vsize).
-> RSZ - VSZ = Swap.
Nein, nein und nein.
VSZ (oder VSS) ist die Groesse *innerhalb* der VM. RSZ(RSS) ist die Groesse, die im RAM bleiben muss. Beide Groesse
haben nichts zu tun mit der Menge an Speicher die der Prozess einnimmt. Eine solche Groesse gibt es nicht. Ich koennte das Beispiel nach belieben veraendern (was passiert, wenn ich eine 3 GB grosse Datei mmap-e ? ;-) und was passiert, wenn die Maschine under mem-pressure dann geraet..) und wir wuerden immer etwas anderes sehen. Die ganze Region als shared-mem deklariert und es wuerde garnicht in ps auftauchen.
Merke: Speicher ist relativ, der Kernel ist sehr intelligent Speicher effizient zu verwalten.
Die Angaben in ps sind *niemals* genaue Angaben, da in dem Moment, wo sie ausgegeben werden schon geaendert sein koennen.
Zurueck zu dem og. Beispiel: eventuell sind einige Seiten auf dem Swap ausgelagert worden. Wenn Du genau wissen willst, welche Seiten das sind, kannst Du oprofile oder systemtap nehmen, allerdings muss Du schon wissen wonach Du suchst.
http://www.informit.com/content/images/ ... n_book.pdf ist ein guter Einstieg dies anhand von Linux zu verstehen.
-- sogos