千家信息网

linux上numa架构实例分析

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,今天小编给大家分享一下linux上numa架构实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一
千家信息网最后更新 2025年12月01日linux上numa架构实例分析

今天小编给大家分享一下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 7node 0 size: 16047 MBnode 0 free: 3937 MBnode 1 cpus: 8 9 10 11 12 13 14 15node 1 size: 16126 MBnode 1 free: 4554 MBnode 2 cpus: 16 17 18 19 20 21 22 23node 2 size: 16126 MBnode 2 free: 8403 MBnode 3 cpus: 24 25 26 27 28 29 30 31node 3 size: 16126 MBnode 3 free: 7774 MBnode 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           node3numa_hit             19480355292     11164752760     12401311900     12980472384numa_miss                5122680       122652623        88449951            7058numa_foreign           122652643        88449935            7055         5122679interleave_hit             12619           13942           14010           13924local_node           19480308881     11164721296     12401264089     12980411641other_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:~# lscpuArchitecture:          x86_64CPU(s):                32Thread(s) per core:    1Core(s) per socket:    8Socket(s):             4L1d cache:             32KL1i cache:             32KL2 cache:              256KL3 cache:              20480KNUMA node0 CPU(s):     0-7NUMA node1 CPU(s):     8-15NUMA node2 CPU(s):     16-23NUMA node3 CPU(s):     24-31

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

节点 内存 分配 系统 物理 处理 内核 进程 逻辑 集群 处理器 次数 缓存 策略 架构 内容 命令 概念 模块 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 常州app软件开发中心 心易服务器 爆破活动 数据库 数据库十进制转换标准时间 学生网络安全研究创新设想 学习数据库重要吗 小米运动经常丢失数据库 数据库应用技术形考任务 服务器端口改了怎么远程连接 区人大网络安全工作责任制 广电网络技术专业就业前景 富士停车场与数据库怎么连接 长沙网络安全儿童画 电脑为什么老显示无法连接服务器 现在网络安全事件 数据库插入一条日期字段 互联网是科技的未来 宿州出入库软件开发平台 闽南语翻译软件开发 下列数据库中可进行药学 界首市华庭网络技术有限公司 万方数据资源专利数据库 明日之后解说第三季选什么服务器 安庆门店管理软件开发 学校院系安全网络安全总结 铜仁网络安全系统怎么做 双阳区智能化网络技术质量保障 Linux服务器书 实用网络技术期末复习资料 重庆一站式网络技术包括什么
0