有什么方法判断一个物理页面是不是page cache类型的内存页?
给定一个页面的pfn,能够得到这个页面的Page描述结构。但是从对应page 结构来看,包括flags等字段里面没有page cache类型类似的定义,各位有什么好的办法知道这个物理页面是不是page cache类型的页面呢?谢谢。 struct page{
...
/**
* 如果mapping字段为空,则该页属于交换高速缓存。
* 如果mapping字段不为空,且最低位为1,表示该页为匿名页。同时该字段中存放的是指向anon_vma描述符的指针。
* 如果mapping字段不为空,且最低位为0,表示该页为映射页。同时该字段指向对应文件的address_space对象。
*/
struct address_space *mapping;
...
} 回复 2# humjb_1983
“ 如果mapping字段不为空,且最低位为0,表示该页为映射页。同时该字段指向对应文件的address_space对象。” 这只能说明这是FILE_MAPPING页,而不一定是page cache时的页面。虽然绝大部分file mapping page和cache相同,但应该不完全是,/proc/meminfo里面的数值就不完全相同。 回复 3# kerryxi
你应该是想说广义上的页缓存吧。。。包括file pagecache,inode cache,dentry cache等等。。。。除了file pagecache,后面的都是基于slab的。。。
kerryxi 发表于 2014-06-17 19:25 static/image/common/back.gif
回复 2# humjb_1983
当然page cache中并不完全是file map的页面,还有其它用途,比如共享内存也是用的page cache。 回复 4# njuzhyf
我是想要知道一个物理page是不是在某个inode的page cache中。这个我好像找不到明确的线索,除非反过来遍历整个sb的page cache,才能精确判断这个page是不是在page cache上,但是效率太低了。slab有明确flag来说明的,问题不大。 kerryxi 发表于 2014-06-19 15:27 static/image/common/back.gif
回复 4# njuzhyf
mapping字段不行么? 回复 6# kerryxi
PG_swapbacked标志。
看函数page_is_file_cache和它的注释 回复 3# kerryxi
>FILE_MAPPING页,而不一定是page cache时的页面
为啥啊? 回复 8# njuzhyf
以前还没注意这个flag,多谢。再看了一下代码,程序上是清楚的,但是实际数据还对应不上。我linux pc的meminfo数据
MemTotal: 3757408 kB
MemFree: 1475832 kB
Buffers: 122596 kB
Cached: 1630248 kB //file chach: 1752844
SwapCached: 0 kB
Active: 487428 kB
Inactive: 1569088 kB
Active(anon): 304468 kB
Inactive(anon): 796 kB
Active(file): 182960 kB
Inactive(file):1568292 kB //file total=1751252
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 1999868 kB
SwapFree: 1999868 kB
Dirty: 40 kB
Writeback: 0 kB
AnonPages: 303696 kB
Mapped: 91004 kB
Shmem: 1600 kB
buffer+cache=1752844 kb
Inactive file+active file=1751252kb
两者的统计差距delta=1752844 - 1751252 = 1592 kb
这差距是从哪来的呢?即使系统什么时候,多么闲的时候,也都会有差距。
页:
[1]
2