64位POWER体系结构是公认的高性能、可靠而且有用的企业平台,它为 UNIX和Linux 应用程序开发者提供了新的选择。不管是谁,只要有在其他平台上使用 AIX 或者 Linux 的经验,就可以受益于与世界顶尖的 IBM 硬件 POWER 相结合的开放源代码社区强有力的基础。从价格适中的 2- 路服务器到垂直扩展的超级计算机再到 JS20 BladeCenter,基于 POWER 的机器具备所有的大小和等级,始终领先于人们对企业级硬件的预期。
Linux 发行版本
可选范围广是 Linux 社区为人们所津津乐道的一个强大之处。POWER 版 Linux 主要由 Red Hat Linux 和 SUSE Linux 这两家企业 Linux 厂商提供。这两种 Linux 发行版本各成体系,各有所长,都提供了 Linux 开发者所期望的完整的工具链、库以及开发工具。本文分别进行了评论。
注意,TurboLinux 也得到了支持。TurboLinux Enterprise Server8 使用的是来自 SUSE Linux 的许可代码,所以在下面的论述中,那些适用于 SUSE 的特性同样适用于 TurboLinux。
Red Hat Enterprise Linux 3 (RHEL3)
Red Hat 成功地充当了开放源代码社区的领导者和先驱者。2003 年 Red Hat Linux 发布了可用于 POWER 体系结构的企业版,并带来了先进的 Linux 技术。
内核
RHEL3 的 2.4.21 Linux 内核为 POWER 体系结构进行了优化。甚至在 Linux 2.6 发布之前,Red Hat 已经在他们的 Linux 2.4 内核中移植(backport)了一些 2.6 的特性。
其中,最引人注目的是 Native Posix Threads for Linux(NPTL)库。先前的线程模型,即 Linux Thread,是传统的 1:1 线程模型,与 Linux 2.4 调度器配合使用,一段时间以来这个模型就是被革新的目标。在 RHEL3 中,Red Hat 将新的线程模型从 2.5 的开发树中移植到了 2.4 内核,从而使得可扩展性更好,多线程更快,最明显的是从根本上提高了 Java 性能。
不同于一些商用 UNIX 操作系统中所用的 m:n 线程,NPTL 仍是 1:1 模型,但是现在没有人怀疑它的性能。新的线程模型在陈旧的 450 Mhz Intel 处理器上有能力在两秒钟内生成和销毁 100,000 个线程,因而可以提供企业级 Linux 等所需的性能。Java 应用程序的执行速度通常会比使用旧的 Linux 线程模型时快八倍。
前沿开发的结合并不仅限于内核线程模型。RHEL3 中还包括一个新的改进的 glibc,版本为 2.3.1。出于 NPTL 线程性能方面的需要,glibc 2.3.1 还为 Linux 应用程序引入了效率更高的库。
SUSE SLES8
SUSE SLES8 是两种企业版 Linux 中资格较老的一个,已经到了它的生命周期的末期。SLES 8 的特色是定期更新的 2.4 内核(SUSE 已经为 SLES8 用户发布了三个服务包,以确保可以使用补充更新的系统安全和性能),它提供所有类别的选项。有三种带日志的文件系统可供选择。默认情况下,在 SLES8 中可以使用所有常见的数据库、Web 服务器和邮件服务器应用程序以及最新发布的 KDE 和 Gnome 桌面环境。SLES8 中当前可用的 2.4.21 内核为实时地执行 32 位和 64 位的应用程序提供了一个 64 位的基础。
即将发布的 SLES9 现在还在测试中,SUSE 的最后一项任务是融合新的 GCC、glibc 和 Linux 2.6 内核。发布后,SLES 9 将提供第一个可用于 IBM eServer? iSeries? 和 pSeries? 服务器的 Linux 2.6 内核。
使用哪个发行版本?
由于 RHEL 3 和 SLES8 所提供的线程模型不同,所以当然不能认为会有完全的二进制兼容性。好消息是,开发者几乎总会发现,不同的 Linux 发行版本中代码编译是一致的,POWER 版 Linux 也不例外。
不过,在部署时,一些应用程序对具体的发行版本更为敏感。例如,SLES8 上默认使用的 Reiser 文件系统以高性能地处理小文件而闻名。主要对小于 1 KB 的文件进行读写访问的应用程序适合使用这种文件系统,这样的程序最好运行在 SLES8 上,而运行 Java 线程的应用程序将受益于 NPTL 的 RHEL3 实现。
开放源代码模型的优点在于它的灵活性,POWER 版 Linux 也是灵活的。也就是说,开发者将可以找到关于在 RHEL3 和 SLES8 上进行开发的通用参考资料。编译器、IBM Java Developer’s Kit ,以及像流行的集成开发环境 Eclipse 这样的开发工具,都是这两种发行版本中自由可用的工具的例子。
编译器和库
POWER 版 Linux 是两个方面的结合:最好的开放源代码开发和企业级的硬件。最好是提供 C、C++ 和 Fortran 编译器的一个选择以反映这一结合。
GNU Compiler Collection (GCC)
GNU GCC 是用于所有体系结构的 Linux 中应用最广泛的编译器,Red Hat 和 SUSE 都使用此编译器来编译随它们的产品发布的二进制文件(可执行文件)。由于 GCC 3.2 可以生成 32 位的和 64 位的二进制文件,所以 RHEL3 和 SLES8 中都提供了 GCC 3.2。RHEL3 实现利用了一个“biarch”风格的双编译器,使用一个编译器标记(-m64)来进行 64 位编译。
与之不同,SLES8 使用单独的 64 位 GCC 的工具链,这个工具链默认存储在 /opt/cross 中。为了在 SLES8 中可以使用 64 位编译器,开发者应该确保他们的配置脚本和 Makefile 文件可以识别出这个编译器。您可以通过将 CC 环境变量设置为 64 位 GCC 编译器的位置来完成这一任务。
当前,人们正在对 GNU 编译器集进行重大革新,为 POWER 体系结构而进行性能优化。在即将发行的 3.3 和 3.4 中,GCC 的调度和信号处理将得到改进。另外,针对特定体系结构的优化(比如对 IBM JS20 BladeCenter 中 PPC970 芯片的 VMX/Altivec 支持)将为编译后的代码带来极大的性能优势。不过,SLES8 和 RHEL3 现在使用的都是 GCC 3.2 版本,在这里评述了对这些版本性能的优化。
GCC 3.2 没有为 POWER 处理器进行针对特定体系结构的优化。所以,编译时不建议使用针对特定体系结构的标记,比如 -mpower。可以使用这些选项,但通常不会带来性能上的提高。与 x86 上的 GCC 实现不同,GCC 3.2 中没有包括 -fPIC 标记。为生成动态链接的二进制文件,需要在所有的 Makefile 文件中包含 -fPIC。如果您正从 Intel 上的 Linux 移植代码库(codebase),这尤其关键,因为已有的 Makefile 文件可能没有显式地使用这个标记。
除了要识别出那些没有被当前用于 POWER 体系结构的 GCC 所使用的标记之外,您应该知道那些对 x86 和 POWER 体系结构来说可用的标记。这些标记包括处理重定位、目录(table of contents)大小、浮点选项、位调整等等的编译标记。例如,大 TOC 支持(多于 8K 个条目)需要多个 TOC,由 -mminimal-toc 编译标记指定。要回顾这些标记,请阅读源代码包中的标准 GCC 文档。
IBM VisualAge 编译器集
除了 GCC 以外,IBM 还发布了高性能 VisualAge 编译器集,这个编译器集既可以用于 RHEL3,也可以用于 SLES8。这些用于 C、C++ 和 Fortran 的编译器将性能优化技术发挥到了极致;它们被精心地定制,以全面地利用 POWER 体系结构。高性能计算(High Performance Computing)开发者通常会发现,只要使用这些编译器来重新编译他们的代码,性能就会提高 30% 以上!
使用 VisualAge 进行优化很简单,只需预先设定优化级别,这些级别对应使用不同种类的算法。通常,使用简单的 -O3 -qtune=auto 和 -qarch=auto 会带来最为显著的性能提高。第三级优化将自动识别出芯片类型并进行芯片(但不是体系结构)无关的优化。进一步使用 -O4 优化标记可以获得更高的性能,但付出的代价是针对特定芯片的优化、程序间分析以及高阶转换例程。高性能代码应该首先以 -O3 优化,然后再尝试 -O4。虽然 -O4 可能会提高性能,但是它对代码结构更为挑剔,而且 POWER 系列微处理器系列上的二进制兼容性更为受限。
为避免出现库不兼容的不愉快情形,POWER 版 Linux 中的 VisualAge 编译器设计为分别去使用每个发行版本包中所带的 glibc,而且它们甚至使用本地 Linux 链接器。渴望性能的应用程序显然需要 POWER 版 Linux 的这一独特功能。
有大量的关于用于 POWER 版 Linux 中的 GCC 和 VisualAge 编译器集编译期优化的文档。在 参考资料 中列出了所有 POWER 版 Linux 开发者都应该放在桌面上的可免费获得的技术资料。
IBM JDK 1.4.1
IBM 已经将开发资源加入到对定制的 JDK 的改进中,可用于 POWER 版 Linux 的 JDK 既有 32 位的也有 64 位的。BHEL3 和 SLES8 的安装包中都有 IBM JDK 1.4.1,可以与 POWER 版 Linux 的 Eclipse 集成开发环境配合使用。
开发工具
很多 Linux 开发者乐于使用传统的开发工具,比如 vi 或 Emacs。自然,这些以及 gdb 等 Linux 中常见的内核级调试工具都是可用的。不过,除了这些工具以外,POWER 版 Linux 的特色是支持 Eclipse IDE 等开发工具。VisualAge 编译器有详细的代码分析选项来确定源代码中的字符排列顺序(endianness)以及 64 位兼容性,并且,舒适的 KDE 和 Gnome 桌面环境让那些习惯于图形界面的开发者非常自如。高性能计算(HPC)以及生命科学(Life Science)开发者将受益于可用的通用应用程序,例如 NCBI 应用程序。IBM 的高级数学和科学库 ESSL 和 P/ESSL 也可以用来辅助 POWER 版 Linux 上的高性能应用程序。随着 Globus Toolkit 等相关解决方案与集群系统管理(Cluster Systems Management, CSM)等集群工具的结合,基于 POWER 版 Linux 的网格计算变得活跃起来。
结束语
POWER 版 Linux 为那些需要使用更为健壮的硬件的应用程序提供了一个高性能环境,同时还提供了全部的硬件和软件资源。在双执行环境中,64 位的应用程序可以与 32 位的应用程序和平共处。IBM iSeries 和 pSeries 系列产品为 Linux 提供了健壮的硬件基础,而这些产品以前是不能用于 Linux 的。Red Hat 和 SUSE 一直致力于让人们可以用上最好的开放源代码发行版本,IBM 则提供为 AIX 开发者所熟悉的领先的中间件解决方案。Eclipse 等新开发工具使转换变得容易,先进的开发环境提供了希望从 Linux 与 IBM iSeries 和 pSeries 服务器的结合中得到的灵活性和性能。