免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5574 | 回复: 13
打印 上一主题 下一主题

[内存管理] 有什么方法判断一个物理页面是不是page cache类型的内存页? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-17 18:24 |只看该作者 |倒序浏览
给定一个页面的pfn,能够得到这个页面的Page描述结构。但是从对应page 结构来看,包括flags等字段里面没有page cache类型类似的定义,各位有什么好的办法知道这个物理页面是不是page cache类型的页面呢?

谢谢。

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
2 [报告]
发表于 2014-06-17 19:08 |只看该作者
struct page{
...       
/**
         *                 如果mapping字段为空,则该页属于交换高速缓存。
         *                如果mapping字段不为空,且最低位为1,表示该页为匿名页。同时该字段中存放的是指向anon_vma描述符的指针。
         *                如果mapping字段不为空,且最低位为0,表示该页为映射页。同时该字段指向对应文件的address_space对象。
         */
        struct address_space *mapping;
...
}

论坛徽章:
0
3 [报告]
发表于 2014-06-17 19:25 |只看该作者
回复 2# humjb_1983


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

论坛徽章:
0
4 [报告]
发表于 2014-06-17 23:00 |只看该作者
回复 3# kerryxi

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

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
5 [报告]
发表于 2014-06-18 08:30 |只看该作者
kerryxi 发表于 2014-06-17 19:25
回复 2# humjb_1983

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

论坛徽章:
0
6 [报告]
发表于 2014-06-19 15:27 |只看该作者
回复 4# njuzhyf


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

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
7 [报告]
发表于 2014-06-19 15:36 |只看该作者
kerryxi 发表于 2014-06-19 15:27
回复 4# njuzhyf

mapping字段不行么?

论坛徽章:
0
8 [报告]
发表于 2014-06-19 16:39 |只看该作者
回复 6# kerryxi


PG_swapbacked标志。

看函数page_is_file_cache和它的注释   

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2014-06-19 17:07 |只看该作者
回复 3# kerryxi


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

论坛徽章:
0
10 [报告]
发表于 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

这差距是从哪来的呢?即使系统什么时候,多么闲的时候,也都会有差距。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP