Что означает pss в / proc / pid / smaps - PullRequest
17 голосов
/ 29 марта 2012

Я был озадачен столбцом pss в / proc / pid / smaps, поэтому я написал программу для его проверки:

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

Здесь я нашел pss равным Private_Dirty, но мне интересно, почему.

Кстати: есть ли подробная документация для smaps?

1 Ответ

31 голосов
/ 29 марта 2012

Цитирование из lwn.net

"Размер пропорционального набора" (PSS) процесса - это количество страниц в памяти, где каждая страница разделенапо количеству процессов, разделяющих его.Таким образом, если у процесса есть 1000 страниц, и 1000 страниц совместно используются другим процессом, его PSS будет 1500

С Документация ядра Linux ,

/proc/PID/smaps - это расширение, основанное на картах, показывающее потребление памяти для каждого из отображений процесса.Для каждого из сопоставлений существует ряд строк, таких как:

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

Первая из этих строк отображает ту же информацию, что и для сопоставления в / proc / PID/ карты .Оставшиеся строки показывают размер отображения ( размер ), объем отображения, который в настоящее время находится в ОЗУ ( RSS ), пропорциональную долю процесса в этом отображении ( PSS ), количество чистых и грязных личных страниц в отображении.Обратите внимание, что даже страница, которая является частью сопоставления MAP_SHARED , но имеет только одно сопоставленное pte, то есть в настоящее время используется только одним процессом, считается конфиденциальной, а не общей.« Referenced » указывает объем памяти, в данный момент помеченный как ссылочный или доступный.« Anonymous » показывает объем памяти, который не принадлежит ни одному файлу.Даже сопоставление, связанное с файлом, может содержать анонимные страницы: когда MAP_PRIVATE и страница изменена, страница файла заменяется личной анонимной копией.« Swap » показывает, сколько потенциальной анонимной памяти также используется, но при обмене.

Этот вопрос на Unix and Linux Обложка Stackexchangeпочти тема.Посмотрите превосходный ответ Мэта, который наверняка очистит все ваши сомнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...