NUMA(Non-Uniform Memory Access
Architecture)系统在市场上的应用越来越广泛,许多厂商都成功推出了基于 NUMA 架构的服务器,本文重点讨论了当前 Linux 的 NUMA
技术,主要包括:存储管理、NUMA 调度和用户层的 API,并在 SGI 的 Altix 350 系统上进行了 NUMA 基本测试,对进行 Linux NUMA
技术的研究具有参考价值。
一、引言
随着科学计算、事务处理对计算机性能要求的不断提高,SMP(对称多处理器)系统的应用越来越广泛,规模也越来越大,但由于传统的 SMP
系统中,所有处理器都共享系统总线,因此当处理器的数目增大时,系统总线的竞争冲突加大,系统总线将成为瓶颈,所以目前 SMP 系统的 CPU
数目一般只有数十个,可扩展能力受到极大限制。NUMA 技术有效结合了 SMP 系统易编程性和 MPP(大规模并行)系统易扩展性的特点,较好解决了 SMP
系统的可扩展性问题,已成为当今高性能服务器的主流体系结构之一。目前国外著名的服务器厂商都先后推出了基于 NUMA 架构的高性能服务器,如 HP 的
Superdome、SGI 的 Altix 3000、IBM 的 x440、NEC 的 TX7、AMD 的Opteron 等。随着 Linux
在服务器平台上的表现越来越成熟,Linux 内核对 NUMA 架构的支持也越来越完善,特别是从 2.5 开始,Linux 在调度器、存储管理、用户级 API
等方面进行了大量的 NUMA 优化工作,目前这部分工作还在不断地改进,如新近推出的 2.6.7-RC1 内核中增加了 NUMA
调度器。本文主要从存储管理、调度器和 CpuMemSets 三个方面展开讨论。
二、NUMA 存储管理
NUMA
系统是由多个结点通过高速互连网络连接而成的,如图 1 是 SGI Altix 3000 ccNUMA
系统中的两个结点。
图 1 SGI Altix3000 系统的两个结点
NUMA 系统的结点通常是由一组 CPU(如,SGI Altix 3000 是 2
个Itanium2
CPU)和本地内存组成,有的结点可能还有I/O子系统。由于每个结点都有自己的本地内存,因此全系统的内存在物理上是分布的,每个结点访问本地内存和访问其它结点的远地内存的延迟是不同的,为了减少非一致性访存对系统的影响,在硬件设计时应尽量降低远地内存访存延迟(如通过
Cache 一致性设计等),而操作系统也必须能感知硬件的拓扑结构,优化系统的访存。
目前
IA64 Linux 所支持的 NUMA 架构服务器的物理拓扑描述是通过 ACPI(Advanced Configuration and Power
Interface)实现的。ACPI 是由 Compaq、Intel、Microsoft、Phoenix 和 Toshiba 联合制定的 BIOS
规范,它定义了一个非常广泛的配置和电源管理,目前该规范的版本已发展到 2.0,3.0 版本正在制定中,具体信息可以从 http://www.acpi.info
网站上获得。ACPI 规范也已广泛应用于 IA-32 架构的至强服务器系统中。
网友评论