linux上numa架构实例分析

60次阅读
没有评论

共计 3579 个字符,预计需要花费 9 分钟才能阅读完成。

今天丸趣 TV 小编给大家分享一下 linux 上 numa 架构实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

以下案例基于 Ubuntu 16.04,同样适用于其他的 Linux 系统。我使用的案例环境如下所示:

机器配置:32 CPU,64GB 内存

在 NUMA 中储存层次的概念:

1)处理器层: 单个物理核,称为处理器层。

2)本地节点层: 对于某个节点中的所有处理器,此节点称为本地节点。

3)home 节点层: 与本地节点相邻的节点称为 home 节点。

4)远程节点层: 非本地节点或邻居节点的节点,称为远程节点。CPU 访问不同类型节点内存的速度是不相同的,访问本地节点的速度最快,访问远端节点的速度最慢,即访问速度与节点的距离有关,距离越远访问速度越慢,此距离称作 Node Distance。应用程序要尽量的减少不同 CPU 模块之间的交互,如果应用程序能有方法固定在一个 CPU 模块里,那么应用的性能将会有很大的提升。

** 以鲲鹏 920 处理器讲一下 cpu 芯片的的构成:** 鲲鹏 920 处理器片上系统的每个超级内核集群包含 6 个内核集群、2 个 I / O 集群和 4 个 DDR 控制器。每个超级内核集群封装成一个 CPU 晶片。每个晶片上集成了 4 个 72 位(64 位数据加 8 位 ECC)、数据传输率最高为 3200MT/ s 的高速 DDR4 通道,单晶片可支持最多 512GB×4 的 DDR 存储空间。L3 Cache 在物理上被分为两部分:L3 Cache TAG 和 L3 Cache DATA。L3 Cache TAG 集成在每个内核集群中,以降低监听延迟。L3 Cache DATA 则直接连接片上总线。Hydra 根代理(Hydra Home Agent,HHA)是处理多芯片系统 Cache 一致性协议的模块。POE_ICL 是系统配置的硬件加速器,一般可以用作分组顺序整理器、消息队列、消息分发或者实现某个处理器内核的特定任务等。此外,每个超级内核集群在物理上还配置了一个通用中断控制器分发器(GICD)模块,兼容 ARM 的 GICv4 规范。当单芯片或多芯片系统中有多个超级内核集群时,只有一个 GICD 对系统软件可见。

numactl 的使用

Linux 提供了一个一个手工调优的命令 numactl(默认不安装),在 Ubuntu 上的安装命令如下:

sudo apt install numactl -y

首先你可以通过 man numactl 或者 numactl –h 了解参数的作用与输出的内容。查看系统的 numa 状态:

numactl --hardware

运行得到如下的结果:

available: 4 nodes (0-3)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16047 MB
node 0 free: 3937 MB
node 1 cpus: 8 9 10 11 12 13 14 15
node 1 size: 16126 MB
node 1 free: 4554 MB
node 2 cpus: 16 17 18 19 20 21 22 23
node 2 size: 16126 MB
node 2 free: 8403 MB
node 3 cpus: 24 25 26 27 28 29 30 31
node 3 size: 16126 MB
node 3 free: 7774 MB
node distances:
node 0 1 2 3
 0: 10 20 20 20
 1: 20 10 20 20
 2: 20 20 10 20
 3: 20 20 20 10

根据这个图与命令得到的结果,可以看到,此系统共有 4 个 node,各领取 8 个 CPU 和 16G 内存。这里还需要注意的就是 CPU 共享的 L3 cache 也是会自己领取相应的空间。通过 numastat 命令可以查看 numa 状态, 返回值内容:

numa_hit:是打算在该节点上分配内存,最后从这个节点分配的次数;

numa_miss:是打算在该节点分配内存,最后却从其他节点分配的次数;

numa_foreign:是打算在其他节点分配内存,最后却从这个节点分配的次数;

interleave_hit:采用 interleave 策略最后从本节点分配的次数

local_node:该节点上的进程在该节点上分配的次数

other_node:是其他节点进程在该节点上分配的次数

注:如果发现 numa_miss 数值比较高时,说明需要对分配策略进行调整。例如将指定进程关联绑定到指定的 CPU 上,从而提高内存命中率。

root@ubuntu:~# numastat
 node0 node1 node2 node3
numa_hit 19480355292 11164752760 12401311900 12980472384
numa_miss 5122680 122652623 88449951 7058
numa_foreign 122652643 88449935 7055 5122679
interleave_hit 12619 13942 14010 13924
local_node 19480308881 11164721296 12401264089 12980411641
other_node 5169091 122684087 88497762 67801

NUMA 的内存分配策略

–localalloc 或者 -l:规定进程从本地节点上请求分配内存。–membind=nodes 或者 -m nodes:规定进程只能从指定的 nodes 上请求分配内存。–preferred=node:指定一个推荐的 node 来获取内存,如果获取失败,则尝试别的 node。–interleave=nodes 或者 -i nodes:规定进程从指定的 nodes 上,以 round robin 算法交织地请求内存分配。

 numactl --interleave=all mongod -f /etc/mongod.conf

因为 NUMA 默认的内存分配策略是优先在进程所在 CPU 的本地内存中分配,会导致 CPU 节点之间内存分配不均衡,当开启了 swap,某个 CPU 节点的内存不足时,会导致 swap 产生,而不是从远程节点分配内存。这就是所谓的 swap insanity 现象。或导致性能急剧下降。所以在运维层面,我们也需要关注 NUMA 架构下的内存使用情况(多个内存节点使用可能不均衡),并合理配置系统参数(内存回收策略 /Swap 使用倾向),尽量去避免使用到 Swap。

Node- Socket- Core- Processor

随着多核技术的发展,将多个 CPU 封装在一起,这个封装被称为插槽 Socket;Core 是 socket 上独立的硬件单元;通过 intel 的超线程 HT 技术进一步提升 CPU 的处理能力,OS 看到的逻辑上的核 Processor 数量。

Socket = Node

Socket 是物理概念,指的是主板上 CPU 插槽;Node 是逻辑概念,对应于 Socket。

Core = 物理 CPU

Core 是物理概念,一个独立的硬件执行单元,对应于物理 CPU;

Thread = 逻辑 CPU = Processor

Thread 是逻辑 CPU,也就是 Processo

lscpu 的使用

显示格式:

Architecture:架构

CPU(s):逻辑 cpu 颗数

Thread(s) per core:每个核心线程,也就是指超线程

Core(s) per socket:每个 cpu 插槽核数 / 每颗物理 cpu 核数

CPU socket(s):cpu 插槽数

L1d cache:级缓存(google 了下,这具体表示表示 cpu 的 L1 数据缓存)

L1i cache:一级缓存(具体为 L1 指令缓存)

L2 cache:二级缓存

L3 cache:三级缓存

NUMA node0 CPU(s):CPU 上的逻辑核,也就是超线程

执行 lscpu,结果部分如下:

root@ubuntu:~# lscpu
Architecture: x86_64
CPU(s): 32
Thread(s) per core: 1
Core(s) per socket: 8
Socket(s): 4
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 20480K
NUMA node0 CPU(s): 0-7
NUMA node1 CPU(s): 8-15
NUMA node2 CPU(s): 16-23
NUMA node3 CPU(s): 24-31

以上就是“linux 上 numa 架构实例分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,丸趣 TV 小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计3579字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)