NUMA 架构详解
NUMA(Non-Uniform Memory Access,非统一内存访问) 是一种多处理器系统的内存设计架构,旨在解决多处理器系统中内存访问延迟不一致的问题。与传统的 UMA(Uniform Memory Access,统一内存访问)架构不同,NUMA 架构中每个处理器访问不同内存区域的速度可能不同。以下是 NUMA 架构的详细介绍,包括架构细节、CPU 和内存的组合方式、缓存层次、涉及的硬件及其作用,以及 NUMA 架构的优势和原因。
1. NUMA 架构的基本概念
-
NUMA 节点(NUMA Node):
-
一个 NUMA 节点通常由一个或多个 CPU 核心(Processor Cores)和与之直接连接的本地内存(Local Memory)组成。
-
每个 NUMA 节点可以独立运行,拥有自己的内存控制器和内存通道。
-
多个 NUMA 节点通过高速互联网络(如 Intel 的 QPI 或 AMD 的 Infinity Fabric)连接。
-
-
本地内存(Local Memory):
- 每个 NUMA 节点的内存是其本地内存,访问速度最快,延迟最低。
-
远程内存(Remote Memory):
- 当一个 NUMA 节点访问另一个 NUMA 节点的内存时,需要通过互联网络,访问速度较慢,延迟较高。
-
内存访问延迟的不一致性:
- 在 NUMA 架构中,内存访问延迟取决于内存的位置。本地内存访问速度快,远程内存访问速度慢,因此称为"非统一内存访问"。
2. NUMA 架构的细节
(1)CPU 和内存的组合方式
-
多处理器系统:
-
NUMA 架构通常用于多处理器系统,每个处理器(或处理器组)与一部分内存直接相连。
-
例如,一个系统可能有 2 个 NUMA 节点,每个节点包含 16 个 CPU 核心和 64GB 本地内存,总内存为 128GB。
-
-
内存控制器:
-
每个 NUMA 节点有自己的内存控制器,负责管理本地内存的访问。
-
内存控制器直接连接到 CPU 和本地内存,减少了访问延迟。
-
-
互联网络:
-
NUMA 节点之间通过高速互联网络(如 Intel 的 QPI、AMD 的 Infinity Fabric 或 PCIe)连接。
-
当一个 NUMA 节点需要访问另一个节点的内存时,数据通过互联网络传输。
-
(2)缓存层次(Cache Hierarchy)
-
L1 缓存:
-
每个 CPU 核心有自己的 L1 缓存,分为指令缓存(L1-I)和数据缓存(L1-D)。
-
L1 缓存速度最快,容量最小,通常为几十 KB。
-
-
L2 缓存:
-
每个 CPU 核心或一组核心共享 L2 缓存。
-
L2 缓存速度比 L1 缓存稍慢,容量较大,通常为几百 KB 到几 MB。
-
-
L3 缓存:
-
每个 NUMA 节点内的所有 CPU 核心共享 L3 缓存。
-
L3 缓存速度比 L2 缓存慢,容量最大,通常为几十 MB。
-
L3 缓存在 NUMA 架构中起到重要作用,可以减少对内存的访问次数,尤其是远程内存访问。
-
(3)内存访问路径
-
本地内存访问:
- CPU 访问本地内存时,数据直接通过内存控制器读取或写入,延迟低,带宽高。
-
远程内存访问:
- CPU 访问远程内存时,数据需要通过互联网络传输到目标 NUMA 节点,延迟较高,带宽较低。
(4)NUMA 拓扑结构
-
NUMA 架构的拓扑结构可以是多种形式,例如:
-
对称 NUMA:所有 NUMA 节点之间的互联延迟相同。
-
非对称 NUMA:某些 NUMA 节点之间的互联延迟可能比其他节点更高。
-
3. NUMA 架构涉及的硬件及其作用
(1)CPU 核心(Processor Cores)
-
作用:执行计算任务。
-
特点:每个核心有自己的 L1 和 L2 缓存,核心之间通过共享的 L3 缓存和内存控制器访问内存。
(2)内存控制器(Memory Controller)
-
作用:管理 CPU 对内存的访问。
-
特点:每个 NUMA 节点有自己的内存控制器,负责本地内存的访问。
(3)高速缓存(Cache)
-
L1 缓存:最快但容量最小,用于存储核心最常用的指令和数据。
-
L2 缓存:速度较快,容量较大,用于存储核心或核心组的常用数据。
-
L3 缓存:速度较慢但容量最大,用于存储 NUMA 节点内所有核心的共享数据,减少对内存的访问。
(4)互联网络(Interconnect)
-
作用:连接多个 NUMA 节点,实现节点之间的数据传输。
-
特点:高速互联网络(如 Intel 的 QPI、AMD 的 Infinity Fabric)决定了远程内存访问的延迟和带宽。
(5)内存(Memory)
-
本地内存:每个 NUMA 节点的本地内存,访问速度快。
-
远程内存:其他 NUMA 节点的内存,访问速度较慢。
4. NUMA 架构的优势
(1)扩展性
-
NUMA 架构支持更多的处理器和更大的内存容量。
-
每个 NUMA 节点可以独立扩展,系统可以通过增加 NUMA 节点来提升计算能力和内存容量。
(2)性能优化
-
数据局部性:
-
NUMA 架构通过将任务和数据分配到本地内存,减少了远程内存访问的次数,从而降低了内存访问延迟。
-
操作系统和应用程序可以通过 NUMA 感知的调度策略,优化任务和数据的分布。
-
-
高带宽:
- 每个 NUMA 节点有自己的内存通道,多个节点可以并行访问内存,提高了整体内存带宽。
(3)资源隔离
- NUMA 架构可以将任务和内存资源隔离到不同的 NUMA 节点,减少资源竞争,提高系统稳定性。
5. NUMA 架构优势的原因
(1)内存访问延迟的优化
-
在传统的 UMA 架构中,所有处理器共享同一个内存池,随着处理器数量的增加,内存访问竞争加剧,导致延迟增加。
-
NUMA 架构通过将内存分布到多个节点,减少了内存访问竞争,降低了延迟。
(2)带宽的提升
-
每个 NUMA 节点有自己的内存通道,多个节点可以并行访问内存,提高了整体内存带宽。
-
在 UMA 架构中,所有处理器共享有限的内存带宽,容易成为性能瓶颈。
(3)扩展性的提升
- NUMA 架构通过增加 NUMA 节点来扩展系统,避免了 UMA 架构中总线带宽和内存控制器的瓶颈问题。
6. NUMA 架构的应用场景
-
高性能计算(HPC):
- NUMA 架构适合需要大量内存和计算资源的科学计算、气象模拟等场景。
-
大型数据库系统:
- 数据库系统(如 OLAP、数据仓库)通常需要处理大量数据,NUMA 架构可以优化内存访问性能。
-
虚拟化环境:
- 在云计算和数据中心中,NUMA 架构可以优化虚拟机的资源分配,提高虚拟化性能。
7. NUMA 架构的挑战
-
编程复杂性:
- 开发者需要显式管理数据局部性,增加了编程难度。
-
负载均衡:
- 任务分配需要兼顾 NUMA 节点的计算能力和内存访问延迟,避免性能瓶颈。
-
操作系统支持:
- 操作系统需要提供 NUMA 感知的调度和内存分配策略,以充分发挥 NUMA 架构的优势。
总结
NUMA 架构通过将内存分布到多个节点,解决了多处理器系统中的内存访问瓶颈问题,提升了系统的扩展性和性能。其优势主要体现在内存访问延迟的优化、带宽的提升和扩展性的增强。尽管 NUMA 架构在编程和负载均衡方面存在挑战,但在高性能计算、大型数据库和虚拟化环境中,NUMA 架构表现出色。通过操作系统、应用程序和硬件的协同优化,可以充分发挥 NUMA 架构的优势。
NUMA架构中的本地内存是指L1、L2、L3 cache缓存还是RAM
在 NUMA(Non-Uniform Memory Access)架构 中,本地内存 并不是指 CPU 的 L1、L2 或 L3 缓存,而是指与某个 NUMA 节点直接连接的 物理内存(DRAM)。缓存(L1、L2、L3)和本地内存是两个不同的概念,它们在 NUMA 架构中扮演不同的角色。以下是对这些概念的详细解释:
1. 本地内存(Local Memory)
-
定义:
-
本地内存是指与某个 NUMA 节点直接连接的 物理内存(DRAM)。
-
每个 NUMA 节点都有自己的本地内存,由该节点的内存控制器管理。
-
本地内存的访问延迟最低,带宽最高,因为数据不需要通过互联网络传输。
-
-
位置:
-
本地内存位于 SoC(System on Chip)之外,通常是主板上的 DRAM 模块。
-
例如,在一个双路服务器中,每个 CPU 插槽(Socket)连接一部分 DRAM,这部分 DRAM 就是该 CPU 的本地内存。
-
-
作用:
-
本地内存用于存储操作系统和应用程序的数据。
-
在 NUMA 架构中,操作系统和应用程序会尽量将数据分配到本地内存,以减少访问延迟。
-
2. 缓存(Cache)
缓存是 CPU 内部的高速存储器,用于加速对内存数据的访问。缓存分为三级:L1、L2 和 L3。
-
L1 缓存:
-
每个 CPU 核心独享的缓存,分为指令缓存(L1-I)和数据缓存(L1-D)。
-
速度最快,容量最小(通常为几十 KB)。
-
用于存储核心最常用的指令和数据。
-
-
L2 缓存:
-
每个 CPU 核心或一组核心共享的缓存。
-
速度比 L1 缓存稍慢,容量较大(通常为几百 KB 到几 MB)。
-
用于存储核心或核心组的常用数据。
-
-
L3 缓存:
-
所有 CPU 核心共享的缓存,通常在一个 NUMA 节点内共享。
-
速度比 L2 缓存慢,但容量最大(通常为几十 MB)。
-
用于存储 NUMA 节点内所有核心的共享数据,减少对内存的访问。
-
-
缓存的作用:
-
缓存用于减少 CPU 访问内存的次数,从而降低内存访问延迟。
-
在 NUMA 架构中,缓存的作用尤为重要,因为它可以减少对远程内存的访问。
-
3. 本地内存与缓存的关系
-
缓存是 CPU 内部的高速存储器 ,而 本地内存是外部的物理内存(DRAM)。
-
缓存用于加速对内存数据的访问,而本地内存是实际存储数据的地方。
-
当 CPU 需要访问数据时,会首先检查缓存(L1 → L2 → L3),如果缓存中没有所需数据(缓存未命中),才会访问本地内存或远程内存。
4. SoC 上的内存
-
SoC(System on Chip) 是一种将 CPU、内存控制器、I/O 接口等集成在一个芯片上的设计。
-
在 SoC 中,内存控制器通常集成在芯片上,但 物理内存(DRAM) 仍然位于芯片外部。
-
因此,本地内存 是指与 SoC 上的内存控制器直接连接的物理内存,而不是 SoC 内部的缓存。
缓存、RAM、ROM分别是什么
在计算机系统中,缓存(Cache) 、RAM(Random Access Memory,随机存取存储器) 和 ROM(Read-Only Memory,只读存储器) 是三种常见的内存类型,它们在系统中扮演不同的角色。除此之外,还有其他一些常见的内存类型。以下是它们的详细介绍:
1. 缓存(Cache)
-
定义:
-
缓存是一种高速存储器,用于存储 CPU 频繁访问的数据和指令,以减少访问主内存(RAM)的次数。
-
缓存通常集成在 CPU 内部,速度远快于主内存。
-
-
特点:
-
速度快:缓存的访问速度比 RAM 快得多,通常以纳秒(ns)为单位。
-
容量小:缓存的容量远小于 RAM,通常为几 KB 到几十 MB。
-
层级结构:现代 CPU 通常有多级缓存(L1、L2、L3),L1 最快但容量最小,L3 最慢但容量最大。
-
-
作用:
- 缓存用于加速 CPU 对数据的访问,减少 CPU 等待数据的时间,从而提高系统性能。
2. RAM(Random Access Memory,随机存取存储器)
-
定义:
-
RAM 是计算机的主内存,用于临时存储正在运行的程序和数据。
-
RAM 是易失性存储器,断电后数据会丢失。
-
-
特点:
-
速度快:RAM 的访问速度比 ROM 快,但比缓存慢。
-
容量大:RAM 的容量通常为几 GB 到几百 GB。
-
随机访问:可以随机访问任意地址的数据,访问时间与数据位置无关。
-
-
类型:
-
DRAM(Dynamic RAM,动态随机存取存储器):
- 需要定期刷新以保持数据,速度较慢但成本低,常用于主内存。
-
SRAM(Static RAM,静态随机存取存储器):
- 不需要刷新,速度快但成本高,通常用于缓存。
-
-
作用:
- RAM 用于存储操作系统、应用程序和用户数据,是计算机运行时的主要工作区域。
3. ROM(Read-Only Memory,只读存储器)
-
定义:
-
ROM 是一种非易失性存储器,用于存储固件或永久性数据。
-
数据在出厂时写入,通常不能修改或只能通过特殊方式修改。
-
-
特点:
-
非易失性:断电后数据不会丢失。
-
只读性:数据通常只能读取,不能随意写入。
-
速度较慢:ROM 的访问速度比 RAM 慢。
-
-
类型:
-
PROM(Programmable ROM,可编程只读存储器):
- 出厂后可以通过特殊设备写入数据,但只能写入一次。
-
EPROM(Erasable Programmable ROM,可擦除可编程只读存储器):
- 可以通过紫外线擦除并重新写入数据。
-
EEPROM(Electrically Erasable Programmable ROM,电可擦除可编程只读存储器):
- 可以通过电信号擦除并重新写入数据。
-
Flash Memory(闪存):
- 一种特殊的 EEPROM,广泛应用于 U 盘、SSD 和嵌入式系统中。
-
-
作用:
- ROM 用于存储固件(如 BIOS、UEFI)和嵌入式系统的程序代码。
4. 其他常见的内存类型
(1)虚拟内存(Virtual Memory)
-
定义:
- 虚拟内存是一种内存管理技术,通过将部分数据存储到磁盘(如硬盘或 SSD)来扩展可用内存。
-
作用:
-
当物理内存(RAM)不足时,操作系统会将不常用的数据转移到磁盘,腾出空间给当前运行的程序。
-
虚拟内存使得程序可以使用比物理内存更大的地址空间。
-
(2)显存(Video RAM,VRAM)
-
定义:
- 显存是显卡上的专用内存,用于存储图形数据(如纹理、帧缓冲区)。
-
特点:
-
显存通常比主内存更快,专为图形处理优化。
-
常见的显存类型包括 GDDR(Graphics Double Data Rate)和 HBM(High Bandwidth Memory)。
-
-
作用:
- 显存用于加速图形渲染和显示输出,是游戏和图形设计等应用的关键。
(3)寄存器(Register)
-
定义:
- 寄存器是 CPU 内部的高速存储器,用于存储指令、地址和临时数据。
-
特点:
-
速度最快,容量最小(通常为几十到几百字节)。
-
寄存器直接参与 CPU 的运算和控制。
-
-
作用:
- 寄存器用于存储 CPU 当前正在处理的数据和指令,是 CPU 运行的核心部分。
(4)非易失性存储器(Non-Volatile Memory,NVM)
-
定义:
- 非易失性存储器是一种断电后数据不会丢失的存储器。
-
类型:
-
NAND Flash:用于 SSD、U 盘和存储卡。
-
NOR Flash:用于嵌入式系统和固件存储。
-
3D XPoint:一种新型非易失性存储器,速度接近 DRAM,用于高性能存储设备(如 Intel 的 Optane)。
-
-
作用:
- 非易失性存储器用于长期存储数据和程序。
5. 内存的层级结构
计算机系统中的内存通常按速度和容量分为多个层级,从快到慢依次为:
-
寄存器:速度最快,容量最小。
-
缓存(L1、L2、L3):速度较快,容量较小。
-
主内存(RAM):速度较慢,容量较大。
-
虚拟内存(磁盘):速度最慢,容量最大。
这种层级结构通过将频繁访问的数据存储在速度更快的存储器中,优化了系统的整体性能。
总结
-
缓存:高速存储器,用于加速 CPU 对数据的访问。
-
RAM:主内存,用于临时存储运行中的程序和数据。
-
ROM:只读存储器,用于存储固件和永久性数据。
-
其他内存:包括虚拟内存、显存、寄存器和非易失性存储器等,各自在系统中扮演不同的角色。
这些内存类型共同协作,构成了计算机系统的存储层次结构,确保了系统的高效运行。