linux memory-management linux-kernel

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 ?