linux性能优化——关于NUMA的配置

2024-02-07 21:28
文章标签 配置 linux 优化 性能 numa

本文主要是介绍linux性能优化——关于NUMA的配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

检查NUMA配置

numa是为了应对多处理器系统共享同一个总线导致的总线负载过大问题。本质上将M个处理器分为N组,每组处理器之间用IMC BUS总线进行连接,每一组叫做一个Node,其结构类似于一个小的UMA(Uniform Memory Access),每个Node中有一个集成的内存控制器IMC,Intergrated Memory Controller。组内CPU用IMCBUS总线连接,Node之间用QPI总线连接,QPI延迟明显高于IMCBUS。

如果numa的available nodes数量大于1,则表明NUMA已开启。

NUMA的基本信息可以通过检查cpu状态,即使用lscpu指令来看到。执行如下指令:

lscpu | grep -i numa

得到如下格式结果:

NUMA node(s):        2
NUMA node0 CPU(s):   0-27,56-83
NUMA node1 CPU(s):   28-55,84-111

结果显示NUMA有2个node, 如果大于1个node,说明NUMA开启。此外对新手要注意:pcie上并没有NUMA信息,因为pcie上的信息都是硬件设备,NUMA并不是硬件,而只是一种内存技术,该技术和CPU的支持分不开,所以,用lscpu指令可以看到NUMA信息。

如果要看NUMA详细的信息,可以用numactl和numastat指令。

numactl --hareward
#numactl -H

得到如下信息:

available: 2 nodes (0-1) 
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
node 0 size: 128445 MB
node 0 free: 96356 MB
node 1 cpus: 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
node 1 size: 128982 MB
node 1 free: 97986 MB
node distances:
node   0   10:  10  201:  20  10

此外还要检查pcie上的设备是否和对应的NUMA节点对应。

例如,某一个pcie地址段是和NUMA的Node0绑定的,则该地址段上的设备应绑定Node0。如果本应是绑定Node0的设备绑定了Node1, 则必然导致该设备运行的性能下降。

注:通过实验得出,00-7f的bus上,所有设备均应绑定Node0,80-ff的bus上,所有设备均应绑定Node1。
7f对应十进制是127,ff对应十进制是255,正好是256位长度,说名pcie位宽是256位。前半部分属于Node0,后半部分属于Node1。

以网卡为例,通过lspci找到了某一张网卡的pcie地址号0000:4b:00.01,bus为4b,小于80,故应绑定Node0。通过以下指令查询该网卡是否绑定Node0:

cat /sys/bus/pci/devices/0000\:4b\:00.1/numa_node

如果返回的值为0,说明该网卡绑定NUMA正确。

另外,如果仅仅是查看某一个网卡绑定的numa_node,可以通过以下指令而不需要通过pcie查找:

cat  /sys/class/net/enp129s0f0/device/numa_node 

该指令的值会返回所属的Node号,如果返回0,便代表该网卡绑定在Node0上。

这两个指令共同点都是在sys文件系统中查找。

如何配置NUMA

NUMA的配置对于性能至关重要。

这篇关于linux性能优化——关于NUMA的配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/688976

相关文章

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u