Chinaunix

标题: 关于page cache mapcount的问题? [打印本页]

作者: xbs665    时间: 2015-08-07 16:06
标题: 关于page cache mapcount的问题?
最近对page cache 比较疑惑
通过mmap可以映射file,在需要的时候page fault 分配page,有多个进程mmap的话就会增加page的mapcount并会修改page table,这个page被多个进程share,在算PSS的时候就可以page size/mapcount。

问题: 在多个进程通过read write访问文件时,会不会增加mapcount的值?此时还会修改page table吗?

作者: 夕阳下的孤影    时间: 2015-08-12 23:09
我的理解是,只在第一次发生缺页异常建立页表的时候,会修改mapcount的值,后续的read/write操作不会再修改。
因为mapcount表示的是被进程映射的次数-1
作者: xbs665    时间: 2015-08-13 11:11
你的意思是在非映射文件读写的情况下,也会发生page fault?我再ULK上没看到这方面的内容,上面说就调用do_generic_file_read拷贝到缓冲区。do_generic_file_read也会去page cache里找,也会分配page 加到页缓存
。此时page 的map count变化吗(多进程读写)

映射情况很好理解在read write 情况下pte 为none 产生page fault 然后去page cache里找,找到就将page结构的mapcount+1,没找到就分配页。
作者: 镇水铁牛    时间: 2015-08-13 21:07
你的意思是在非映射文件读写的情况下,也会发生page fault?
是的,page fault会有多种场景去fix,如anony page。
作者: 夕阳下的孤影    时间: 2015-08-16 18:19
回复 3# xbs665

mapcount表示的是被多少个进程的页表映射了,而page cache是内核态的概念,不属于任何进程,所以不会修改mapcount的值。
至少目前我没有看到,在产生预读的时候需要修改mapcount。
如果你还有什么发现,欢迎交流
   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2