linux - qué significa pss en/proc/pid/smaps
memory-management linux-kernel (1)
Citando de lwn.net
El "tamaño de conjunto proporcional" (PSS) de un proceso es el recuento de páginas que tiene en la memoria, donde cada página se divide por la cantidad de procesos que la comparten. Entonces, si un proceso tiene 1000 páginas para sí mismo y 1000 compartidas con otro proceso, su PSS será 1500
De la documentación del kernel de Linux ,
La /proc/PID/smaps
es una extensión basada en mapas, que muestra el consumo de memoria para cada una de las asignaciones del proceso. Para cada una de las asignaciones, hay una serie de líneas, como la siguiente:
08048000-080bc000 r-xp 00000000 03:02 13130 /bin/bash
Size: 1084 kB
Rss: 892 kB
Pss: 374 kB
Shared_Clean: 892 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 892 kB
Anonymous: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 374 kB
La primera de estas líneas muestra la misma información que se muestra para la asignación en / proc / PID / maps . Las líneas restantes muestran el tamaño de la asignación ( tamaño ), la cantidad de la asignación que reside actualmente en la RAM ( RSS ), la porción proporcional de este mapeo ( PSS ) del proceso, el número de páginas privadas limpias y sucias en el cartografía. Tenga en cuenta que incluso una página que es parte de un mapeo MAP_SHARED , pero tiene un solo pte mapeado, es decir, actualmente es utilizada por un solo proceso, se considera como privada y no como compartida. " Referenciado " indica la cantidad de memoria actualmente marcada como referencia o acceso. " Anónimo " muestra la cantidad de memoria que no pertenece a ningún archivo. Incluso una asignación asociada con un archivo puede contener páginas anónimas: cuando MAP_PRIVATE y una página se modifican, la página del archivo se reemplaza por una copia privada anónima. " Swap " muestra la cantidad de memoria anónima que también se usa, pero fuera de swap.
Esta pregunta sobre Unix and Linux
Stackexchange cubre casi el tema. Vea la excelente respuesta de Mat que seguramente aclarará todas sus dudas.
Confundía sobre la columna pss en / proc / pid / smaps, así que escribí un programa para probarlo:
void sa();
int main(int argc,char *argv[])
{
int fd;
sa();
sleep(1000);
}
void sa()
{
char *pi=new char[1024*1024*10];
for(int i=0;i<4;++i) {
for(int j=0;j<1024*1024;++j){
*pi=''o'';
pi++;
}
}
int cnt;
for(int i=0;i<6;++i) {
for(int j=0;j<1024*1024;++j){
cnt+=*pi;
pi++;
}
}
printf("%d",cnt);
}
$cat /proc/`pidof testprogram`/smaps
08838000-0885b000 rw-p 00000000 00:00 0 [heap]
Size: 140 kB
Rss: 12 kB
Pss: 12 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 12 kB
Referenced: 12 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b6dcd000-b77d0000 rw-p 00000000 00:00 0
Size: 10252 kB
Rss: 10252 kB
Pss: 4108 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4108 kB
Referenced: 4108 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Aquí encontré pss igual a Private_ Dirty, pero me pregunto por qué.
Por cierto: ¿hay alguna documentación detallada para smaps
?