ToB企服应用市场:ToB评测及商务社交产业平台

标题: CPU处置惩罚器NUMA架构简介 [打印本页]

作者: 海哥    时间: 2024-6-11 19:16
标题: CPU处置惩罚器NUMA架构简介
在现实工作中,常常碰到服务器是否开启NUMA、NUMA绑定几颗Core、跨NUMA节点访问的性能降落等等话题。那么NUMA作为非一致性内存访问的多处置惩罚器架构,在架构上有什么特性、与SMP架构有哪些差别,调优策略等,本文将作扼要介绍。

1、CPU处置惩罚器NUMA架构简介

服务器CPU是盘算机服务器的大脑,作为服务器的运算和控制核心,是信息处置惩罚、程序运行的终极执行单元,负责读取指令、对指令译码并执行。在服务器中,CPU与GPU、内存、硬盘和网卡间并不能直接通信,必要通过内存控制芯片、PCIe控制芯片和I/O处置惩罚芯片等实现,这些芯片通过差别总线(PCIe总线、USB总线和SPI总线等)与CPU相连。

CPU处置惩罚器的架构从最初简单的架构到现在复杂的架构经历了多年的发展,此中SMP(Symmetric Multi-Processing)架构和NUMA(Non-Uniform Memory Access)架构是两种非常紧张的多处置惩罚器架构。
1.1 SMP架构

SMP(Symmetric Multi-Processing)即对称多处置惩罚架构,在这种系统架构中,服务器不再由单个CPU构成,而是同时由多个处置惩罚器运行操纵系统的单一复本,各CPU之间共享总线,内存和I/O系统等服务器资源举行并行处置惩罚。由于所有处置惩罚器共享同样的内存访问地址空间和总线布局,因此从管理的角度来看,它们是“对称”的,即无主从之分,工作负载可以均匀地分配到所有可用处置惩罚器上,从而明显提高整个系统的数据处置惩罚本领。因此SMP也被称为一致存储器访问布局 (UMA:Uniform Memory Access)。

SMP的重要特性是共享,但是由于所有处置惩罚器共享相同的内存和总线,当处置惩罚器数目增长时,共享内存和总线可能成为性能瓶颈,因此SMP架构在处置惩罚器数目扩展性方面受到肯定的限制。此中最受限制的则是内存,由于每个CPU必须通过相同的内存总线访问相同的内存资源,因此随着CPU数目的增长,内存访问冲突将迅速增长,终极会造成CPU资源的浪费,使CPU性能的有效性大大低落。实行证明,SMP服务器CPU利用率最好的情况是 2至4个CPU 。此外,为了保证共享存储器的数据一致性,必要软硬件实现加锁机制来办理多个处置惩罚器同时访问共享资源时的资源竞态问题。
1.2 NUMA架构

在最开始的CPU处置惩罚器架构中,CPU通过前端总线(FSB,Front Side Bus)连接到北桥芯片(NorthBridge),然后北桥芯片连接到内存(内存控制器集成在北桥芯片内里)。

上述架构也称为UMA架构(Uniform Memory Access),在 UMA 架构下,CPU 和内存之间的通信全部都要通过前端总线。但是随着CPU性能的提升由CPU主频向多核CPU发展,越来越多的CPU对前端总线FSB的争用,前端总线逐渐称为瓶颈。NUMA(Non-Uniform Memory Access)架构在此背景下发展起来。
NUMA架构由多个CPU模块构成,每个CPU模块又由多个CPU构成,并且有独立的当地内存、IO controller等。各个CPU节点之间通过互联模块举行访问,在AMD处置惩罚器称为Hyper-Transport,Intel在Nehalem-EX系统处置惩罚器上引入Quick-Path Interconnect(QPI)。

与UMA/SMP架构对比,内存访问最大的差别之处是出现了当地内存和远程内存。

访问当地内存的速度要远快于远程内存,NUMA(非一致性存储器访问)因此而得名。
1.2.1 QPI介绍

QPI(QuickPath Interconnect)是Intel推出的一种高速总线技能,用于连接多处置惩罚器系统中的处置惩罚器、内存和其他扩展模块,代替了之前的 FSB(Front Side Bus)总线架构。QPI 重要用于连接以下模块:


1.2.2 NUMA布局

在Intel处置惩罚器的NUMA架构中,包罗Processor Node、内存、互联模块(QPI)和I/O Subsystem。此中CPU又分为以下布局:


NUMA最大的特点是引入了node和distance的概念:node内部有多个CPU,以及绑定的内存;distance这个概念是用来定义各个node之间调用资源的开销。通过命令numactl --hardware可以查看NUMA信息:
  1. available: 2 nodes (0-1)  
  2. node 0 cpus: 0 1 2 3  
  3. node 0 size: 16325 MB  
  4. node 0 free: 12196 MB  
  5. node 1 cpus: 4 5 6 7  
  6. node 1 size: 16384 MB  
  7. node 1 free: 14782 MB  
  8. node distances:  
  9. node   0   1   
  10.   0:  10  21   
  11.   1:  21  10
复制代码

1.2.3 SMP架构和NUMA架构对比

NUMA(Non-Uniform Memory Access)和SMP(Symmetric Multi-Processing)是两种常见的多处置惩罚器架构,它们在处置惩罚器如何访问内存以及内存如何分布方面有所差别。以下是它们之间的重要区别和各自的优缺点:

1.3 NUMA设置及调优

1.3.1 CPU分配策略和内存分配策略

1)CPU分配策略
在NUMA架构中,CPU分配策略重要关注如何将进程或线程分配给处置惩罚器,以最小化内存访问延长。以下是几种常见的CPU分配策略:

2)内存分配策略
内存分配策略决定了如安在NUMA架构中的差别节点上分配内存。以下是几种常见的内存分配策略:

NUMA架构的CPU默认采用的是localalloc的内存分配策略,运行在本node内部CPU上的进程,会从本node内部的内存上分配内存,如果内存不敷,则会导致swap的产生,严重影响性能。因此在系统设置时候关闭SWAP,避免产生SWAP影响性能,另外将内存分配策略设置为interleave; 如许设置的话,任何进程的内存分配,都会随机向各个node申请。虽然跨Node申请内存访问也会造成肯定的性能消耗。
1.3.2 NUMA架构下进程与CPU绑定

在NUMA架构中,如果内存交叉访问较多、缓存掷中率较低、必要控制进程运行位置大概避免NUMA效应等场景下,必要将进程绑定在特定的CPU中。

通过命令numastat可以查看每个NUMA节点的内存分配的统计数据,包罗内存分配的成功与失败情况。
  1. #numastat
  2.                            node0           node1
  3. numa_hit                 3620312         3672057
  4. numa_miss                      0               0
  5. numa_foreign                   0               0
  6. interleave_hit             36004           35732
  7. local_node               3608692         3645179
  8. other_node                 11620           26878
复制代码

当numa_miss和numa_foreign值越高,就要考虑绑定的问题了。通过命令numactl将进程绑定在某个Node或Cores上:
  1. #将进程绑定到某节点上
  2. numactl --cpunodebind=nodes program
  3. #将进程绑定到某Core上
  4. numactl --physcpubind=1,2,3,4  Program
复制代码

   参考资料:
  
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4