CPU处理器NUMA架构简介

news2025/2/28 6:16:38

在实际工作中,经常遇到服务器是否开启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. SMP架构的出现是在多核处理器和并行处理技术发展的背景下。由于单个处理器的性能提升受限于物理极限,为了提高整体计算能力,将多个处理器集成到一个系统中,并让它们共享内存和总线等资源。
  2. NUMA架构则是在SMP架构的基础上进一步发展而来的。随着处理器数量的增加,SMP架构中的共享内存和总线成为了性能瓶颈。为了解决这个问题,NUMA架构将内存划分为多个节点(Node),每个节点都有自己的处理器和本地内存。处理器访问自己节点的内存速度较快(本地访问),而访问其他节点的内存速度较慢(远程访问)。这种设计有助于减少内存访问冲突,提高并行处理性能。
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架构对比,内存访问最大的不同之处是出现了本地内存和远程内存。

  • 每个CPU独立连接到一部分内存,这部分CPU通过内部总线直连的内存称为“本地内存”;
  • CPU之间互联模块(QPI总线)访问不和自己直连的内存称为“远程内存”。

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

1.2.1 QPI介绍

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

  • 处理器(CPU):QPI用于连接多个处理器,构建多处理器系统。每个处理器都会有自己的QPI接口,通过QPI总线与其他处理器进行通信和数据交换。
  • 内存控制器:QPI还用于连接处理器与内存控制器,将内存访问请求从处理器传输到内存模块,并返回请求的数据。通过QPI总线,处理器可以直接与内存控制器通信,实现快速的内存访问和数据交换。
  • I/O协处理器:在某些系统中,QPI还可以用于连接处理器与I/O协处理器或其他扩展模块,以实现更多的功能扩展和协同计算能力。这些模块可以通过QPI总线与处理器进行高速数据传输和协作计算。

在这里插入图片描述

1.2.2 NUMA结构

在Intel处理器的NUMA架构中,包括Processor Node、内存、互联模块(QPI)和I/O Subsystem。其中CPU又分为以下结构:

  • Socket:表示一颗物理CPU的封装(物理CPU插槽),简称插槽。为了避免将逻辑处理器和物理处理器混淆,Intel将物理处理器称为插槽。
  • Core:物理CPU封装内的独立的一组程序执行的硬件单元,比如寄存器,计算单元等。
  • Thread:使用超线程技术虚拟出来的逻辑Core,需要CPU支持。为了便于区分,逻辑Core一般被写作Processor。在具有Intel超线程技术的处理器上,每个内核可以具有两个逻辑处理器,这两个逻辑处理器共享大多数内核资源(如内存缓存和功能单元)。此类逻辑处理器通常称为Thread 。
  • Node:在NUMA架构中,处理器被组织成多个节点,每个节点包含一组处理器。

在这里插入图片描述

NUMA最大的特点是引入了node和distance的概念:node内部有多个CPU,以及绑定的内存;distance这个概念是用来定义各个node之间调用资源的开销。通过命令numactl --hardware可以查看NUMA信息:

available: 2 nodes (0-1)  
node 0 cpus: 0 1 2 3  
node 0 size: 16325 MB  
node 0 free: 12196 MB  
node 1 cpus: 4 5 6 7  
node 1 size: 16384 MB  
node 1 free: 14782 MB  
node distances:  
node   0   1   
  0:  10  21   
  1:  21  10
  • available:2 nodes (0-1) 表示系统中有两个 NUMA 节点,编号分别为 0 和 1。
  • node 0 cpus:0 1 2 3 和 node 1 cpus: 4 5 6 7 分别列出了每个节点上的 CPU 列表。在这个例子中,节点 0 包含 CPU 0 到 3,而节点 1 包含 CPU 4 到 7。
  • node 0 size:16325 MB 和 node 1 size: 16384 MB 分别列出了每个节点的总内存大小。
  • node 0 free:12196 MB 和 node 1 free: 14782 MB 分别列出了每个节点的当前空闲内存大小。
  • node distances:显示了每对节点之间的距离,这是NUMA系统中内存访问成本的一个指标。在上例中,节点0访问自己的内存(距离为10)比访问节点1的内存(距离为21)要快。同样,节点1访问自己的内存也比访问节点0的内存要快。
1.2.3 SMP架构和NUMA架构对比

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

  • 内存访问方式:
    • NUMA架构中,内存被划分到多个节点(Node)上,每个节点都有自己的本地内存和处理器。处理器访问自己节点的内存速度较快(本地访问),而访问其他节点的内存速度较慢(远程访问)。这种设计有助于减少内存访问冲突,提高并行处理性能。
    • SMP架构中,所有处理器共享同一块内存,并通过相同的总线或互联结构进行访问。因此,所有处理器访问内存的速度是相同的。这种设计简化了内存管理,但可能导致处理器之间的内存访问冲突。
  • 扩展性:
    • NUMA架构具有较好的扩展性,因为可以通过添加更多的节点来增加处理器和内存容量。每个节点可以独立地处理任务,从而提高了系统的整体性能。
    • SMP架构的扩展性相对较差。当处理器数量增加时,共享内存和总线可能成为性能瓶颈。此外,由于所有处理器共享相同的内存空间,因此内存容量也可能成为限制因素。
  • 成本和复杂性:
    • NUMA架构通常需要更复杂的硬件和软件支持来实现节点之间的内存访问和缓存一致性。这可能导致更高的成本。
    • SMP架构相对简单且成本较低,因为所有处理器共享相同的内存和总线结构。
  • 适用场景:
    • NUMA架构适用于需要大量内存和处理器资源的高性能计算和科学计算场景。它允许系统通过添加更多的节点来扩展性能,从而满足不断增长的计算需求。
    • SMP架构适用于对成本敏感且处理器数量相对较少的应用场景。它提供了简化的内存管理和较低的成本,适用于许多常见的服务器和工作站环境。
1.3 NUMA配置及调优
1.3.1 CPU分配策略和内存分配策略

1)CPU分配策略

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

  • cpunodebind:此策略将进程或线程绑定到特定的NUMA节点上的处理器。这可以确保进程在访问内存时具有最低的延迟,因为它主要访问与其绑定的处理器相同的节点上的内存。
  • physcpubind:与cpunodebind类似,但更精细。它允许将进程或线程绑定到特定的物理CPU核心上,而不仅仅是NUMA节点。这提供了更高级别的控制,但也需要更详细的系统知识来进行配置。
  • 自动平衡:一些操作系统和调度器会自动尝试在NUMA节点之间平衡负载,以最大化整体系统吞吐量。这可能会导致单个进程的内存访问延迟增加,但在多进程环境中可能会提高整体性能。

2)内存分配策略

内存分配策略决定了如何在NUMA架构中的不同节点上分配内存。以下是几种常见的内存分配策略:

  • localalloc:此策略优先在请求内存的处理器所在的NUMA节点上分配内存。这最小化了内存访问延迟,但可能导致某些节点上的内存过度使用,而其他节点上的内存则未充分利用。
  • preferred:此策略指定了一个“首选”节点来分配内存,但如果该节点上的内存不足,则允许在其他节点上分配内存。这提供了一定的灵活性,但仍然倾向于优先使用特定节点上的内存。
  • membind:此策略允许用户指定一个或多个NUMA节点,进程只能从这些指定的节点上分配内存。这提供了对内存放置的精确控制,但可能需要用户具有详细的系统知识。
  • interleave:此策略以轮询方式在不同的NUMA节点上分配内存。这有助于平衡节点之间的内存使用,但可能会增加内存访问延迟,因为处理器可能需要访问远离其所在节点的内存。
  • 自动优化:某些操作系统和内存管理器会自动尝试优化内存分配,以在延迟、吞吐量和内存利用率之间找到最佳平衡。这可能需要复杂的算法和持续的系统监控。

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

1.3.2 NUMA架构下进程与CPU绑定

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

  • 内存交叉访问较多:当进程频繁地访问不同NUMA节点上的内存时,会导致较高的内存访问延迟。通过将进程与某个NUMA节点上的CPU绑定,可以减少跨节点的内存访问,从而降低延迟。
  • 缓存命中率较低:如果进程的数据局部性较差,导致缓存命中率较低,那么将进程与CPU绑定可以提高缓存利用率。进程在同一个CPU上运行时,更有可能重用该CPU的缓存中的数据。
  • 需要控制进程运行位置:在某些情况下,可能需要将特定进程运行在特定的CPU或CPU核心上,以满足特定的性能、隔离性或资源管理需求。例如,某些实时应用或高性能计算任务可能需要独占某些CPU核心以确保稳定的性能。
  • 避免NUMA效应:NUMA架构中,访问远地内存的成本高于访问本地内存。通过将进程与CPU绑定,可以尽量减少远地内存的访问,从而避免NUMA效应带来的性能下降。

通过命令numastat可以查看每个NUMA节点的内存分配的统计数据,包括内存分配的成功与失败情况。

#numastat
                           node0           node1
numa_hit                 3620312         3672057
numa_miss                      0               0
numa_foreign                   0               0
interleave_hit             36004           35732
local_node               3608692         3645179
other_node                 11620           26878
  • numa_hit:表示成功在本地节点上分配内存的次数;
  • numa_miss:表示本应在其他节点上分配内存但由于某些原因(如内存不足)而在本地节点上分配的次数;
  • numa_foreign:表示初始分配在本地但最后分配在其他节点的内存页数量
  • local_node和other_node:分别表示本地节点进程和其他节点进程在本节点上分配的内存页数量

当numa_miss和numa_foreign值越高,就要考虑绑定的问题了。通过命令numactl将进程绑定在某个Node或Cores上:

#将进程绑定到某节点上
numactl --cpunodebind=nodes program
#将进程绑定到某Core上
numactl --physcpubind=1,2,3,4  Program

参考资料:

  1. 详谈CPU处理器架构演进(Intel)
  2. https://zhuanlan.zhihu.com/p/677797033
  3. https://www.cnblogs.com/ml2018/articles/12747193.html
  4. https://blog.csdn.net/bandaoyu/article/details/122959097
  5. https://blog.csdn.net/HandsomeHong/article/details/128535279

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1473294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是SSH端口转发?

目录 前言: 一、SSH端口转发的概念 二、SSH端口转发的类型 2.1 本地端口转发 2.2 远程端口转发 2.3 动态端口转发 三、SSH端口转发的用途 3.1 安全远程访问 3.2 跨越网络限制 3.3 加密流量传输 3.4 跨越 NAT 网络 3.5 安全代理 四、总结 前言&#xff…

设计模式浅析(九) ·模板方法模式

设计模式浅析(九) 模板方法模式 日常叨逼叨 java设计模式浅析,如果觉得对你有帮助,记得一键三连,谢谢各位观众老爷😁😁 模板方法模式 概念 模板方法模式(Template Method Pattern)在Java中是…

【MATLAB】VMD_ MFE_SVM_LSTM 神经网络时序预测算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 VMD_MFE_SVM_LSTM神经网络时序预测算法是一种结合了变分模态分解(VMD)、多尺度特征提取(MFE)、支持向量机(SVM)和长…

Java+SpringBoot+Vue+MySQL:美食推荐系统的技术革新

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

启动spark-shell时报错java.lang.NumberFormatException: For input string: “0x100“

一、问题描述 安装完Spark后,启动spark shell时报错 java.lang.NumberFormatException: For input string: "0x100" 如下图: 二、解决办法 1.更换scala的版本 2.更改环境变量 使用vim编辑器打开用户的环境变量配置文件 vim ~/.bashrc s…

解锁财务信任,掌握企业业务合作中的倾听艺术

企业在经营管理过程中,经常会思考如何才能成为一个完美的财务业务融合体,实现业务合作的最大价值。当我们置身于企业战略规划的构建过程中,就会明显的感觉到,获得财务信任有助于指导团队做出重大决策并推动企业未来的行动。市场和…

【蓝桥杯单片机入门记录】动态数码管

目录 一、数码管动态显示概述 二、动态数码管原理图 (1)原理图 (2)动态数码管如何与芯片相连 (3)“此器件” ——>锁存器74HC573 三、动态数码管显示例程 (1)例程1&#xf…

Day02:Web架构前后端分离站Docker容器站集成软件站建站分配

目录 常规化站点部署 站库分离 前后端分离 集成软件搭建Web应用 Docker容器搭建Web应用 建立分配站 静态 与 伪静态 总结 章节知识点: 应用架构:Web/APP/云应用/三方服务/负载均衡等 安全产品:CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗…

react useRef用法

1&#xff0c;保存变量永远不丢失 import React, { useState,useRef } from react export default function App() { const [count,setcount] useState(0) var mycount useRef(0)//保存变量永远不丢失--useRef用的是闭包原理 return( <div> <button onClick{()>…

Linux笔记--硬链接与软链接

一、硬链接 1.inode和block 文件包含两部分数据&#xff1a;文件属性和实际内容&#xff0c;属性放在inode中&#xff0c;实际内容放在data block中。还有个超级区块&#xff08;superblock&#xff09;记录整个文件系统的整体信息&#xff0c;包括inode和block的总量&#x…

%00截断 [GKCTF 2020]cve版签到

打开题目 F12之后在Headers中发现hint 两者结合利用零字符截断使get_headers()请求到本地127.0.0. 结合链接 构造 ?urlhttp://127.0.0.1%00www.ctfhub.com 必须以123结尾 ?urlhttp://127.0.0.123%00www.ctfhub.com 得到flag 知识点&#xff1a; PHP中get_headers函数 g…

合并spark structured streaming处理流式数据产生的小文件

备注&#xff1a; By 远方时光原创&#xff0c;可转载&#xff0c;不能复制到其他平台 背景&#xff1a;做流批一体&#xff0c;湖仓一体的大数据架构&#xff0c;常见的做法就是 数据源->spark Streaming->ODS&#xff08;数据湖&#xff09;->spark streaming->…

如何让网页APP化 渐进式Web应用(PWA)

前言 大家上网应该发现有的网页说可以安装对应应用&#xff0c;结果这个应用好像就是个web&#xff0c;不像是应用&#xff0c;因为这里采用了PWA相关技术。 PWA&#xff0c;全称为渐进式Web应用&#xff08;Progressive Web Apps&#xff09;&#xff0c;是一种可以提供类似…

无法访问云服务器上部署的Docker容器(二)

说明&#xff1a;记录一次使用公网IP 接口地址无法访问阿里云服务接口的问题&#xff1b; 描述 最近&#xff0c;我使用Docker部署了jeecg-boot项目&#xff0c;部署过程都没有问题&#xff0c;也没有错误信息。部署完成后&#xff0c;通过下面的地址访问后端Swagger接口文档…

Facebook的虚拟社交愿景:元宇宙时代的新起点

在当今数字化时代&#xff0c;社交媒体已经成为人们生活中不可或缺的一部分。而随着科技的不断进步和社会的发展&#xff0c;元宇宙已经成为了人们关注的热点话题之一。作为社交媒体的领军企业之一&#xff0c;Facebook也在积极探索虚拟社交的未来&#xff0c;将其视为元宇宙时…

微服务-微服务链路追踪组件Skywalking实战

自动化监控系统Prometheus&Grafana实战&#xff1a; 4 trem APM-性能监控项目班&#xff1a; https://vip.tulingxueyuan.cn/detail/p_602e574ae4b035d3cdb8f8fe/6 1. skywalking是什么 1.1 Skywalking主要功能特性 1.2 Skywalking整体架构 1.3 SkyWalking 环境搭建部…

【Linux C | 网络编程】套接字选项、getsockopt、setsockopt详解及C语言例子

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

Prompt 编程的优化技巧

一、为什么要优化 一&#xff09;上下文限制 目前 GPT-3.5 以及 GPT-4最大支持 16K 上下文&#xff0c;比如你输入超过 16k 的长文本&#xff0c;ChatGPT 会提示文本过大&#xff0c;为了避免 GPT 无法回复&#xff0c;需要限制 上下文在16k 以内 上下文对于 GPT 来说是非常重…

【Java代码审计】SSRF

什么是SSRF&#xff1f; SSRF(Server-Side Request Forge, 服务端请求伪造) &#xff0c;即攻击者构造恶意参数使服务端对其它内/外网系统进行访问或者攻击的一种方式。 Java支持的网络请求协议&#xff1a; file ftp http https gopher(jdk≤1.7) jar netdoc mailto SSRF代码…

接口的定义与实现方法

作用&#xff1a; 约束 定义一些方法&#xff0c;让不同的人实现 public abstract piblic static final 接口不能被实例化&#xff0c;接口中没有构造方法 implements可以实现多个接口 必须要重写接口中的方法~