免费注册 查看新帖 |

Chinaunix

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

[内存管理] 准备释放的page,会被标记上swapcache? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-05 20:11 |只看该作者 |倒序浏览
下面的回收页面的函数,开始的代码会判断是不是标记了swapcache。
我的理解是,加入到swap cache里面page,是不会在任何lru list里面的,不知道理解对不对?

static unsigned long shrink_page_list(struct list_head *page_list,
                                      struct mem_cgroup_zone *mz,
                                      struct scan_control *sc,
                                      int priority,
                                      unsigned long *ret_nr_dirty,
                                      unsigned long *ret_nr_writeback)
{
        LIST_HEAD(ret_pages);
        LIST_HEAD(free_pages);
        int pgactivate = 0;
        unsigned long nr_dirty = 0;
        unsigned long nr_congested = 0;
        unsigned long nr_reclaimed = 0;
        unsigned long nr_writeback = 0;

        cond_resched();

        while (!list_empty(page_list)) {
                enum page_references references;
                struct address_space *mapping;
                struct page *page;
                int may_enter_fs;

                cond_resched();

                page = lru_to_page(page_list);
                list_del(&page->lru);

                if (!trylock_page(page))
                        goto keep;

                VM_BUG_ON(PageActive(page));
                VM_BUG_ON(page_zone(page) != mz->zone);

                sc->nr_scanned++;

                if (unlikely(!page_evictable(page, NULL)))
                        goto cull_mlocked;

                if (!sc->may_unmap && page_mapped(page))
                        goto keep_locked;

                /* Double the slab pressure for mapped and swapcache pages */
                if (page_mapped(page) || PageSwapCache(page))
                        sc->nr_scanned++;

论坛徽章:
0
2 [报告]
发表于 2013-09-06 17:33 |只看该作者
shrink里面有的页是直接释放,有的页确实要被交换到交换分区的,被换出。

论坛徽章:
0
3 [报告]
发表于 2013-09-07 10:33 |只看该作者
看了一下,是有这种可能的。
2个进程A,B使用的一个anon page被swap out了,然后A进程swap in了这个page,那么这个page就会被加入到anon list,同时这个page也存在于
swap cache中(因为还有个进程B,没有swap in这个page)。
而这个时候PFRA是可能从anon list里面尝试释放这个page的,这时就会出现在shrink_page_list()里面尝试释放的page,同时也在swapcache里面的情况了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP