请问如何查看NUMA节点中内存域的起止地址
我现在有一台已经装好了的linux机器,NUMA节点及内存域的划分如下:Node 0, zone DMA
Node 0, zone DMA32
Node 0, zone Normal
Node 1, zone Normal
我现在要画一个内存分布图,请问我怎么才能查看到每个内存域的起止物理地址?谢谢!! 我先写一个测试代码,测试通过了就给您 多谢!!回复 2# Buddy_Zhang1
本帖最后由 Buddy_Zhang1 于 2016-03-16 20:59 编辑
void TestCase_PHYS_NUM(void)
{
#define NUM_NUMA 2
struct pglist_data *pgdat;
struct zonelist *zonelist;
struct zoneref *zrf;
struct zone *zone;
struct page *page;
int i;
int high_idx = { 2,0 };
for(i = 0 ; i < NUM_NUMA ; i++) {
pgdat = NODE_DATA(i);
zonelist = pgdat->node_zonelists;
for_each_zone_zonelist(zone,zrf,zonelist,high_idx)
printk("Zone %s start_pfn %p start_phys %pend_pfn %p end_phys %p\n",
zone->name,zone->zone_start_pfn,
pfn_to_phys(zone->zone_start_pfn),
zone->zone_start_pfn + zone->spanned_pages,
pfn_to_phys(zone->zone_start_pfn + zone->spanned_pages));
}
#undef NUM_NUMA
}原理就是内核启动过程中,会初始化每个 zone ,将该区域的起始的页帧号写到 zone->zone_start_pfn,
还会把这个区域的页帧数都写到 zone->spanned_pages 里面,我只要遍历所有节点的所有 zone 就可以获得这些信息。 没有现成的proc或者sys接口么?
页:
[1]