当前位置: 首页 > news >正文

NUMA详解

目录

NUMA简介

NUMA开启与关闭

查看系统是否支持

关闭方法

numactl --hardware介绍

没有安装numactl工具下查看NUMA架构节点数:

查看每个NUMA节点的CPU使用情况:

看每个NUMA节点的内存使用情况:

查看NUMA下指定进程的运行情况

创建新进程时,指定NUMA的相关属性

新进程在指定节点上运行

新进程在所有节点上运行

NUMA简介

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

在Numa系统中,每个处理器有一个本地内存子系统,每个本地内存子系统都连接到一个全局内存交换网络。当处理器需要访问内存时,它们可以通过本地内存子系统直接访问本地内存,或者通过全局内存交换网络来访问远程内存。由于本地内存访问速度更快,因此在处理器需要访问本地内存时,它们会尽可能使用本地内存。

Numa架构通常用于高性能计算领域,例如科学模拟和数据分析等领域,以及大型企业服务器等需要高度可扩展性和性能的领域。

NUMA开启与关闭

查看系统是否支持

在大多数情况下,Numa是在硬件级别上实现的,并且通常无法通过软件直接开启或关闭。因此,如果你要使用Numa架构,你需要选择支持Numa的硬件。在现代的多处理器系统中,大多数服务器和工作站都支持Numa。

但是,在某些情况下,操作系统可能会使用不同的策略来管理内存访问,这可能会影响Numa性能。在Linux操作系统中,你可以使用numactl命令来管理Numa策略和配置。例如,可以使用numactl命令将进程绑定到特定的处理器和内存节点,以最大化Numa性能。可以使用以下命令来检查系统是否支持Numa:

$ numactl --hardware

如果系统中没有安装 numactl 工具,需要先安装该工具。在大多数 Linux 发行版中,可以使用以下命令进行安装:

sudo apt-get install numactl   # Ubuntu/Debian
sudo yum install numactl       # CentOS/Fedora

如果系统支持Numa,它将输出每个处理器和内存节点的详细信息。如果系统不支持Numa,则该命令将输出错误消息。

关闭方法

默认情况下在支持NUMA的硬件上,NUMA是开启的,有时 NUMA 会因为跨区域访问内存,导致速度变慢,因此可以通过 grub.conf 文件修改内存参数 numa=off,关闭该功能。

numactl --hardware介绍

[root@zyq ~]# numactl --hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
node 0 size: 261726 MB
node 0 free: 119515 MB
node 1 cpus: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
node 1 size: 262144 MB
node 1 free: 118662 MB
node distances:
node   0   1 0:  10  21 1:  21  10 

以上输出显示当前系统中有两个节点,分别是节点0和节点1。节点0具有16个物理CPU核心(编号为0到15和32到47),内存大小为261726 MB,可用内存大小为119515 MB。节点1具有与节点0相同数量的物理CPU核心,内存大小为262144 MB,可用内存大小为118662 MB。

表中最后三行的数字表示两个节点之间的距离,这是访问跨节点内存的相对延迟或成本的一种度量。在这种情况下,从节点0到节点0的距离为10,这意味着访问同一节点上的内存比访问另一个节点上的内存更快,后者的距离为21。类似地,从节点1到节点0的距离为21,而从节点1到节点1的距离为10。

没有安装numactl工具下查看NUMA架构节点数:

lscpu | grep numa -i

[secure@zyq ~]$ lscpu | grep numa -i
NUMA node(s):          2
NUMA node0 CPU(s):     0-15,32-47
NUMA node1 CPU(s):     16-31,48-63
[secure@bj05-compute-10e33e16e229 ~]$ 

查看每个NUMA节点的CPU使用情况:

[secure@zyq ~]$ numastat -cPer-node numastat info (in MBs):Node 0      Node 1       Total---------- ----------- -----------
Numa_Hit        7216207925 10168038929 17384246853
Numa_Miss                0           0           0
Numa_Foreign             0           0           0
Interleave_Hit         440         437         876
Local_Node      7216168500 10167963974 17384132473
Other_Node           39425       74955      114380

以下是每个统计量的含义:

  • Numa_Hit:表示进程成功从该节点的本地内存中获取的内存总量(单位为MB)。
  • Numa_Miss:表示进程无法从该节点的本地内存中获取所需内存的总量(单位为MB)。
  • Numa_Foreign:表示由于数据已从本地节点迁移而进程在远程 NUMA 节点上访问的内存总量(单位为MB)。
  • Interleave_Hit:表示进程从多个节点交错分配的内存中获取的总量(单位为MB)。
  • Local_Node:表示进程在每个节点的本地内存中使用的总量(单位为MB)。
  • Other_Node:表示在该节点上分配了内存,但无法确定该内存被哪个节点使用,这可能是由于内存映射不完全或跨节点的共享内存导致的。

  • Node 0:表示第一个NUMA节点的总内存使用情况(单位为MB)。
  • Node 1:表示第二个NUMA节点的总内存使用情况(单位为MB)。
  • Total:表示所有节点的总内存使用情况(单位为MB)。

numastat -c 命令的输出表示的是自系统启动以来的历史内存使用情况

该输出表明:

  • 进程所有访问基本都在在本地节点上完成的,只有很少量内存访问不能确定是否为跨CPU访问。

看每个NUMA节点的内存使用情况:

[secure@zyq ~]$ numastat -mPer-node system memory usage (in MBs):Node 0          Node 1           Total--------------- --------------- ---------------
MemTotal               384921.56       386909.59       771831.15
MemFree                 29070.13        31174.23        60244.37
MemUsed                355851.43       355735.36       711586.79
Active                   3402.52         4861.70         8264.22
Inactive                 1912.20         1788.92         3701.12
Active(anon)             3268.76         4442.04         7710.80
Inactive(anon)            372.28          811.39         1183.66
Active(file)              133.76          419.67          553.43
Inactive(file)           1539.93          977.54         2517.46
Unevictable               897.04          417.89         1314.93
Mlocked                   897.04          417.89         1314.93
Dirty                       0.04            0.05            0.08
Writeback                   0.00            0.00            0.00
FilePages                3111.70         4089.79         7201.49
Mapped                     94.89          375.35          470.24
AnonPages                2887.79         2681.98         5569.77
Shmem                    1434.30         2680.70         4114.99
KernelStack                18.70           21.51           40.20
PageTables                 18.21           20.61           38.83
NFS_Unstable                0.00            0.00            0.00
Bounce                      0.00            0.00            0.00
WritebackTmp                0.00            0.00            0.00
Slab                      491.14          548.34         1039.48
SReclaimable              181.18          133.42          314.61
SUnreclaim                309.96          414.92          724.88
AnonHugePages            2170.00         1902.00         4072.00
ShmemHugePages              0.00            0.00            0.00
ShmemPmdMapped              0.00            0.00            0.00
HugePages_Total        345088.00       344064.00       689152.00
HugePages_Free         219136.00       145408.00       364544.00
HugePages_Surp              0.00            0.00            0.00
[secure@bj05-compute-s6-10e33e18e78 ~]$ free -gtotal        used        free      shared  buff/cache   available
Mem:            753         687          58           4           7          56
Swap:             0           0           0

 MemFree显示每个节点当前可用的内存。

查看NUMA下指定进程的运行情况

numastat -p <pid>

其中,<pid> 是要查看的进程 ID。该命令将显示指定进程在每个节点上的 CPU 使用情况。以下是一个kvm虚拟机进程示例输出:

[root@zyq ~]# numastat -p 4080714Per-node process memory usage (in MBs) for PID 4080714 (qemu-kvm)Node 0          Node 1           Total--------------- --------------- ---------------
Huge                     16384.00            0.00        16384.00
Heap                        77.62            0.00           77.62
Stack                        0.91            0.00            0.91
Private                    204.70           35.27          239.96
----------------  --------------- --------------- ---------------
Total                    16667.22           35.27        16702.48
[root@bj05-compute-s6-10e33e18e78 ~]# 

该输出表明,进程的主要 CPU 使用量在节点 0上,而在其他节点上几乎没有 CPU 使用量。

numastat命令本身并不知道该进程是qemu-kvm进程。输出中显示的进程名称是由操作系统内核提供的,通过查询进程的PID获取。在该输出中,操作系统内核提供了PID为4080714的进程的相关信息,并将其标记为qemu-kvm进程。因此,numastat命令只是输出了该进程在 NUMA 节点上的内存使用情况,并没有直接提供关于该进程的详细信息,如进程名称、用户、进程状态等等

创建新进程时,指定NUMA的相关属性

新进程在指定节点上运行

要在创建进程时指定NUMA相关信息,可以使用numactl命令的--membind--cpunodebind选项。--membind选项用于将进程的内存绑定到指定的NUMA节点,而--cpunodebind选项用于将进程的CPU绑定到指定的NUMA节点。

例如,要将一个名为myprog的进程绑定到NUMA节点0上的内存和CPU,可以使用以下命令:

numactl --membind=0 --cpunodebind=0 ./myprog

这将创建一个进程,它的内存和CPU都绑定在NUMA节点0上。可以根据需要将--membind--cpunodebind选项设置为不同的NUMA节点编号。

新进程在所有节点上运行

要将进程绑定到所有的CPU和内存上,您可以使用numactl命令的--interleave=all选项。这将使操作系统在所有NUMA节点之间交错分配内存,从而使进程能够在所有的NUMA节点上运行。

以下是一个使用numactl命令将进程绑定到所有CPU和内存上的示例:

numactl --interleave=all ./myprog

这将创建一个进程,它的内存将被交错分配到所有的NUMA节点上,从而使进程能够在所有的NUMA节点上运行。CPU将被自动绑定到系统中可用的所有CPU上。

需要注意的是,将进程绑定到所有的CPU和内存上可能会影响性能,因为在NUMA节点之间交错分配内存可能会导致额外的内存访问延迟。因此,在使用--interleave=all选项时,需要谨慎考虑其对性能的影响,并进行必要的基准测试和优化。

相关文章:

NUMA详解

目录 NUMA简介 NUMA开启与关闭 查看系统是否支持 关闭方法 numactl --hardware介绍 没有安装numactl工具下查看NUMA架构节点数&#xff1a; 查看每个NUMA节点的CPU使用情况&#xff1a; 看每个NUMA节点的内存使用情况&#xff1a; 查看NUMA下指定进程的运行情况 创建…...

H68K在Armbina系统下开AP

背景需求替代路由器,网上找了一大堆都不行 最后成功开启了AP 参考了两篇文章, 一篇是如何创建热点, 一篇是如何开启5G 树莓派4B创建5Ghz WiFi热点 – 风声 https://www.hncldz.com/2020/02/01/%e6%a0%91%e8%8e%93%e6%b4%be4b%e5%88%9b%e5%bb%ba5ghz-wifi%e7%83%ad%e7%82%b…...

还不懂Redis?看完这个故事就明白了!

还不懂Redis?看完这个故事就明白了! 我是Redis 你好,我是Redis,一个叫Antirez的男人把我带到了这个世界上。 说起我的诞生,跟关系数据库MySQL还挺有渊源的。 在我还没来到这个世界上的时候,MySQL过的很辛苦,互联网发展的越来越快,它容纳的数据也越来越多,用户请求也…...

Haproxy负载均衡集群

1.Haproxy支持四层和七层 2.haproxy常用的调度算法&#xff1f; 3.LSV/NGINX/HAPROXT的区别&#xff1f; 4. 5.Haproy负载均衡部署 实验需求 利用Haproxy的运用配置出负载均衡调度器&#xff0c;以此来调用两台Nginx服务器进行工作 实验所需组件 Haproxy服务器&#xff1a;192…...

17.计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度

说明书 MATLAB代码&#xff1a;计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度 关键词&#xff1a;碳捕集 虚拟电厂 需求响应 优化调度 电转气协同调度 参考文档&#xff1a;《计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度》完全复现 仿真平台&#xff1a…...

企业数字化管理中,数据治理到底怎么“治”

随着信息化、数字化的理念、技术及其应用在社会的方方面面进行扩散&#xff0c;数据的规模和丰富程度已经达到了一个新的高度&#xff0c;所以当下如何更进一步利用好数据&#xff0c;充分发挥数据的价值&#xff0c;将其真正变为高质量的数据资产成为了企业要面对的重要问题&a…...

《HelloGitHub》第 85 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 …...

自动驾驶人机交互HMI产品技术方案

1. 概述 1.1 目的 本文档描述集卡自动驾驶系统中HMI产品的技术方案,设计人员遵循本方案进行设计,为项目开发实施提供技术方案保障。 1.2 范围 本文档适用于HMI产品项目。本文档用于指导HMI产品项目的UI、前端开发过程。 1.3 术语与缩写 术语/缩写 描述 HMI...

开发感悟20230426

一、element-ui样式设置 1. 可以直接在css中写个样式文件&#xff0c;把对应的类名改写样式&#xff0c;然后在main.js中引用&#xff0c;可以覆盖上面的&#xff0c;如果想给element-ui设置样式&#xff0c;不用设置deep了 2.可以直接修改引入的element-ui的样式&#xff0c…...

C和C++的区别

C和C的区别 1、面向对象编程&#xff1a;C是面向对象的语言&#xff0c;而C语言则不支持面向对象编程。C提供了类、对象、封装、继承、多态等面向对象的特性&#xff0c;使得程序结构更加清晰、可读性更强。2、模板&#xff1a;C提供了模板的特性&#xff0c;使得程序员可以通…...

【力扣-141】 环形链表 + 【力扣-142】 环形链表 II

&#x1f58a;作者 : Djx_hmbb &#x1f4d8;专栏 : 数据结构 &#x1f606;今日分享 : 霍桑效应(霍索恩效应) : 是指那些意识到自己正在被别人观察的个人具有改变自己行为的倾向。 霍桑效应告诉我们&#xff1a;从旁人的角度&#xff0c;善意的谎言和夸奖真的可以造就一个人&a…...

云计算:优势与未来趋势

文章目录 前言一、云计算的优势1. 降低IT成本2. 提高工作效率3. 提高业务的可靠性和稳定性4. 提升安全性 二、未来发展趋势1. AI与云计算的融合2. 边缘计算的发展3. 多云的趋势4. 服务器和存储的创新 三、 行业应用案例1.金融行业2.医疗保健行业3.教育行业4.零售和物流行业 四、…...

Linux namespace

​ 前言 从《initrd&init进程》可知&#xff0c;我们通过ssh连接linux服务器&#xff0c;其实主是linux启动一shell进程与我们做交互。而Linux又是多租户的&#xff0c;这使用得用户与用户间产生了&#xff0c;资源的争抢。 如何隔离资源&#xff0c;且让用户都无法察觉&…...

第十三章 移动和旋转(上)

移动和旋转是游戏对象最频繁地操作。我们上个章节简单介绍了Cube的移动和旋转。移动是修改transform的position属性&#xff0c;旋转是修改transform的eulerAngles&#xff08;欧拉角&#xff09;属性&#xff0c;两者属性值均可以使用Vector3向量来实现。需要大家注意的是&…...

视频文件切片

1.为什么网络点播系统使用m3u8更有优势?为何点播要用M3U8来搞&#xff1f;存成一个文件不更好吗&#xff1f; 一个MP4文件可能几百M或几个G&#xff0c;如果读取整个MP4文件的信息并且需要下载一段内容&#xff0c;首次打开播放超慢&#xff08;加载时间长&#xff09;。如果把…...

维生素的缺乏与生理功能,是否需要补充维生素【持续学习】

health & nutrition 学习自河南大学丁勇老师&#xff1a;https://space.bilibili.com/510028707 去医院查体内维生素缺啥&#xff1a;营养科或内科开单子 直接门诊查个维生素就可以。9项不到600块 正常吃饭&#xff0c;保湿和防晒 伤口愈合慢——蛋白质&#xff0c;vc 干燥…...

CUDA下载,以及下载GPU版本的pytorch

一、下载anaconda 因为这步我之前就下好了&#xff0c;主要参考这个链接&#xff1a;史上最全最详细的Anaconda安装教程 二、下载CUDA 1.首先观察自己需要什么版本的CUDA&#xff0c;以及是否安装过CUDA 先cmd&#xff0c;输入命令 nvidia-smi结果如下&#xff0c;所以我们…...

学习笔记:c存储类

✨博文作者&#xff1a;烟雨孤舟 &#x1f496; 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 文章目录 目录 文章目录 简介 auto 存储类 register 存储类 static 存储类 extern 存储类 总结 简介 存储类定义 C 程序中变量/函数的的存储位置…...

236. 二叉树的最近公共祖先【190】

难度等级&#xff1a;中等 上一篇算法&#xff1a; 103. 二叉树的锯齿形层序遍历【191】 力扣此题地址&#xff1a; 236. 二叉树的最近公共祖先 - 力扣&#xff08;Leetcode&#xff09; 1.题目&#xff1a;236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点…...

即时配送,即时很重要!商家能不能盈利,“快”是源头

“家里水果没有了&#xff0c;选几样叫个跑腿送来吧。” “现在得囤点布洛芬了&#xff0c;我从网上下单。” “同城配送真是太及时、太方便了。” 最近一段时间&#xff0c;如果要问有什么产业突然兴起的话&#xff0c;即时零售无疑是市场最受欢迎的产业。甚至有种说法&…...

ChatGPT原理剖析

文章目录 ChatGPT常见误解1. 罐头回应2. 网络搜寻重组 ChatGPT真正做的事——文字接龙ChatGPT背后的关键技术——预训练&#xff08;Pre-train&#xff09;一般机器是怎样学习的&#xff1f; ChatGPT带来的研究问题1. 如何精准提出需求2. 如何更改错误3. 侦测AI生成的物件4. 不…...

「C/C++」C/C++软件跨平台思维

博客主页&#xff1a;何曾参静谧的博客 文章专栏&#xff1a;「C/C」C/C学习 目录 相关术语一、编写可移植的代码&#xff1a;二、使用跨平台的C库和框架&#xff1a;三、进行兼容性测试&#xff1a;四、用户界面设计&#xff1a; 相关术语 跨平台思维&#xff1a;是指在软件开…...

c# 通过界面上填写的信息输出到对应的word中,并另存为一个新的文件

c# 通过界面上填写的信息输出到对应的word中&#xff0c;并另存为一个新的文件 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tas…...

HTML+CSS+JS 学习笔记(四)———jQuery

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;前端 &#x1f331;往期回顾&#xff1a; &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注​​ 目录 jQuery 基础 jQuery 概述 下载与配置jQuery 2. 配置jQuery jQuery 选…...

TryHackMe-Mnemonic(boot2root)

Mnemonic I hope you have fun. 端口扫描 循例nmap FTP枚举 尝试anonymous Web枚举 进80 gobuster扫 对着webmasters再扫一下 对着backups继续扫 下载zip文件&#xff0c;发现有密码 zip2john john直接爆 查看note.txt, 给出了ftpuser hydra直接爆ftp 进到ftp 用wget下载所…...

Nacos注册中心的使用

文章目录 Nacos注册中心1. 服务注册到nacos1&#xff09;引入依赖2&#xff09;配置nacos地址3&#xff09;重启 2.服务分级存储模型2.1.给user-service配置集群2.2.同集群优先的负载均衡 3.权重配置 Nacos注册中心 国内公司一般都推崇阿里巴巴的技术&#xff0c;比如注册中心…...

项目中别用 “! = null“ 做判空了

问题 为了避免空指针调用&#xff0c;我们经常会看到这样的语句: if (someobject ! null) {someobject.doCalc();}最终&#xff0c;项目中会存在大量判空代码&#xff0c;丑陋繁杂。。。如何避免这种情况&#xff1f;是否滥用了判空&#xff1f; 最终&#xff0c;项目中会存在…...

MySQL数据库——MySQL子查询

子查询是 MySQL 中比较常用的查询方法&#xff0c;通过子查询可以实现多表查询。子查询指将一个查询语句嵌套在另一个查询语句中。子查询可以在 SELECT、UPDATE 和 DELETE 语句中使用&#xff0c;而且可以进行多层嵌套。在实际开发时&#xff0c;子查询经常出现在 WHERE 子句中…...

工具链和其他-超级好用的web调试工具whistle

目录 whistle介绍 整体结构 能力 规则 6个使用场景示例 1.修改Host 2.代理 3.替换文件&#xff08;线上报错时&#xff09; 4.替换UA 5.远程调试 6.JS注入 互动 whistle介绍 整体结构 安装&#xff1a; npm install whistle -g cli&#xff1a;whistle help 启动…...

ROS第四十三节——定位

https://download.csdn.net/download/qq_45685327/87725276 1.新建launch文件 关于launch文件的实现&#xff0c;在amcl功能包下的example目录已经给出了示例&#xff0c;可以作为参考&#xff0c;具体实现: roscd amcl ls examples gedit amcl_diff.launch 该目录下会列出两…...