免费注册 查看新帖 |

Chinaunix

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

[内存管理] cat /proc/pagetypeinfo 不理解的地方,请帮忙看看 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-30 15:44 |只看该作者 |倒序浏览
最近在学习Linux的内存管理 为了减少内存碎片而使用的反碎片技术

在自己虚拟机 suse11 上面 看了下 但是感觉对应不起来。

我的理解是 1个Page block 包含 512个page


linux-l4ql:~ # cat /proc/pagetypeinfo
Page block order: 9
Pages per block:  512

Free pages count per migrate type at order       0      1      2      3      4      5      6      7      8      9     10 //伙伴系统的阶数
Node    0, zone      DMA, type    Unmovable      2      2      1      0      1      1      1      1      1      0      0 //这里的Unmovable 和下面的Unmovable 还能勉强对应起来
Node    0, zone      DMA, type  Reclaimable      0      0      0      0      0      0      0      0      0      0      0 //下面的为0 感觉也能对应起来
Node    0, zone      DMA, type      Movable      0      1      1      1      1      1      1      1      0      1      0 //但是下面的为6个block 感觉就对应不起来了,不知道是不是自己理解错了 请大神分析下
Node    0, zone      DMA, type      Reserve      0      1      0      1      2      1      1      0      1      0      0
Node    0, zone      DMA, type      Isolate      0      0      0      0      0      0      0      0      0      0      0
Node    0, zone   Normal, type    Unmovable      0      1      8      2      3      0      1      1      2      4      4
Node    0, zone   Normal, type  Reclaimable      1      1      1      0      1      1      1      0      1      1      0
Node    0, zone   Normal, type      Movable      0      1      3     52     26     18      6      3      1      1      0 //334个block感觉也差的很远
Node    0, zone   Normal, type      Reserve      0      0      0      0      0      0      0      0      0      0      1
Node    0, zone   Normal, type      Isolate      0      0      0      0      0      0      0      0      0      0      0

Number of blocks type     Unmovable  Reclaimable      Movable      Reserve      Isolate
Node 0, zone      DMA            1            0            6            1            0 //感觉这里统计的block和上面的统计的没啥对应关系,感觉对应不起来
Node 0, zone   Normal           26           14          334            2            0

论坛徽章:
0
2 [报告]
发表于 2014-06-30 16:01 |只看该作者
回复 1# qqianqq


你说什么对应啊?你要怎么对应?上面的是free pages。。。   

论坛徽章:
0
3 [报告]
发表于 2014-06-30 16:02 |只看该作者
回复 2# njuzhyf
我的理解是 下面计算的是block 上面的是page  1个block = 512个page


   

论坛徽章:
0
4 [报告]
发表于 2014-06-30 16:08 |只看该作者
回复 3# qqianqq

对的。但是我都回你了,上面的是free pages啊,你怎么对应?还是你觉得block这个概念跟空闲页有什么对应?既然看到了反碎片,你知道block是用来干嘛的吗?
   

论坛徽章:
0
5 [报告]
发表于 2014-06-30 16:08 |只看该作者
回复 2# njuzhyf
Number of blocks type     Unmovable  Reclaimable      Movable      Reserve      Isolate
Node 0, zone      DMA            1            0            6            1            0
Node 0, zone   Normal           26           14          334            2            0  //这里的334个block 我理解为还有 334* 2^9(512) 个空闲的PAGE 。应该和
这一行统计的free page应该是一致的
Node    0, zone   Normal, type      Movable      0      1      3     52     26     18      6      3      1      1      0


   

论坛徽章:
0
6 [报告]
发表于 2014-06-30 16:16 |只看该作者
回复 5# qqianqq


你也算过了吧?肯定不等哦。或者从另外一个方面说,block order是9,那么伙伴的那个最大的分配阶10呢?(虽然你这里正好是0)。
或者你理解block这个概念对反碎片有什么好处吗?   

论坛徽章:
0
7 [报告]
发表于 2014-06-30 16:24 |只看该作者
回复 6# njuzhyf

目前对这些东西理解的都比较浅显,block的作用对反碎片 不了解,还请明示,或者有好的文章或者链接 可以推荐下?

   

论坛徽章:
0
8 [报告]
发表于 2014-06-30 16:28 |只看该作者
回复 7# qqianqq


最近在学习Linux的内存管理 为了减少内存碎片而使用的反碎片技术


。。。我是看了你说的这句话,以为你知道的。。。

资料不是很多。

红的那本内核书,德国人写的,叫深入理解Linux内核架构?上面讲了一下反碎片跟伙伴系统。你可以去看看。

其他,你可以看代码,伙伴系统各个阶的链表又被分成了不同的类型,那个就是跟反碎片有关系。还有block的定义什么的。

论坛徽章:
0
9 [报告]
发表于 2014-06-30 16:32 |只看该作者
回复 8# njuzhyf

惭愧了 就是读那本书 不太懂 才上来问下的


   

论坛徽章:
0
10 [报告]
发表于 2014-07-01 19:43 |只看该作者
回复 8# njuzhyf

//直接上源码  这个是打印的block
static void pagetypeinfo_showblockcount_print(struct seq_file *m,
                                        pg_data_t *pgdat, struct zone *zone)
{
        int mtype;
        unsigned long pfn;
        unsigned long start_pfn = zone->zone_start_pfn;
        unsigned long end_pfn = start_pfn + zone->spanned_pages;
        unsigned long count[MIGRATE_TYPES] = { 0, };

        //每个512个page 计算page的MIGRATE_TYPES 根据当前页的类型计算 ----感觉这样统计比较粗
        for (pfn = start_pfn; pfn < end_pfn; pfn += pageblock_nr_pages) {
                struct page *page;

                if (!pfn_valid(pfn))
                        continue;

                page = pfn_to_page(pfn);

                /* Watch for unexpected holes punched in the memmap */
                if (!memmap_valid_within(pfn, page, zone))
                        continue;

                mtype = get_pageblock_migratetype(page);

                if (mtype < MIGRATE_TYPES)
                        count[mtype]++;
        }

        /* Print counts */
        seq_printf(m, "Node %d, zone %8s ", pgdat->node_id, zone->name);
        for (mtype = 0; mtype < MIGRATE_TYPES; mtype++)
                seq_printf(m, "%12lu ", count[mtype]);
        seq_putc(m, '\n');

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP