2012-03-29 18 views
15

我混淆了有關在PSS列的/ proc/PID/smaps,所以我寫了一個程序來測試它:什麼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的詳細資料?

回答

27

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 /進程/地圖顯示 該映射的相同的信息。其餘行示出的映射的大小 (大小),即目前 駐留在RAM的映射的量(RSS),則處理這個映射 (PSS)的比例的份額,所述映射中乾淨和骯髒的私人頁面的數量。 請注意,即使是作爲映射的一部分的頁面,但是具有 的只有單個映射的pte,即當前僅由一個進程 使用的頁面被認爲是私有的而不是共享的。 「引用」表示當前標記爲引用或訪問的內存量爲 。 「Anonymous」顯示不屬於任何 文件的內存量。即使與文件關聯的映射也可能包含匿名 頁面:當MAP_PRIVATE頁面被修改時,文件頁面被 替換爲私有匿名副本。 「Swap」顯示將使用多少個 匿名存儲器,但使用swap。

This Question關於Unix and Linux Stackexchange涵蓋了幾乎所有的主題。看到馬特的優秀答案,肯定會清除你所有的疑惑。

+0

爲什麼我會在我的二進制文件上運行smaps時看到很多PSS。這是一個二進制鎖定的輸出:0 kB 77afd000-77afe000 r - p 00007000 00:0e 20581089 /lib/ld-uClibc-0.9.33.2.so。我是否需要添加所有PSS來實際計算二進制文件佔用的大小?這個大小是否等於RAM中佔用的大小? 大小:4 kB Rss:4 kB Pss:4 kB Private_Dirty:4 kB引用:4 kB 匿名:4 kB AnonHugePages:0 kB 77ab2000-77ad6000 r-xp 00000000 00:0e 20711467/usr/lib/libdbus- glib-1.so.2.0.0 大小:144 kB Rss:112 kB Pss:12 kB – 2013-11-14 12:11:42