linux numa内存初始化,内存管理之NUMA与CPU

NUMA与CPU之间的关系,如系统中有2个CPU(可以超过2个CPU)时, NUMA内存访问模型

2a4f15ca889b5421592cb6454ebcb349.png平台:arm64

kernel:linux4.4

NUMA(Non Uniform Memory Access)

NUMA和SMP是两种CPU相关的硬件架构。在SMP架构里面,所有的CPU争用一个总线来访问所有内存,优点是资源共享,而缺点是总线争用激烈。随着PC服务器上的CPU数量变多(不仅仅是CPU核数),总线争用的弊端慢慢越来越明显,于是Intel在Nehalem CPU上推出了NUMA架构,而AMD也推出了基于相同架构的Opteron CPU。

NUMA最大的特点是引入了node和distance的概念。对于CPU和内存这两种最宝贵的硬件资源,NUMA用近乎严格的方式划分了所属的资源组(node),而每个资源组内的CPU和内存是几乎相等。资源组的数量取决于物理CPU的个数(现有的PC server大多数有两个物理CPU,每个CPU有4个核);distance这个概念是用来定义各个node之间调用资源的开销,为资源调度优化算法提供数据支持。

a831b321814a2ca3458368ee53c3d5f5.png查看NUMA相关情况1#numactl --show

ARM64内存在管理相当于单个node

08060b69a5d29d0197144cea3cfd2e2b.png1

2

3

4

5On node 0 totalpages: 524288

DMA zone: 8192 pages used for memmap

DMA zone: 0 pages reserved

DMA zone: 524288 pages, LIFO batch:31

...内核启动部分打印

node的初始化

在内核启动时进行初始化:1

2

3

4

5

6

7

8

9

10

11

12

13start_kernel

\->setup_arch //不同的CPU对node的使用不同

\->paging_init

\->bootmem_init

\->zone_sizes_init(arch/arm64/mm/minit.c)

\->free_area_init_node(nid=0, ...)

{

pg_data_t *pgdat = NODE_DATA(nid);

calculate_node_totalpages(pgdat, start_pfn, end_pfn,

zones_size, zholes_size);

alloc_node_mem_map(pgdat);

}

物理内存与node之间的关系

参考

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值