kerryxi 发表于 2014-06-17 18:24

有什么方法判断一个物理页面是不是page cache类型的内存页?

给定一个页面的pfn,能够得到这个页面的Page描述结构。但是从对应page 结构来看,包括flags等字段里面没有page cache类型类似的定义,各位有什么好的办法知道这个物理页面是不是page cache类型的页面呢?

谢谢。

humjb_1983 发表于 2014-06-17 19:08

struct page{
...       
/**
       *                 如果mapping字段为空,则该页属于交换高速缓存。
       *                如果mapping字段不为空,且最低位为1,表示该页为匿名页。同时该字段中存放的是指向anon_vma描述符的指针。
       *                如果mapping字段不为空,且最低位为0,表示该页为映射页。同时该字段指向对应文件的address_space对象。
       */
        struct address_space *mapping;
...
}

kerryxi 发表于 2014-06-17 19:25

回复 2# humjb_1983


“ 如果mapping字段不为空,且最低位为0,表示该页为映射页。同时该字段指向对应文件的address_space对象。” 这只能说明这是FILE_MAPPING页,而不一定是page cache时的页面。虽然绝大部分file mapping page和cache相同,但应该不完全是,/proc/meminfo里面的数值就不完全相同。

njuzhyf 发表于 2014-06-17 23:00

回复 3# kerryxi

你应该是想说广义上的页缓存吧。。。包括file pagecache,inode cache,dentry cache等等。。。。除了file pagecache,后面的都是基于slab的。。。
   

humjb_1983 发表于 2014-06-18 08:30

kerryxi 发表于 2014-06-17 19:25 static/image/common/back.gif
回复 2# humjb_1983



当然page cache中并不完全是file map的页面,还有其它用途,比如共享内存也是用的page cache。

kerryxi 发表于 2014-06-19 15:27

回复 4# njuzhyf


    我是想要知道一个物理page是不是在某个inode的page cache中。这个我好像找不到明确的线索,除非反过来遍历整个sb的page cache,才能精确判断这个page是不是在page cache上,但是效率太低了。slab有明确flag来说明的,问题不大。

humjb_1983 发表于 2014-06-19 15:36

kerryxi 发表于 2014-06-19 15:27 static/image/common/back.gif
回复 4# njuzhyf



mapping字段不行么?

njuzhyf 发表于 2014-06-19 16:39

回复 6# kerryxi


PG_swapbacked标志。

看函数page_is_file_cache和它的注释   

chishanmingshen 发表于 2014-06-19 17:07

回复 3# kerryxi


    >FILE_MAPPING页,而不一定是page cache时的页面
为啥啊?

kerryxi 发表于 2014-06-20 13:37

回复 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
查看完整版本: 有什么方法判断一个物理页面是不是page cache类型的内存页?