免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: embeddedlwp

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

论坛徽章:
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
发表于 2012-05-29 14:23 |显示全部楼层
回复 37# firkraag


swap in的情况,percent < 50%的时候swap area压力不大,就让它占着呗,它还可能在不久的将来被换出,这不就省得再到swap area中去分配slot了吗。swap out的时候,它都已经被完全换出了,我们在那时不就是要回收那一页吗?那还让它继续待在swap cache里干什么呢?

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

1.percent < 50%是针对 swap cache的,与 swap area的压力有什么关系?
2.既然swap in的时候可以保存在swap cache中的slot的以便swap out的时候用
   那么为什么swap out的时候不可以也保存在swap cache中的slot以便swap in的时候用呢?
   还有上边红色的部分,在swap cache里占slot与在swap area中占slot应该没有关系吧?




   

论坛徽章:
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
发表于 2012-05-29 14:24 |显示全部楼层
回复 39# firkraag

为什么在__do_fault中判断是不是anon的,do_linear_fault这条path应该就是为filemap准备的啊,anon page有自己的处理函数do_anonymous_page啊!


   

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
发表于 2012-05-29 14:32 |显示全部楼层
本帖最后由 firkraag 于 2012-05-29 14:33 编辑

回复 42# embeddedlwp
这大概就是先前有人和你讨论过的file mapping是private类型的那种情况,因为是private mapping,此时就要为它就变成的anonymous的了。

   

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
发表于 2012-05-29 14:46 |显示全部楼层
回复 41# embeddedlwp

书里写的:
         The nr_swap_pages variable contains the number of available (free and nondefective) page slots in all active swap areas, while the total_swap_pages variable contains the total number of nondefective page slots.
这个压力不就是使用了多少交换区中的空间了吗。

swap cache不就是将page用以address的一个field组织起来的树吗。不存在什么slot这类概念吧。加入swap cache就是加入这棵树,删除就是移出这棵树。slot是交换区的概念。

论坛徽章:
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
发表于 2012-05-29 14:52 |显示全部楼层
本帖最后由 embeddedlwp 于 2012-05-29 14:52 编辑

回复 44# firkraag

fffv.png

从ULK3上这个图来看:

struct radix_tree_node {
        unsigned int        height;                /* Height from the bottom */
        unsigned int        count;
        struct rcu_head        rcu_head;
        void                *slots[RADIX_TREE_MAP_SIZE];
        unsigned long        tags[RADIX_TREE_MAX_TAGS][RADIX_TREE_TAG_LONGS];
};

radix tree里这个也叫slot


论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
发表于 2012-05-29 14:59 |显示全部楼层
回复 45# embeddedlwp
噢,原来不叫node叫slot,那两个slot没关系。

论坛徽章:
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
发表于 2012-05-29 15:05 |显示全部楼层
回复 46# firkraag

准确说是each node has 2^RADIX_TREE_MAP_SHIFT entries

#define RADIX_TREE_MAP_SHIFT (CONFIG_BASE_SMALL ? 4 : 6)

   

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
发表于 2012-05-29 15:11 |显示全部楼层
回复 40# embeddedlwp
就是将交换区中编号最大的entry转换成pte,再转换回来,再取它的编号减1,这个就是交换区中最大的页数。这样就可以解决注释里说的那两种情况了。

   

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
发表于 2012-05-29 15:17 |显示全部楼层
用茅坑打比方确实不雅,不过很通俗
结果却把lz绕晕了,这让我想起了一个说“程序员是混乱和错误产生的根源”的笑话。

论坛徽章:
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
发表于 2012-05-29 16:23 |显示全部楼层
回复 49# firkraag

mm.png

ULK3在分析try_to_unmap_one函数的时候说“对于匿名页,vma->vm_pgoff字段是0或者vm_start/PAGE_SIZE”

如图,这个vma->pgoff应该就是图中文件上的那个off值,这张图是对filemap来说的
但对于匿名页,vma->pgoff为0可以理解,什么时候有可能为vm_start/PAGE_SIZE
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP