扩展 Linux 的新高度:SGI Altix 3000 系统
SGI 最近推出了其新的 64 位、64 处理器、基于英特尔安腾 2 处理器的 Linux 系统——这对公司和 Linux 来说都是一个重要的公告。该系统标志着一个新领域的开启,因为从事复杂且要求苛刻的高性能计算 (HPC) 问题的科学家现在可以以前所未有的方式使用和部署 Linux。HPC 环境不断突破操作系统的极限,需要更多的 CPU、更高的 I/O 带宽以及更快、更高效的并行编程支持。
在系统开发的早期,SGI 决定专门使用 Linux 作为这个新平台的操作系统。事实证明,对于 SGI 目标的技术计算环境来说,这是一个可靠且功能非常强大的操作系统。通过结合 SGI NUMAflex 全局共享内存架构、英特尔安腾 2 处理器和 Linux,我们在系统推出之前很久就打破了记录。
新系统名为 SGI Altix 3000,最多可配置 64 个处理器和 512GB 内存。未来的版本将提供高达 512 个处理器和 4TB 内存。在本文中,我们将探讨新 SGI 系统背后的硬件设计,描述将这个新系统推向市场所涉及的软件开发,并展示 Linux 如何轻松扩展并部署在最苛刻的 HPC 环境中。
SGI Altix 3000 系统使用英特尔安腾 2 处理器,并基于 SGI NUMAflex 全局共享内存架构,这是该公司对非统一内存访问 (NUMA) 架构的实现。NUMAflex 于 1996 年推出,此后一直用于该公司著名的 SGI Origin 服务器和基于 MIPS 处理器和 IRIX 64 位操作系统的超级计算机系列。NUMAflex 设计使 CPU、内存、I/O、互连、图形和存储能够封装到模块化组件或“砖块”中。然后可以极其灵活地组合和配置这些砖块,以更好地满足客户的资源和工作负载需求。利用这种第三代设计,SGI 能够使用相同的砖块构建 SGI Altix 3000 系统,用于 I/O(IX- 和 PX-砖块)、存储(D-砖块)和互连(路由器砖块/R-砖块)。这个新系统的主要区别在于 CPU 砖块(C-砖块),它包含安腾 2 处理器。图 1 显示了 SGI Altix 3000 系统上使用的砖块类型。图 2 描述了如何将这些砖块组合成两个机架,以构成一个单系统映像的 64 处理器系统。

图 2. 两种可能的 NUMAflex 配置
在像 NUMAflex 这样设计良好且平衡的硬件架构上,操作系统的职责是确保用户和应用程序能够充分利用硬件,而不会因资源管理效率低下或瓶颈而受到阻碍。要在大型 NUMA 系统上实现均衡的硬件资源管理,需要在第一批安腾 2 处理器和硬件原型系统到达之前很久就开始内核开发。在这种情况下,我们还使用了第一代安腾处理器,以便对 Linux 进行 CPU 扩展、I/O 性能和其他必要的更改,以满足苛刻的 HPC 环境的需求。
在原型硬件到达之前准备软件的第一步是尽可能地识别内核进行系统初始化和运行时所需的必要底层硬件寄存器和机器编程更改。为高度先进的系统开发定制 ASIC 的系统制造商通常使用仿真软件和工具来测试其硬件设计。在硬件可用之前,我们广泛开发和使用了模拟器,用于系统固件和内核开发,以准备好系统级软件。
当基于第一代安腾处理器的原始原型硬件到达时,就到了加电的时候了。关键里程碑之一是首次为系统加电,使处理器退出复位,然后从 PROM 中获取并执行第一条指令。

图 3. SGI 工程师庆祝加电成功。
加电后,真正的乐趣开始了,硬件“启动”实验室里充满了漫长的工作时间和周末。硬件、诊断和平台软件工程师在这里密切合作,调试系统并使处理器通过一系列重要的里程碑:PROM 到启动提示符,Linux 内核通过初始化,读取和挂载根目录,进入单用户模式,然后进入多用户模式,然后连接到网络。之后,我们对多个处理器和多个节点重复了同样的操作——通常是并行进行的——其他几个启动团队在其他工作站紧随领先团队的进度。

图 4. 在启动期间,一位硬件工程师、一位 PROM 工程师和一位操作系统工程师正在讨论一个错误。
一旦我们在基于第一代安腾处理器的原型系统上运行了 Linux,软件工程师就可以继续确保 Linux 运行,尤其是在大型 NUMA 系统上良好扩展。我们构建并使用了许多内部的、基于第一代安腾的系统,以帮助确保 Linux 在大型系统上表现良好。到 2001 年初,我们成功运行了一个 32 处理器、基于安腾的系统——同类首创。

图 5. 作者的儿子在早期的 32 处理器、基于安腾的系统前,2001 年夏季。
这些第一代基于安腾的系统对于使 Linux 为满足苛刻的 HPC 需求做好准备至关重要。早在英特尔推出第一批安腾 2 处理器之前,Linux 的大部分扩展、I/O 性能和其他更改就可以开发和测试。
当一组 SGI 软件工程师忙于使用基于第一代安腾处理器的原型机处理性能、扩展和其他问题时,另一组硬件和平台软件工程师正在准备下一代带有安腾 2 处理器的 SGI C-砖块,以便重新加电,再次重复启动过程。

图 6. 基于安腾 2 的 C-砖块的首次加电。
到 2002 年年中,启动团队取得了出色的进展,从单个处理器的加电到运行 64 处理器系统。带有安腾 2 处理器的 64 处理器系统再次成为同类首创。当然,所有这些都是在单系统映像中运行 Linux 的情况下实现的。
在整个过程中,我们都将 Linux 中的任何更改或发现的错误反馈给内核开发人员,以便将其纳入 Linux 的未来版本中。
其他 Linux 开发人员经常问:“为了让 Linux 在这么大的系统上运行,您必须进行哪些类型的更改?”或“Linux CPU 扩展是否仅限于八个左右的处理器?” 回答这些问题需要进一步检查 SGI 用作其软件基础的组件、社区做出的出色更改以及 SGI 提供的其他与 HPC 相关的增强功能和工具,以帮助 Linux 扩展到远远超出八个处理器的感知限制。
在 SGI Altix 3000 系统上,系统软件由用于安腾处理器的标准 Linux 发行版和 SGI ProPack 组成,ProPack 是一种覆盖产品,为 Linux 提供附加功能。SGI ProPack 包括更新的基于 2.4 的 Linux 内核、高度调整以利用 SGI 硬件的 HPC 库、NUMA 工具和驱动程序。
SGI Altix 3000 系统上使用的基于 2.4 的 Linux 内核由用于安腾处理器的标准 2.4.19 内核 (kernel.org) 以及其他改进组成。这些改进分为三类:常规错误修复和平台支持、Linux 社区内其他工作带来的改进以及 SGI 更改。
第一类内核更改只是对测试期间发现的错误进行的持续修复,以及对底层平台和 NUMA 支持的持续改进。对于这些更改,SGI 与内核团队的指定维护人员合作,以便将这些更改合并回主线内核。
第二类内核改进包括社区内其他人开发的优秀工作和性能补丁,这些补丁尚未被正式接受,或者被推迟到 2.5 开发流。这些改进可以在以下 VA Software SourceForge 站点上找到:“大型系统上的 Linux Foundry” (large.foundries.sourceforge.net) 和“Linux 可扩展性工作项目” (sourceforge.net/projects/lse)。我们使用了这些项目中的以下补丁:CPU 调度器、减少大内核锁使用量的改进、基于 Read-Copy-Update 自旋锁范例的 dcache_lock 使用量减少改进以及基于 FRlock 锁定范例的 xtime_lock (gettimeofday) 使用量减少改进。
我们还在系统上配置和使用了 Linux 设备文件系统 (devfs, www.atnf.csiro.au/people/rgooch/linux/docs/devfs.html) 以处理大量的磁盘和 I/O 总线。Devfs 确保在添加或删除其他磁盘或控制器后,设备路径名在重新启动后仍然存在。大型系统的系统管理员最不希望看到的事情是控制器出现故障,导致大约 50 个或更多磁盘突然重新编号和重命名。我们发现 devfs 在高压系统环境中是可靠且稳定的,配置包括多达 64 个处理器,以及数十个光纤通道环路,连接了数百个磁盘。Devfs 是 2.4 Linux 内核的可选部分,因此不需要单独的内核补丁。
第三类内核更改包括 SGI 的改进,这些改进仍在提交到主线 Linux 的过程中,在 2.4 之后被接受,或者可能由于补丁的专门用途或性质而保持独立。这些开源改进可以在“SGI 开源”网站 (oss.sgi.com) 上找到。我们所做的改进包括:XFS 文件系统软件、进程聚合 (PAGG)、CpuMemSets (CMS)、内核调试器 (kdb) 和 Linux 内核崩溃转储 (lkcd)。
此外,SGI 还包括其从 IRIX 移植的 SCSI 子系统和驱动程序。Linux 2.4 SCSI I/O 子系统的早期测试表明,如果不彻底改造该领域,就无法满足客户苛刻的存储需求。虽然主流内核开发人员正在为此进行未来版本的开发,但 SGI 需要立即修复其基于 2.4 的内核,因此使用了来自 IRIX 的 SGI XSCSI 基础设施和驱动程序作为临时解决方案。
图 7-9 说明了使用先前描述的更改在 SGI Altix 3000 系统上的 Linux 上实现的一些早期性能改进。图 7 比较了 XFS 与其他 Linux 文件系统。(注意:有关 Linux 文件系统性能的更详细研究,请参阅“Linux 2.4.17 中的文件系统性能和可扩展性”,2002 年 USENIX 年度技术会议,该会议也可在 oss.sgi.com 上获得)。图 8 比较了 Linux 2.4 中 XSCSI 与 SCSI 的性能,图 9 显示了使用 AIM7 的 CPU 可扩展性。

图 7. 文件系统性能比较:AIM7 多用户内核工作负载,2.4.17 内核;28 P 安腾原型机,14GB,120 个磁盘;正在进行中,临时示例;仅各种文件系统,但包括 SGI 增强功能和 SGI 调优内核。

图 8. Linux XSCSI 性能示例:正在进行中,使用 2.4.16 内核的临时示例;120 个进程从 120 个磁盘读取(仅通过驱动程序)。

图 9. 使用 AIM7 的 CPU 扩展示例:AIM7 多用户内核工作负载,2.4.16 内核;正在进行中,临时示例;SGI 增强功能和 SGI 调优内核。
虽然 SGI 更专注于高性能和技术计算环境——在这些环境中,大部分 CPU 周期通常花费在用户级代码和应用程序中,而不是内核中——但 AIM7 基准测试确实表明,Linux 仍然可以很好地扩展到企业环境中常见的其他类型的工作负载。有关 Linux 的 HPC 应用程序性能和扩展示例,请参阅侧边栏“已经解决实际问题”。
图 10 显示了在早期的 SGI 64 处理器原型系统上使用安腾 2 处理器运行 STREAM Triad 基准测试所取得的扩展结果,该基准测试用于测试内存带宽。通过此基准测试,SGI 展示了从 2 个到 64 个处理器的近乎线性的可扩展性,并实现了每秒超过 120GB 的速度。这一结果标志着行业的一个重要里程碑,在基于微处理器的系统中创造了新的世界纪录,而这是在单系统映像中运行 Linux 实现的!这一令人印象深刻的结果也表明,Linux 确实可以很好地扩展到远远超出八个处理器的感知限制。有关 STREAM Triad 的更多信息,请参阅 www.cs.virginia.edu/stream。
当您查看 SGI ProPack 中包含的内核添加列表时,该列表实际上非常小,这高度说明了 Linux 强大的原始设计。更令人印象深刻的是,其中许多和其他更改已经包含在 2.5 开发内核中。按照这个速度,Linux 正在迅速发展成为一个严肃的 HPC 操作系统。
SGI ProPack 还包括几个工具和库,以帮助提高大型 NUMA 系统上的性能,从而解决应用程序需要大量 CPU 和内存的复杂问题,或者当多个应用程序在同一大型系统中同时运行时。在 Linux 上,SGI 提供了命令 cpuset 和 dplace,它们为 HPC 应用程序提供可预测且改进的 CPU 和内存放置控制。这些工具帮助不相关的作业划分和使用它们各自需要的资源,而不会互相妨碍,或者帮助防止较小的作业不经意地跨越比它能有效使用更大的资源池。因此,系统资源得到有效利用,并在一致的时间段内交付结果——这是 HPC 环境至关重要的两个特征。
此外,SGI ProPack 中的 SGI 消息传递工具包 (MPT) 提供了针对 SGI 计算机优化的行业标准消息传递库。MPT 包含 MPI 和 SHMEM API,它们透明地利用和利用 SGI 硬件中的底层功能,例如其用于快速内存到内存传输的块传输引擎 (BTE) 和硬件内存控制器的 fetch 操作 (fetchop) 支持。Fetchop 支持实现了多个 MPI 进程之间的直接通信和同步,同时消除了与操作系统系统调用相关的开销。
SGI ProPack NUMA 工具、HPC 库和分层在标准 Linux 发行版之上的其他软件支持为大型计算和数据密集型工作负载提供了强大的 HPC 软件环境。就像硬件上的定制 ASIC 提供“粘合逻辑”以利用和使用商品处理器、内存和 I/O 部件一样,SGI ProPack 软件提供“粘合逻辑”以利用 Linux 操作系统作为大型 HPC 环境的商品构建块。
没有人相信 Linux 能够如此出色、如此迅速地扩展。通过将 Linux 与 SGI NUMAflex 系统架构和安腾 2 处理器相结合,SGI 构建了世界上最强大的 Linux 系统。将 SGI Altix 3000 系统推向市场涉及大量工作,我们认为这仅仅是开始。SGI 在基于安腾 2 的系统上使用 Linux 的积极的基于标准的战略正在提高 Linux 可以实现的目标,同时为客户提供用于大型 HPC 服务器和超级计算机的令人兴奋的、不妥协的替代方案。SGI 工程师——以及整个公司——都完全致力于在 Linux 功能的基础上再接再厉,并进一步突破界限,为 Linux 和 HPC 社区带来更令人兴奋的突破和机遇。

Steve Neuner 过去 19 年一直在主要计算机制造商(包括 MAI Basic Four、Sequent Computer Systems、Digital Equipment Corporation 和 SGI)从事 UNIX 内核开发工作。现在在 SGI 工作,Steve 是 Linux 工程总监,自四年前加入 SGI 以来,一直从事 Linux 和基于安腾的系统方面的工作。