一起聊聊linux上numa架构(图文详解)
发布时间 - 2022-03-03 00:00:00 点击率:次本篇文章给大家带来啦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 12412401311900 12980472384
numa_miss 5122680 122652623 88449951 7058
numa_foreign 122652643 88449935 7055 5122679
interleave_hit 12619 13942 14010 13924
local_node 19480308881 11164721296 12412401264089 12980411641
other_node 5169091 122684087 88497762 67801NUMA的内存分配策略
--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视频教程》
# linux
# 插槽
# 多个
# 超线程
# 多核
# 应用程序
# 后却
# 访问速度
# 应于
# 不均衡
# 会有
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何登录建站主机?访问步骤全解析
浅谈Javascript中的Label语句
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
个人网站制作流程图片大全,个人网站如何注销?
如何在Tomcat中配置并部署网站项目?
如何在阿里云虚拟服务器快速搭建网站?
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
如何为不同团队 ID 动态生成多个非值班状态按钮
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何基于PHP生成高效IDC网络公司建站源码?
Laravel PHP版本要求一览_Laravel各版本环境要求对照
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
iOS验证手机号的正则表达式
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel如何配置任务调度?(Cron Job示例)
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
千库网官网入口推荐 千库网设计创意平台入口
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
java获取注册ip实例
如何在腾讯云服务器快速搭建个人网站?
如何在腾讯云服务器上快速搭建个人网站?
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
如何快速重置建站主机并恢复默认配置?
详解Android图表 MPAndroidChart折线图
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
JavaScript如何实现继承_有哪些常用方法
,在苏州找工作,上哪个网站比较好?
音响网站制作视频教程,隆霸音响官方网站?
如何为不同团队 ID 动态生成多个“认领值班”按钮
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
phpredis提高消息队列的实时性方法(推荐)
,交易猫的商品怎么发布到网站上去?
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何快速搭建FTP站点实现文件共享?
PHP 500报错的快速解决方法
动图在线制作网站有哪些,滑动动图图集怎么做?
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】


l mongod -f /etc/mongod.conf