问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

NUMA架构入门

创作时间:
作者:
@小白创作中心

NUMA架构入门

引用
CSDN
1.
https://blog.csdn.net/2404_84768005/article/details/145537075

NUMA是什么?

NUMA是Non-Uniform Memory Access(非统一内存访问)的缩写,它指的是一种架构,在这种架构中,每个处理器访问内存的速度并不相同。每个处理器可以快速访问与其物理上接近的本地内存(Local Memory),但访问其他处理器的远程内存(Remote Memory)时速度会相对较慢。

过去的多处理器系统基于对称多处理(Symmetric Multi-Processing, SMP)或统一内存架构(Uniform Memory Architecture, UMA)设计,在这种设计中,所有处理器共享单一内存池,因此会出现总线带宽和缓存一致性(Coherency)问题,导致性能瓶颈。NUMA通过为每个处理器提供本地内存,并仅在必要时访问远程内存,解决了这些问题,是一种高度可扩展的架构。这种解决缓存一致性问题的NUMA架构也被称为Cache-Coherent NUMA,即ccNUMA。在大规模系统中,NUMA在扩展性和性能方面更具优势,但在小型系统中,UMA可能更高效。

为了更好地理解NUMA,可以参考以下内容:

简单总结一句话!

  • 处理器(Processor):执行指令并进行运算的设备。
  • 本地内存(Local Memory):直接连接到处理器的内存 -> 可以快速访问!
  • 远程内存(Remote Memory):属于其他NUMA节点的内存,需通过互连(Interconnect)访问 -> 相对较慢!
  • 互连(InterConnect):用于在NUMA节点之间传输数据的链路,在访问远程内存时会产生延迟。

这是Christoph Lameter的《An Overview of Non-Uniform Memory Access (NUMA)》论文。在阅读本文之前,需要了解NUMA节点的概念:

在NUMA中,节点(Node)指的是一个CPU插槽及其连接的内存块。这篇论文主要分为两大部分:操作系统中的NUMA内存管理方式和NUMA内存策略(Memory Policies)。但在那之前,我们需要了解NUMA节点的概念。


(NUMA架构 - Intel官网来源)

一个NUMA节点 = CPU + 本地内存 + 内存控制器

  • 每个NUMA节点可以快速访问自己的内存,但访问其他NUMA节点的内存时速度较慢。也就是说,NUMA架构将单一内存池划分为多个称为“节点”的部分进行管理!


(具有两个NUMA节点和八个处理器的系统示例)

操作系统如何处理NUMA?

本文将操作系统处理NUMA的方式分为五大类:

  1. 操作系统忽略NUMA节点差异
    -> 操作系统不考虑NUMA节点的差异,将所有内存视为相同的方式处理。这种方式通常用于不需要NUMA优化的传统系统和小型应用程序。

  2. 硬件内存条纹化(Memory Striping in Hardware)
    -> 通过更改内存地址映射,在各个节点之间分散内存访问。优点是操作系统无需支持NUMA。但问题是缓存行可能会分布在多个NUMA节点上,因此始终需要使用远程内存。也就是说,强制使用互连会导致开销增加。

  3. 启发式内存分配(Heuristic Memory Placement)
    -> 操作系统识别NUMA并自动优化性能的方式。这通常是现代操作系统支持的功能。将进程运行节点的本地内存优先分配给该进程!不过,如果程序员错误地估算节点内的内存,则不可避免地需要使用远程内存。

  4. 操作系统为特定应用程序设置NUMA(Special NUMA Configuration for Applications)
    -> 操作系统提供选项,允许手动指定特定应用程序的NUMA内存分配。通过手动微调NUMA节点来调整性能。

  5. 应用程序直接控制NUMA(Application-Controlled NUMA Allocations)
    -> 应用程序不遵循操作系统的默认NUMA策略,而是直接指定内存分配。应用程序直接管理NUMA意味着性能的提升或下降取决于程序员的能力。

本文主要通过Linux命令解释NUMA内存策略和管理方式,但作者仅提取了基本概念进行说明。

NUMA内存策略与管理方式

  • NODE LOCAL(节点本地)
    -> 进程优先从当前CPU节点的内存中分配,这是最基本的方式。

  • INTERLEAVE(交错)
    -> 以轮询方式将内存分配到多个节点。

  • Reclaim(内存回收)
    -> 在内存不足时释放未使用的页面。

什么是页面(Page)?
页面是操作系统管理内存的最小单位。当进程分配内存时,操作系统以“页面”为单位进行管理。通常页面大小约为4KB(4096字节)。

本文主要介绍Linux中的NUMA管理方法,但Windows也在微软学习中心和各种书籍中提供了NUMA概念和API。一般来说,Windows和Linux在NUMA上的区别如下:

操作系统
Linux
Windows
NUMA策略应用
numactl内核设置
Windows API (GetNumaNodeProcessorMask)
默认内存策略
NODE LOCAL(默认) INTERLEAVE(内核)
NODE LOCAL
NUMA感知调度器
支持NUMA感知的CPU和内存分配
支持NUMA感知调度
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号