Numa 初识
本文分享自天翼云开发者社区《Numa初识》,作者:j****n
Numa 产生
在二十世纪九十年代被开发出来的。
首次商业化实现基于 NUMA 的 Unix 系统的是对称多处理 XPS-100 系列服务器。
由 VAST 公司的 Dan Gielen 为 HISI 设计的。
这个架构的巨大成功使 HISI 成为了欧洲的顶级 Unix 厂商。
Numa 简介
NUMA(Non-Uniform Memory Access):非一致存储访问结构。
基本特征是具有多个 CPU 模块,每个 CPU 模块由多个 CPU( 如 4 个 ) 组成,并且具有独立的本地内存、 I/O 槽口等。由于其节点 node 之间可以通过互联模块 ( 如称为 Crossbar Switch) 进行连接和信息交互,因此每个 CPU 可以访问整个系统的内存 。
访问本地内存的速度将远远高于访问远地内存 ( 系统内其它节点的内存 ) 的速度。
Numa 结构

node 包括一个或者多个 Socket,以及与之相连的 local memory;
socket 就是主板上的 CPU 插槽;
core 就是 socket 里独立的一组程序执行的硬件单元,比如寄存器,计算单元等;
thread:就是超线程 hyperthread 的概念,逻辑的执行单元,独立的执行上下文,但是共享 core 内的寄存器和计算单元
Numa 相关命令
lscpu:查看机器的 NUMA 拓扑结构

上图中机器有 2 个 sockets,每个 sockets 包含 1 个 numa node,每个 numa node 中有 8 个 cores,每个 cores 包含 2 个 thread,所以总的 threads 数量=2(sockets)×1(node)×8(cores)×2(threads)=32.
numastat:查看 numa 状态

numa_hit 是打算在该节点上分配内存,最后从此节点分配的次数;
num_miss 是打算在该节点分配内存,最后从其他节点分配的次数;
num_foregin 是打算在其他节点分配内存,最后从此节点分配的次数;
interleave_hit 是采用 interleave 策略最后从该节点分配的次数;
local_node 该节点上的进程在该节点上分配的次数 other_node 是其他节点进程在该节点上分配的次数
评论