NUMA的Linux工具:numactl

Linux中的numactl命令使用详解 现代处理器采用*非统一内存访问(NUMA)*的方式进行硬件设计。有时我们想控制线程如何被分配到处理器内核上,以避免使用超线程,而是使用硬件线程,或者确保一个任务不会频繁迁移。NUMA调度策略和NUMA内存放置策略。numactl是一个Linux函数,它以指定的NUMA调度或内存放置策略运行进程。它将进程与Linux NUMA超级计算机上的处理器绑定。使用numactl的目的是将进程限制在一个numa池或CPU节点上,而不是特定的CPU核。通过numactl。 阅读详情
AI摘要

本文介绍Linux下CPU NUMA特性的配置和调优。先阐述NUMA架构,它能提升性能但配置不当有问题;接着说明numactl命令可手工调优,能查看系统numa状态并优化进程内存分配;最后对比了NUMA与SMP两种CPU硬件体系架构。

作者:qccz123456 
来源:优快云 
原文:https://blog.youkuaiyun.com/qccz123456/article/details/81979819

一、NUMA简介

NUMA(Non-Uniform Memory Access)字面直译为“非一致性内存访问”,对于Linux内核来说最早出现在2.6.7版本上。这种特性对于当下大内存+多CPU为潮流的X86平台来说确实会有不少的性能提升,但相反的,如果配置不当的话,也是一个很大的坑。本文就从头开始说说Linux下关于CPU NUMA特性的配置和调优。 

最早Intel在Nehalem架构上实现了NUMA,取代了在此之前一直使用的FSB前端总线的架构,用以对抗AMD的HyperTransport技术。一方面这个架构的特点是内存控制器从传统的北桥中移到了CPU中,排除了商业战略方向的考虑之外,这样做的方法同样是为了实现NUMA。 

在SMP多CPU架构中,传统上多CPU对于内存的访问是总线方式。是总线就会存在资源争用和一致性问题,而且如果不断的增加CPU数量,总线的争用会愈演愈烈,这就体现在4核CPU的跑分性能达不到2核CPU的2倍,甚至1.5倍!理论上来说这种方式实现12core以上的CPU已经没有太大的意义。 

Intel的NUMA解决方案,Litrin始终认为它来自本家的安藤。他的模型有点类似于MapReduce。放弃总线的访问方式,将CPU划分到多个Node中,每个node有自己独立的内存空间。各个node之间通过高速互联通讯,通讯通道被成为QuickPath Interconnect即QPI。 

这个架构带来的问题也很明显,如果一个进程所需的内存超过了node的边界,那就意味着需要通过QPI获取另一node中的资源,尽管QPI的理论带宽远高于传统的FSB,比如当下流行的内存数据库,在这种情况下就很被动了。 

二、numactl

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

sudo apt install numactl

首先你可以通过它查看系统的numa状态:

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 1 free: 9799 MB
node distances:
node 0 1
 0: 10 20
 1: 20 10

可以看到,此系统共有2个node,各领取16个CPU和128G内存。 

这里假设我要执行一个java param命令,此命令需要120G内存,一个python param命令,需要16G内存。最好的优化方案时python在node0中执行,而java在node1中执行,那命令是:

numactl --cpubind=0 --membind=0 python param
numactl --cpubind=1 --membind=1 java param

当然,也可以自找没趣:

numactl --cpubind=0 --membind=0,1 java param

对于一口气吃掉内存大半的MongoDB,我的配置是:

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

即分配所有的node供其使用,这也是官方推荐的用法。 

通过numastat命令可以查看numa状态:

numastat

得到的结果如下所示:

node0 node1
numa_hit 1775216830 6808979012
numa_miss 4091495 494235148
numa_foreign 494235148 4091495
interleave_hit 52909 53004
local_node 1775205816 6808927908
other_node 4102509 494286252

other_node过高意味着需要重新规划numa。

三、NUNA与SMP

NUMA(Non-Uniform Memory Access,非一致性内存访问)和SMP(Symmetric Multi-Processor,对称多处理器系统)是两种不同的CPU硬件体系架构。 

SMP的主要特征是共享,所有的CPU共享使用全部资源,例如内存、总线和I/O,多个CPU对称工作,彼此之间没有主次之分,平等地访问共享的资源,这样势必引入资源的竞争问题,从而导致它的扩展内力非常有限。 

NUMA技术将CPU划分成不同的组(Node),每个Node由多个CPU组成,并且有独立的本地内存、I/O等资源。Node之间通过互联模块连接和沟通,因此除了本地内存外,每个CPU仍可以访问远端Node的内存,只不过效率会比访问本地内存差一些,我们用Node之间的距离(Distance,抽象的概念)来定义各个Node之间互访资源的开销。

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,也就是Processor。

Reference

http://www.litrin.net/2017/10/31/%E6%B7%B1%E6%8C%96numa/ 
http://www.litrin.net/2017/08/03/numa%E5%AF%B9%E6%80%A7%E8%83%BD%E7%9A%84%E5%BD%B1%E5%93%8D/ 
https://blog.youkuaiyun.com/ustc_dylan/article/details/45667227 
http://kodango.com/cpu-topology 
https://blog.youkuaiyun.com/envy13/article/details/80241886
 

Linux numactl命令与多核调优 一、基础概念 SMP(Symmetric Multi-Processor) 所谓对称多处理器结构,是指服务器中多个CPU对称工作,无主次或从属关系。各CPU共享相同的物理内存,每个 CPU访问内存中的任何地址所需时间是相同的,因此SMP也被称为一致存储器访问结构(UMA:Uniform Memory Access)。对SMP服务器进行扩展的方式包括增加内存、使用更快的CPU、增加CPU、扩充I/O(槽口数与总线数)以及添加更多的外部设备(通常是磁盘存储)。 SMP服务器的主要特征是共享,系统中所有资源(C 阅读详情

相关推荐

CPU处理器NUMA架构简介

在实际工作中,经常遇到服务器是否开启NUMA、NUMA绑定几颗Core、跨NUMA节点访问的性能下降等等话题。那么NUMA作为非一致性内存访问的多处理器架构,在架构上有什么特性、与SMP架构有哪些不同,调优策略等,本文将作简要介绍。

牧羊人的方向 9259

NUMA详解

Numa(Non-Uniform Memory Access)是一种计算机架构,它允许多个处理器通过共享内存来访问系统的物理内存,但是不同的内存区域可能由不同的处理器处理,这种内存访问方式被称为“非一致性内存访问”。在这种架构中,每个处理器都有自己的本地内存,但它们可以访问其他处理器的内存。这种架构可以提高多处理器系统的性能,并使系统更具可扩展性。在Numa系统中,每个处理器有一个本地内存子系统,每个本地内存子系统都连接到一个全局内存交换网络。

zyqash的博客 1万+

什么是NUMA,我们为什么要了解NUMA

所以我们在NUMA架构下编写程序,要扬长避短,多核多线程编程中,我们要尽可能的利用CPU Core的亲和性,将线程绑定到对应的CPU上,并且该线程从该CPU对应的本地内存上去申请内存,这样才能最大限度发挥NUMA架构的优势,达到比较好的处理性能。CPU访问不同类型节点内存的速度是不相同的,访问本地节点的速度最快,访问远端节点的速度最慢,即访问速度与节点的距离有关,距离越远访,问速度越慢,所以叫做非一致性内存访问,这个访问内存的距离我们称作Node Distance。我们怎么可以感受到它的存在?

每天分享一个编程小知识 4511

【性能】什么是NUMA(Non-Uniform Memory Access)|什么是SMP

什么是NUMA(Non-Uniform Memory Access) NUMA VS. UMA NUMA(Non-Uniform Memory Access)非均匀内存访问架构是指多处理器系统中,内存的访问时间是依赖于处理器和内存之间的相对位置的。 这种设计里存在和处理器相对近的内存,通常被称作本地内存;还有和处理器相对远的内存, 通常被称为非本地内存。 UMA(Uniform Memory Access)均匀内存访问架构则是与NUMA相反,所以处理器对共享内存的访问距离和时间是相同的。由此可知,不论

我的笔记本 2万+

【微知】Linux如何查看有几个numa节点?(lscpu、numactl --hardware、/sys/devices/system/node/、/proc/cpuinfo)

Linux上 NUMA(Non-Uniform Memory Access)节点的配置和数量以及拓扑会影响到GPU训练的性能。本文记录几个获取numa节点的方法。一般查看物理服务器辅助查看,比如几个cpu socket,但是内存一般看不到。不过按照逻辑来看基本和cpu的socket一致。安装工具:yum install numactl。每个nodeX目录对应一个 NUMA 节点。

技术札记 1246

KITTI数据集下载及解析

KITTI数据集下载及解析 版本 更新时间 更新内容 作者 1 V 1.0 xxx 完成主体内容 W. Xiao 2 文章目录KITTI Dataset1 简介1.1 数据采集平台1.2 坐标系2 数据解析2.1 image文件2.2 velodyne文件2.3 calib文件2.4 label文件3 KITTI可视...

u013086672的博客 5万+

NUMACTL 项目安装与配置指南

NUMACTL 是一个用于 Linux 系统的开源项目,旨在提供对非统一内存访问(NUMA)架构的支持。NUMA 架构允许系统中的不同处理器访问不同内存区域的速度有所不同,NUMACTL 通过提供一组工具和库来帮助用户更好地管理和优化内存访问策略。 该项目主要使用 C 语言编写,同时也包含少量的 Roff、Shell、M4、Makefile 和 Awk 代码。 ## 2. 项目使用的关键技术和...

gitblog_01255的博客 1619

手把手教你用Kokoro-82M-v1.1-zh搭建本地TTS服务(含WebSocket接口)

本文详细介绍了如何使用Kokoro-82M-v1.1-zh模型搭建本地TTS服务,包括环境配置、模型部署、WebSocket接口实现及性能优化。通过实战指南,开发者可以快速掌握本地部署TTS系统的关键技术,提升语音交互应用的开发效率。

weixin_30776273的博客 183

numactl 安装和简介

numactl是一个用于控制策略的 Linux 工具集。它允许你查看系统的 NUMA 拓扑结构,并将进程或共享内存绑定到特定的 CPU 节点和内存节点,从而优化应用程序的性能,尤其是在多路服务器上。

eloudy的专栏 2405

VMware Ubuntu虚拟机突然断网?我用5步彻底解决了(附避坑指南)

Ubuntu虚拟机断网问题通常由网络配置冲突和VMware服务未正确绑定导致。本文提供5步解决方案:1)清理Ubuntu重复有线连接;2)重启Windows主机的VMware服务;3)检查VMware虚拟网络配置;4)重新配置Ubuntu网络参数;5)测试网络连通性。关键避坑点包括:避免多连接共存、修改配置后必重启服务、确保虚拟网卡绑定主机。通过"网卡状态→IP/路由→网关→服务"的排查思路,可快速解决虚拟机网络故障。文末附有详细的故障症状对照表,便于快速定位问题。

m0_58530495的博客 626

雪亮工程视频联网技术详解:视综平台主流接入方式与协议分析

随着雪亮工程建设的深入,视频资源的汇聚与共享成为核心需求。本文简要剖析了雪亮视综平台下的视频联网接入技术,重点讲解了主流接入方式的区别与选型,并深入探讨了平台内部及跨平台的视频资源共享机制(含级联与推送模式),旨在为安防开发人员和系统集成商提供清晰的架构思路与技术参考。

lsz152590的博客 716

编译DPDK 之前一定要安装 numactl,否则会出现找不到numa头文件

yum install numactl yum install numactl-libs yum install numactl-devel

lifuxin73的博客 1万+

Paraview:Python Calculator Filter

python calculator过滤器 from paraview.simple import * connection = servermanager.Connect('localhost',11111) er = servermanager.sources.EnSightreader(CaseFileName='/.../data.case') er.PointArrays = ['x_velocity','1','y_velocity','1','z_velocity','1','cp','1']

haimianjie2012的专栏 3495

【亲测免费】 NUMA控制库与工具:numactl深度剖析

`numactl` 是一个专为Linux系统设计的开源项目,旨在提供简单易用的NUMA(非统一内存访问)策略支持。这个项目由两个主要部分构成:一个命令行工具`numactl`,用于在指定的NUMA策略下运行其他程序;以及一个名为`libnuma`的共享库,允许应用程序内部设置和管理NUMA策略。项目采用C作为主要编程语言,并辅以少量Roff、Shell、M4等脚本语言进行辅助开发和文档生成。 #...

gitblog_01229的博客 644

在windows安装程序时出现 系统无法打开指定的设备或文件的解决方案

本文主要介绍了在windows安装程序时出现 系统无法打开指定的设备或文件的解决方案,希望能对使用windows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

基于AnimeGAN模型生成宫崎骏风格动漫照片

用于动画风格纹理和线条转换的灰度样式丢失;新颖的颜色重建损失,以保留内容图像的颜色;新的灰度对抗损失防止生成的图像从显示为灰度图像;使用深度可分卷积和反向残块的轻量级生成器,以实现更快的传输。实验表明,AnimeGAN可以对真实世界的照片进行变换场景动画风格的图像与高质量的动画视觉效果和显著优于最先进的风格化方法。# 生成宫崎骏风格图片 model = hub . Module('animegan_v1_hayao_60' , use_gpu = True)images:输入的图片数据。

优快云 精品推荐 3629

NUMA是什么? 及工具numactl介绍

作者:qccz123456 来源:优快云 原文:Linux工具之numactl 一、NUMA简介 NUMA(Non-Uniform Memory Access)字面直译为“非一致性内存访问”,对于Linux内核来说最早出现在2.6.7版本上。这种特性对于当下大内存+多CPU为潮流的X86平台来说确实会有不少的性能提升,但相反的,如果配置不当的话,也是一个很大的坑。本文就从头开始说说Lin...

Yannick Jiang 的专栏 9262

基于YOLOv10的机器人抓取引导系统:从物体检测到精准抓取

python# 数据标注工具简化版import os"""启动标注工具""""""标注单张图像"""print(f"标注图像: {os.path.basename(img_path)}")print("请在图像上绘制抓取矩形框...")# 这里应该实现交互式标注界面# 简化版本直接返回示例标注# 示例标注数据"""保存标注结果"""# 保存为YOLO格式# 转换为YOLO格式。

YOLO 377

numactl taskset

taskset numactl

勇往直前! 2034

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Linux的numactl

对于CPU和内存这两种最宝贵的硬件资源,NUMA用近乎严格的方式划分了所属的资源组(node),而每个资源组内的CPU和内存是几乎相等。一般来说,MySQL,特别是InnoDB管理内存缓存,它占用的内存比较多,不经常访问的内存也会不少,这些内存如果被Linux错误的交换出去了,将浪费很多CPU和IO资源。因为NUMA默认的内存分配策略是优先在进程所在CPU的本地内存中分配,会导致CPU节点之间内存分配不均衡,当某个CPU节点的内存不足时,会导致swap产生,而不是从远程节点分配内存。

lingshengxiyou的博客 3244

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

如何用好你的CPU,NUMA小笔记

背景 NUMA 这个词干运维的同学一定不陌生,因为往往会唤起很多惨痛的血泪史,个人认为NUMA作为CPU发展的一个必然趋势,是很值得好好学习(复习)一下的。 CPU 架构的进化 关于什么是NUMA,我们可以拆开我们的笔记本电脑看一下,会发现哪怕有多个CPU的槽位,但依然只有一根线接入到内存条那里,类似下面那个逻辑图: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ex3ObT4u-1603987772920)(DB9E72D35C4A4ABFAAAC503EB1C8098

zyxpaomian的博客 808

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【linux numa】 NUMA 绑核

linux

Dayu_log的博客 9012

NUMA支持工具numactl常见问题解决方案

**numactl** 是一个开源项目,它为Linux系统提供了NUMA(Non-Uniform Memory Access)支持。该项目包括一个名为 `numactl` 的程序,用于以特定的NUMA策略运行其他程序,以及一个名为 `libnuma` 的共享库,供应用程序设置NUMA策略。此外,还有一些测试和实用程序,如 `numastat` 用于显示NUMA分配统计信息和 `memhog` 用于

gitblog_00820的博客 692

linux c绑定cpu_鲲鹏性能优化十板斧 | CPU与内存子系统性能调优

特战队六月底成立,至今百日有余,此系列文章希望能为广大在鲲鹏处理器上开发软件、性能调优的程序员们,提供一点帮助。本篇主要介绍CPU与内存子系统性能调优。1.CPU与内存子系统性能调优简介调优思路性能优化的思路如下:★如果CPU的利用率不高,说明资源没有充分利用,可以通过工具(如strace)查看应用程序阻塞在哪里,一般为磁盘,网络或应用程序的业务处理中存在休眠或信号等待,这些优化措施在后...

weixin_39989668的博客 824

NUMA机制浅析

什么是NUMA? NUMA(Non-Uniform Memory Access)即非统一内存访问。为了更好的解释什么是NUMA,我们有必要先聊聊NUMA诞生的背景。 NUMA诞生的背景 在早期,所有CPU对内存的访问都要通过总线来访问,此时所有CPU访问内存都是“一致的”,如下图所示: +++++++++++++++ +++++++++++++++ +++++++++++++++ | CPU | | CPU | | CPU

樛木南雨 2324

突破NUMA限制:numactl项目在CONFIG_NUMA=n环境下的兼容性挑战与解决方案

你是否曾在部署依赖NUMA(Non-Uniform Memory Access,非统一内存访问)技术的应用时,遭遇过内核不支持NUMA的尴尬?在Linux系统中,当内核配置`CONFIG_NUMA=n`时,所有NUMA相关功能都会被禁用,这给依赖`numactl`工具进行内存管理的应用带来了严峻挑战。本文将深入剖析`numactl`项目在非NUMA环境下的兼容性问题,提供全面的检测方案和优雅降级策...

gitblog_07784的博客 424
上一篇: NUMA架构下的CPU拓扑结构
下一篇: Ubuntu 18.04安装英特尔Optane DC Persistent Memory Module配置工具ipmctl
SweeNeil
博客等级 码龄9年 251粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值