3 存储节点Node
为了支持NUMA
模型,Linux系统把物理内存划分为多个Node
,内核中通过pg_data_t
来描述一个Node
,每个Node
关联到一个处理器,
对于PC、手机这种采用UMA
模型的机器来说,系统只有一个全局的Node
:contig_page_data。
在分配一个页面时,Linux采用节点局部分配的策略,从最靠近运行中的CPU的节点分配内存,
由于进程往往是在同一个CUP上运行,因此从当前节点得到的内存最可能被用到(
it is likely the memory from the current node will be used)。
3.1 pglist_data(pg_data_t)数据结构
[include/linux/mmzone.h]
node的数据结构为pglist_data, 每一个node对应一个struct pglist_data.;
每个节点都由pg_data_t描述,而pg_data_t 由struct pglist_data 定义而来。
pg_data_t的数据结构:参看相关章节
在linux环境中我们可以使用numactl命令查看Node中的cpu和内存,以及各个node之间的distance
numactl --hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
node 0 size: 131037 MB
node 0 free: 3019 MB
node 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
node 1 size: 131071 MB
node