什么是非统一内存访问(NUMA)?
非均匀内存访问(NUMA)是一种用于多处理器系统的计算机内存设计,其特点是内存访问时间取决于内存位置相对于处理器的位置。在NUMA架构中,每个处理器都有自己的本地内存。虽然它也可以访问连接到其他处理器的内存,但由于需要穿越互连网络并可能经过其他处理器,这种访问速度较慢,从而引入了额外的延迟和带宽争用。
NUMA 的开发旨在解决传统对称多处理 (SMP) 系统的可扩展性限制,在传统 SMP 系统中,所有处理器共享同一个内存池。NUMA 通过将内存分组到更靠近每个处理器的位置,提高了内存访问效率和整体性能,尤其是在拥有大量中央处理器(CPU) 或核心的系统中。
现代操作系统和针对 NUMA 架构优化的应用程序能够以一种将数据保留在执行计算的处理器附近的方式来分配内存,从而最大限度地减少延迟并提高吞吐量。NUMA 通常用于服务器、高性能计算 (HPC) 系统以及需要大量内存和计算资源的企业级工作负载。
NUMA 的工作原理是什么?
在NUMA系统中,架构被划分为多个节点。每个节点包含一个或多个处理器(或CPU插槽)以及其自身的专用内存。这些节点相互互连,使得处理器能够访问本地内存和远程内存。
访问本地内存(物理上连接到同一节点的内存)速度更快,延迟更低。当处理器访问远程内存(位于不同节点上的内存)时,由于节点间的互连路径,会产生额外的延迟。这种延迟差异正是NUMA“非均匀”特性的体现。
现代NUMA系统依赖于系统固件、操作系统和应用程序的NUMA感知能力。NUMA感知软件会尝试以一种能够将任务及其内存集中在同一节点上的方式来分配内存和调度进程。这可以减少跨节点内存流量并优化性能。
NUMA 通常应用于具有两个或多个 CPU 插槽的系统中,例如服务器和高性能计算平台。每个插槽都有自己的内存控制器和本地动态随机存取存储器 (DRAM),并通过系统互连(例如 Intel® 芯片)进行连接。 Ultra 路径互连(UPI)或AMD Infinity Fabric,连接插槽并在需要时允许访问远程内存。
NUMA 和系统架构设计
随着多路系统在现代化数据中心和企业基础设施中日益普及,了解NUMA对系统架构的影响至关重要。硬件供应商在设计服务器主板和CPU互连时会充分考虑NUMA拓扑结构,以确保处理器和内存模块之间实现最佳数据路径。这会直接影响应用程序性能,尤其对于那些需要跨多个核心和插槽进行横向扩展的工作负载而言更是如此。
设计考虑因素还包括内存分配规则、BIOS 级 NUMA 配置设置以及组件的物理布局。系统架构师必须考虑应用程序如何与内存和计算资源交互,以确保硬件性能得到充分利用。硬件配置优化不足会导致 NUMA 性能欠佳,例如远程内存访问过多和延迟增加。
NUMA系统的软件优化
为了使NUMA发挥其全部性能潜力,软件必须经过设计,或者至少进行配置,以感知底层内存拓扑结构。例如,操作系统…… Linux 和Windows 服务器包含内核级的 NUMA 支持,从而启用处理器亲和性、内存绑定和 NUMA 感知调度等功能。这些机制有助于确保线程被调度到能够快速访问其最常用内存区域的 CPU 上。
应用程序开发人员和系统管理员可以通过利用 NUMA 特有的 API 和调优实践来进一步提升性能。并行编程框架(例如 OpenMP 和 MPI)提供了控制线程放置和内存局部性的选项。对于企业级和高性能计算 (HPC) 工作负载,这种级别的优化可以显著降低内存延迟并提高吞吐量,尤其是在内存占用量大的多路系统上运行时。
NUMA 应用案例及优势
NUMA 为需要高并行性和大内存占用的工作负载提供性能优势。通过减少跨节点内存访问并更好地利用可用带宽,NUMA 增强了可扩展性,并有助于消除多路架构中的瓶颈。
高性能计算(HPC)
在高性能计算中,科学模拟、建模和大规模数据分析工作负载受益于 NUMA,因为它能减少跨多个 CPU 插槽的内存访问延迟。
虚拟化平台
可以对虚拟机管理程序和虚拟机进行优化,使其使用 NUMA 感知调度,从而确保虚拟 CPU 及其内存保持在同一物理节点上。
内存数据库
NUMA 有助于在将大量数据直接存储在 RAM 中的数据库系统中保持低延迟内存访问。
大型企业应用
NUMA 提高了企业软件(例如企业资源计划 ( ERP ) 系统)的响应速度和吞吐量,这些软件需要访问跨多个内核的大型内存空间。
常见问题
- 什么是NUMA聚类?
NUMA集群是指在支持NUMA架构的系统中,将处理器和内存组织成节点或集群。每个集群都有自己的本地内存,集群内的处理器可以以更低的延迟访问这些内存。这种架构通过减少对共享内存资源的争用,提高了性能和可扩展性。 - 什么是NUMA拓扑结构?
NUMA拓扑结构描述了系统中CPU、内存和互连的物理和逻辑排列方式。它定义了哪些处理器连接到哪些内存区域,以及节点之间如何进行访问。了解系统的拓扑结构有助于优化内存分配和应用程序性能。 - NUMA 对虚拟化重要吗?
是的,NUMA 在虚拟化中扮演着至关重要的角色,它有助于确保虚拟机内存和 CPU 的最佳配置。当虚拟机管理程序支持 NUMA 时,它可以将虚拟 CPU 及其关联的内存保留在同一个物理节点内,从而降低延迟并避免性能损失。 - 如何在系统上启用NUMA?
现代服务器平台通常默认启用 NUMA 支持。在某些情况下,可能需要在系统 BIOS 或 UEFI 设置中手动激活。启用后,系统会将 NUMA 拓扑结构暴露给操作系统,以便优化调度和内存分配。 - 如果软件不支持NUMA会发生什么?
如果软件不支持NUMA架构,则跨节点访问内存的效率可能会降低,从而导致更高的延迟和更低的性能。这在具有大型内存池的多路系统中,尤其是在高负载情况下,可能会成为性能瓶颈。