Chinaunix
标题:
cat /proc/pagetypeinfo 不理解的地方,请帮忙看看
[打印本页]
作者:
qqianqq
时间:
2014-06-30 15:44
标题:
cat /proc/pagetypeinfo 不理解的地方,请帮忙看看
最近在学习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
作者:
njuzhyf
时间:
2014-06-30 16:01
回复
1#
qqianqq
你说什么对应啊?你要怎么对应?上面的是free pages。。。
作者:
qqianqq
时间:
2014-06-30 16:02
回复
2#
njuzhyf
我的理解是 下面计算的是block 上面的是page 1个block = 512个page
作者:
njuzhyf
时间:
2014-06-30 16:08
回复
3#
qqianqq
对的。但是我都回你了,上面的是free pages啊,你怎么对应?还是你觉得block这个概念跟空闲页有什么对应?既然看到了反碎片,你知道block是用来干嘛的吗?
作者:
qqianqq
时间:
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
作者:
njuzhyf
时间:
2014-06-30 16:16
回复
5#
qqianqq
你也算过了吧?肯定不等哦。或者从另外一个方面说,block order是9,那么伙伴的那个最大的分配阶10呢?(虽然你这里正好是0)。
或者你理解block这个概念对反碎片有什么好处吗?
作者:
qqianqq
时间:
2014-06-30 16:24
回复
6#
njuzhyf
目前对这些东西理解的都比较浅显,block的作用对反碎片 不了解,还请明示,或者有好的文章或者链接 可以推荐下?
作者:
njuzhyf
时间:
2014-06-30 16:28
回复
7#
qqianqq
最近在学习Linux的内存管理 为了减少内存碎片而使用的反碎片技术
。。。我是看了你说的这句话,以为你知道的。。。
资料不是很多。
红的那本内核书,德国人写的,叫深入理解Linux内核架构?上面讲了一下反碎片跟伙伴系统。你可以去看看。
其他,你可以看代码,伙伴系统各个阶的链表又被分成了不同的类型,那个就是跟反碎片有关系。还有block的定义什么的。
作者:
qqianqq
时间:
2014-06-30 16:32
回复
8#
njuzhyf
惭愧了 就是读那本书 不太懂 才上来问下的
作者:
qqianqq
时间:
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');
作者:
qqianqq
时间:
2014-07-01 19:44
回复
8#
njuzhyf
这个是实实仔仔的统计的free page的个数,感觉这个比较准确
static void pagetypeinfo_showfree_print(struct seq_file *m,
pg_data_t *pgdat, struct zone *zone)
{
int order, mtype;
for (mtype = 0; mtype < MIGRATE_TYPES; mtype++) {
seq_printf(m, "Node %4d, zone %8s, type %12s ",
pgdat->node_id,
zone->name,
migratetype_names[mtype]);
for (order = 0; order < MAX_ORDER; ++order) {
unsigned long freecount = 0;
struct free_area *area;
struct list_head *curr;
area = &(zone->free_area[order]);
list_for_each(curr, &area->free_list[mtype])
freecount++;
seq_printf(m, "%6lu ", freecount);
}
seq_putc(m, '\n');
}
作者:
chishanmingshen
时间:
2014-07-03 20:04
什么原理?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2