免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: embeddedlwp
打印 上一主题 下一主题

[内存管理] page cache问题 [复制链接]

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
101 [报告]
发表于 2012-05-31 10:38 |只看该作者
回复 99# embeddedlwp
就是页还未被任何人访问过的时候。pte_none为true时。

   

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
102 [报告]
发表于 2012-05-31 10:42 |只看该作者
回复 98# embeddedlwp
ulk3中16.2.6 Non-Linear Memory Mappings小节。remap_file_pages。


   

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
103 [报告]
发表于 2012-05-31 11:19 |只看该作者
回复 101# firkraag


比如加载一个新程序运行的时候,会调用mmap(参数MAP_ANONYMOUS),分配一个匿名线性区
也就是因为映射的是堆栈,所以加载的时候应该并没有数据把,所以只分配了一段线性区,
然后比如要定义 int a = 5,这样就访问了栈,此时页不存在,do_anonymous_page会分配页,然后设置页表,
以上分析对吧?

那么是谁在什么时候把a = 5放到栈所在的这个page呢?


   

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
104 [报告]
发表于 2012-05-31 11:25 |只看该作者
回复 103# embeddedlwp

“a=5”这句在页错误返回后还会再次运行的,此时page已存在了。
我前面有个贴子就是说这个的:
http://bbs.chinaunix.net/forum.p ... ;page=1#pid22043690
   

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
105 [报告]
发表于 2012-05-31 11:38 |只看该作者
本帖最后由 firkraag 于 2012-05-31 14:37 编辑

回复 95# embeddedlwp
你看会不会是这种情况:
      有两个进程都private map了同一个页,其中一个就是我们的当前进程,它俩都没有对该页进行写操作而且该页刚被完全换入(该得先前我们所说的占坑的情况吗)。此时该页的page_mapcount是2,而且它还在swap cache中。然后另外一个进程死了{:3_191:} ,此时page_mapcount变为1, page_swapcount返回的也是0,我们的进程在此时对该页进程写操作,诱发wp fault,但此时只有我们这个进程对这个页有引用了,干脆一不做二不休就把它给霸占了。

   

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
106 [报告]
发表于 2012-05-31 11:54 |只看该作者
回复 100# embeddedlwp
我google了一下,好像这是为了tracing向shared writable pages写用的。所以if中用了unlikely。它不经常发生。

   

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
107 [报告]
发表于 2012-05-31 16:09 |只看该作者
回复 106# firkraag

我google了一下,好像这是为了tracing向shared writable pages写用的。所以if中用了unlikely。它不经常发生。

==================================

貌似代码中也是这个意思,但是我仍然想不明白,这种情况怎么会产生呢?

shared writable pages产生page fault?


   

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
108 [报告]
发表于 2012-05-31 16:41 |只看该作者
本帖最后由 firkraag 于 2012-05-31 16:42 编辑

回复 107# embeddedlwp
我想就是有人想要在有人往shared writeable pages里写的时候得到通知,这时就将pte里的w/r位清零。这样往里写就会发生page fault。

   

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
109 [报告]
发表于 2012-05-31 16:46 |只看该作者
回复 108# firkraag


我想就是有人想要在有人往shared writeable pages里写的时候得到通知,这时就将pte里的w/r位清零。这样往里写就会发生page fault。

=========================================================

这个也能截获?


   

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
110 [报告]
发表于 2012-05-31 17:18 |只看该作者
回复 105# firkraag

你看会不会是这种情况:
      有两个进程都private map了同一个页,其中一个就是我们的当前进程,它俩都没有对该页进行写操作而且该页刚被完全换入(该得先前我们所说的占坑的情况吗)。此时该页的page_mapcount是2,而且它还在swap cache中。然后另外一个进程死了 ,此时page_mapcount变为1, page_swapcount返回的也是0,我们的进程在此时对该页进程写操作,诱发wp fault,但此时只有我们这个进程对这个页有引用了,干脆一不做二不休就把它给霸占了。

============================================================

你的例子中为什么要举两个进程,还有自己会对自己的private map导致wp fault?

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP