NUMA技术以及numactl命令

10 篇文章 0 订阅
3 篇文章 0 订阅


在DPDK中,使用了NUMA技术,来提高CPU对内存的访问效率.那么什么是NUMA呢,它是如何提高CPU访问内存的效率的呢?

一、明确概念

首先,我们先明确几个概念,即,SMP、NUMA、MPP。它们是目前主流的计算机系统架构。
1.SMP(Symmetric Multi-Processor):对称多处理结构。在这样的系统中,多个 CPU 对称工作,无主次或从属关系。所有的CPU共享全部资源,如总线,内存和I/O系统等,多个CPU之间没有区别,平等地访问内存、外设、一个操作系统。每个 CPU 访问内存中的任何地址所需时间是相同的,因此 SMP 也被称为一致存储器访问结构 (UMA : Uniform Memory Access) 。操作系统管理着一个队列,每个处理器依次处理队列中的进程。如果两个处理器同时请求访问一个资源(例如同一段内存地址),由硬件、软件的锁机制去解决资源争用问题。

2.SMP 服务器的主要特征是共享,系统中所有资源 (CPU 、内存、 I/O 等 ) 都是共享的。也正是由于这种特征,导致了 SMP 服务器的主要问题,那就是它的扩展能力非常有限。对于 SMP 服务器而言,每一个共享的环节都可能造成 SMP 服务器扩展时的瓶颈,而最受限制的则是内存。由于每个 CPU 必须通过相同的内存总线访问相同的内存资源,因此随着 CPU 数量的增加,内存访问冲突将迅速增加,最终会造成 CPU 资源的浪费,使 CPU 性能的有效性大大降低。实验证明, SMP 服务器 CPU 利用率最好的情况是 2 至 4 个 CPU 。

3.NUMA(Non-Uniform Memory Access):非一致存储访问结构。NUMA 服务器的基本特征是具有多个 CPU 模块,每个 CPU 模块由多个 CPU( 如 4 个 ) 组成,并且具有独立的本地内存、 I/O 槽口等。由于其节点之间可以通过互联模块 ( 如称为 Crossbar Switch) 进行连接和信息交互,因此每个 CPU 可以访问整个系统的内存 ( 这是 NUMA 系统与 MPP 系统的重要差别 ) 。显然,访问本地内存的速度将远远高于访问远地内存 ( 系统内其它节点的内存 ) 的速度,这也是非一致存储访问 NUMA 的由来。由于这个特点,为了更好地发挥系统性能,开发应用程序时需要尽量减少不同 CPU 模块之间的信息交互。

4.NUMA 技术同样有一定缺陷,由于访问远地内存的延时远远超过本地内存,因此当 CPU 数量增加时,系统性能无法线性增加。

5.MPP(Massive Parallel Processing):海量并行处理结构。和 NUMA 不同, MPP 提供了另外一种进行系统扩展的方式,它由多个 SMP 服务器通过一定的节点互联网络进行连接,协同工作,完成相同的任务,从用户的角度来看是一个服务器系统。MPP 的节点互联机制是在不同的 SMP 服务器外部通过 I/O 实现的,每个节点只访问本地内存和存储,节点之间的信息交互与节点本身的处理是并行进行的。其基本特征是由多个 SMP 服务器 ( 每个 SMP 服务器称节点 ) 通过节点互联网络连接而成,每个节点只访问自己的本地资源 ( 内存、存储等 ) ,是一种完全无共享 (Share Nothing) 结构,因而扩展能力最好,理论上其扩展无限制,目前的技术可实现 512 个节点互联,数千个 CPU 。

二、NUMA Node、Socket、Core、Logical Processor、Hyper-threading

了解了三种系统架构的不同之后,我们再来了解一下同一物理设备内的NUMA Node、Socket、Core、Logical Processor、超线程技术Hyper-threading这四个名词分别指什么。
1.超线程技术Hyper-threading:就是在一个CPU Core上集成了两个逻辑处理器单元,即,两个Logical Processor。

2.一个NUMA node包括一个或者多个Socket,以及与之相连的local memory。
3.一个多核的Socket有多个Core。
4.如果CPU支持HT,OS还会把这个Core看成 2个Logical Processor。

常用命令:

安装numctl

apt-get install numactl  #安装

查看是否支持NUMA

numactl --hardware  #查看是否支持NUMA,有多个node即支持

在这里插入图片描述

查看系统几个node

ls -tlr /sys/devices/system/node/    #查看系统/sys/devices/system/node/目录下有几个node。

在这里插入图片描述

查看当前系统有几个socket

cat /proc/cpuinfo | grep "physical id"   #查看当前系统有几个socket:2个

在这里插入图片描述

查看当前系统有哪些core

cat /proc/cpuinfo | grep "core id"  #查看当前系统有哪些core,一个socket有4个core。分别为0、1、9、10.

在这里插入图片描述

查看CPU0的cache的详细信息

ls /sys/devices/system/cpu/cpu0/cache/
得到 index0  index1  index2  index3
# 查看CPU0的cache的详细信息
# index0:1级数据cache
# index1:1级指令cache
# index2:2级cache
# index3:3级cache ,对应cpuinfo里的cache

查看numa的状态

 numastat
 # numa_hit是打算在该节点上分配内存,最后从这个节点分配的次数;
 # num_miss是打算在该节点分配内存,最后却从其他节点分配的次数;
 # num_foregin是打算在其他节点分配内存,最后却从这个节点分配的次数;
 # interleave_hit是采用interleave策略最后从该节点分配的次数;
 # local_node该节点上的进程在该节点上分配的次数
 # other_node是其他节点进程在该节点上分配的次数

在这里插入图片描述

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值