Skip to content

03 数据中心服务器的 NUMA 架构 CPU

数据中心服务器多处理器设计

数据中心处理器通常有多个 CPU,其主要目的是提高处理能力可靠性

  • 处理能力:多 CPU 系统的并行计算能力更强,能够显著提升数据中心内计算密集型任务的性能
  • 可靠性:多 CPU 设计能够提升系统的可靠性,避免单个处理器发生故障导致的系统崩溃
  • 外设效能:通过多处理器共享电源模块、风扇模块等,降低了单处理器系统的硬件资源成本

多处理器系统

多处理器系统(Multi Processor Systems)一种计算机系统,其中有两个或多个中央处理单元(CPU)共享系统内存和其他资源,以便同时执行多个任务或程序。

  • SMP(Symmetric Multi Processing),对称多处理系统
    • 任一处理器访问任一内存位置,其访问速度相同
  • NUMA(Non-unifor mmemory access),非一致性处理模型
    • 分本地内存和远程内存,访问本地内存速度高于远程内存

SMP 架构

580066f9-e376-43ae-a2c9-ca540fe1506f

  • SMP 服务器的主要特征是共享,每个 CPU 通过系统总线访问共享内存和 lO 设备,资源对于每个 CPU 平等
  • SMP 服务器中每个 CPU 均通过相同的内存总线访问相同的内存资源;随着 CPU 数量的增加,内存访问冲突增加,最终造成 CPU 效能的降低
  • SMP 系统在 2-4 个 CPU 时性能较优,适用于小型服务器

NUMA 架构

848a0460-d270-46af-a761-780026a31b5f

  • 无总线资源竞争问题,具有良好的扩展性单服务器内可配置数十甚至上百个 CPU
  • 访问远端内存的延时远超过本地内存,因此系统性能无法随 CPU 数量线性扩展
  • 数据中心服务器较为普遍的是 NUMA 机构服务器
  • 进程 NUMA 绑定是程序性能优化的重要手段之一

简介

  • NUMA(非统一内存访问,Non-Uniform Memory Access)架构是一种用于提高多处理器系统性能的内存设计。它允许处理器更高效地访问局部内存,同时仍能访问远程内存。NUMA 在数据中心服务器中非常重要,因为它优化了内存和处理器的使用,减少了延迟并提高了系统的总体性能。
  • NUMA 是一种内存设计方法,用于多处理器系统,其中内存被分成多个区域,每个区域直接连接到一个或多个处理器。这些区域被称为“节点”,每个节点包含处理器、局部内存和 I/O 资源。在 NUMA 系统中,处理器访问其本地节点的内存速度更快,而访问远程节点的内存速度较慢。

架构基本概念

  • 在 NUMA 系统中,物理内存被划分成多个节点(Nodes)。每个节点包括一个或多个处理器(CPU)和本地内存(Local Memory)。
  • 每个处理器节点对其本地内存的访问速度要快于对其他节点内存的访问,这就是“非一致性”访问的来源。

NUMA 架构的组成

  • 处理器节点:每个节点包含一组处理器核心、本地内存和可能的 I/O 设备。
  • 节点间连接:节点之间通过互连网络连接,允许处理器核心访问其他节点的内存。
  • 内存控制器:每个节点通常有一个或多个内存控制器,负责管理该节点的内存访问。

内存访问模式

  • 本地内存访问:处理器访问其本地内存,延迟较低。
  • 远程内存访问:处理器访问非本地内存(即其他节点的内存),延迟较高,但通常可以通过高速互联(如 QPI、UCI)进行优化。
  • 节点之间的互连:节点通过高速互连总线连接,如 Intel 的 QuickPath Interconnect(QPI)或 AMD 的 HyperTransport。

优势

  • 扩展性:NUMA 架构可以通过增加处理器和内存节点来扩展系统性能,而不会像对称多处理(SMP)系统那样遇到瓶颈。
  • 性能优化:通过优化数据在本地节点的存储和访问,可以显著提高系统的整体性能。

挑战

  • 编程复杂性:开发人员需要特别注意内存分配和线程调度,以最大限度地减少远程内存访问的影响。
  • 操作系统支持:操作系统需要支持 NUMA 架构,并能有效管理内存和处理器的分配。

操作系统和编程支持

  • 操作系统:现代操作系统,如 Linux 和 Windows Server,提供了对 NUMA 的支持,包括 NUMA-aware 调度和内存管理。
  • 编程模型:编程语言和库,如 OpenMP 和 Intel Threading Building Blocks(TBB),通常会提供对 NUMA 的支持,以帮助程序员优化性能。

实际应用

  • 数据中心:在数据中心环境中,NUMA 架构帮助处理大规模的计算任务和数据存储,优化了多处理器系统的性能。
  • 虚拟化:虚拟化技术允许多个虚拟机(VM)共享物理服务器资源,NUMA 架构支持虚拟机的高效内存和处理器资源分配,提高虚拟化性能。
  • 高性能计算(HPC):HPC 应用通常需要大量计算和内存资源,NUMA 架构可以提供更好的性能和扩展性。
  • 数据库和大数据处理:数据库和大数据处理需要大量的内存和计算资源,NUMA 架构可以提供更高的内存访问速度和计算效率。

NUMA、Node 和 Socket

  • Socket:单个物理 CPU 称为一个 Socket
  • NUMA:
    • 一般单个 CPU 只有一个 NUMA;服务器上多 CPU 构成了多 NUMA 结构
    • 部分 ARM 处理器,单个物理 CPU 上可能包含多个 NUMA 节点
  • Node:单个 NUMA 节点称为一个 Node

服务器 NUMA 信息查看

bash
# 工具安装 (以CentOS 7.6为例)
yum install -y numactl

# 服务器 NUMA 信息查看
numactl -H

# 不借助工具查看
cat /proc/cpuinfo | grep "physical id" | uniq
lscpu | grep "NUMA node(s):"
bash
  ~ numactl -H
available: 1 nodes (0)
node 0 cpus: 0 1 2 3
node 0 size: 3658 MB
node 0 free: 600 MB
node distances:
node   0
  0:  10