2016-02-14 23 views
0

我想了解一個進程的smaps文件中「引用」的含義。 根據內核文檔:「引用」在過程smaps中的含義

「引用」指的記憶當前標記爲引用或 訪問量「

我理解的意思是‘訪問’,但到底是什麼意思。 ?「引用」 如果它是所有訪問內存的話,我希望它是「RSS」 +「交換」,但在下面的例子中,它是不是這樣的

例:

7f13e7577000-7f13e75c1000 rw-p 00000000 00:00 0       [heap] 
Size:    296 kB 
Rss:     156 kB 
Pss:     156 kB 
Shared_Clean:   0 kB 
Shared_Dirty:   0 kB 
Private_Clean:   4 kB 
Private_Dirty:  152 kB 
Referenced:   128 kB 
Anonymous:   156 kB 
AnonHugePages:   0 kB 
Swap:     56 kB 
KernelPageSize:  4 kB 
MMUPageSize:   4 kB 
Locked:    0 kB 

回答

1

從定義爲內存的頁面referenced標誌位的Linux kernel source code

PG_referencedPG_reclaim用於回收匿名,文件支持的頁緩存的頁面。

referenced標誌位在page_check_references()其中還記錄爲使用,

/* 
* All mapped pages start out with page table 
* references from the instantiating fault, so we need 
* to look twice if a mapped file page is used more 
* than once. 
* 
* Mark it and spare it for another trip around the 
* inactive list. Another page table reference will 
* lead to its activation. 
* 
* Note: the mark is set for activated pages as well 
* so that recently deactivated but used pages are 
* quickly recovered. 
*/ 

而且mark_page_accessed()是在Linux內核中的各個地方調用的函數記錄了更新的referenced標誌位通過其生命週期的初始部分的頁面:
(即從新分配頁面開始)

* Mark a page as having seen activity. 
* 
* inactive,unreferenced -> inactive,referenced 
* inactive,referenced -> active,unreferenced 
* active,unreferenced -> active,referenced 
* 
* When a newly allocated page is not yet visible, so safe for non-atomic ops, 
* __SetPageReferenced(page) may be substituted for mark_page_accessed(page). 
*/ 

referenced =不會很快被回收的活動頁面緩存。