[Linux] / proc / pid / smaps에서 pss의 의미는 무엇입니까?


Answers

lwn.net 에서 인용

프로세스의 "비례 세트 크기"(PSS)는 메모리에있는 페이지 수이며 각 페이지는 프로세스를 공유하는 프로세스 수로 나뉩니다. 따라서 프로세스에 1000 페이지가 모두 있고 다른 프로세스와 1000 페이지가 공유되는 경우 PSS는 1500

Linux Kernel Documentation에서 ,

/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 / maps 의 매핑과 동일한 정보를 표시 합니다 . 나머지 줄은 매핑 크기 ( 크기 ), RAM ( RSS )에 현재 상주하는 매핑 양,이 매핑의 프로세스 비례 점유율 ( PSS ), 맵핑. MAP_SHARED 매핑의 일부이지만 매핑 된 단일 페이지 만있는 페이지, 즉 현재 하나의 프로세스에서만 사용중인 페이지조차도 비공개로 간주되고 공유로 간주되지 않습니다. " Referenced "는 현재 참조 또는 액세스 된 것으로 표시된 메모리의 양을 나타냅니다. " 익명 "은 모든 파일에 속하지 않는 메모리 양을 표시합니다. 파일과 관련된 매핑에도 익명 페이지가 포함될 수 있습니다. MAP_PRIVATE 및 페이지가 수정되면 파일 페이지가 비공개 익명 복사본으로 대체됩니다. " Swap "은 익명의 메모리가 얼마만큼 사용 되었는가를 보여 주지만, 스왑 에서는 사용하지 않습니다.

Unix and Linux Stackexchange에 관한 이 질문 은 거의 주제를 다루고 있습니다. 의심의 여지가없는 매트의 훌륭한 대답을보십시오.

Question

나는 / proc / pid / smaps의 pss 컬럼에 대해 혼란 스러웠다. 그래서 그것을 테스트 할 프로그램을 작성했다.

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

여기에서 Private_Dirty와 동일한 pss가 발견되었지만 그 이유는 궁금합니다.

BTW : smaps 대한 상세한 문서가 smaps ?