标题: Linux on POWER:发行版迁移和二进制兼容性考虑事项 [打印本页] 作者: look_w 时间: 2017-12-9 12:55 标题: Linux on POWER:发行版迁移和二进制兼容性考虑事项
现在有许多可用的 Linux 发行版。尽管 Red Hat 和 SUSE LINUX 是 IBM 支持的 Linux on POWER 解决方案供应商,但其他发行版(比如 Gentoo、Debian 和 Ubuntu)也逐渐变成流行的 Linux on POWER 解决方案。应用程序通常喜欢确保他们的应用程序能够运行在多个发行版上,以及运行在同一个发行版的不同版本上。理解与二进制兼容性相关的问题之后,就能够实现这些目标。本文定义二进制兼容性、讨论维护兼容性的考虑事项并探讨不同版本之间的迁移,包括 Red Hat Enterprise Linux 的版本 4 和 5,SUSE LINUX Enterprise Server 的版本 9 和 10。此外,还提供确保应用程序能够跨多个发行版实现兼容性的实践。
表 1 显示了软件级别,以及本文将要详细讨论的 RHEL4、RHEL5、SLES9 和 SLES10 中受支持的特性:
表 1. 受支持的特性以及 RHEL 和 SLES 发行版的代码级别
SLES8 SP4RHEL3 U4SLES9 SP3RHEL4 U8SLES10 SP2kernel2.4.212.4.212.6.52.6.92.6.16glibc2.2.52.3.22.3.32.3.42.4 SMT No No Yes Yes Yes NPTL No No Yes Yes Yes NUMA No No Yes Yes Yes JDK IBM 1.3.1IBM 1.4.2¹IBM 1.4.2IBM 1.4.2IBM 1.4.2, 5.0 Apache 1.3.262.0.462.0.492.0.522.2.0 GCC 3.23.2.33.3.33.4.64.1.2
¹您可以从 IBM 站点下载 IBM Developer Kit for Linux, Java™ Technology Edition。(部分提供相关链接)。
使用图 1 中显示的流程图确定应用程序在 RHEL 或 SLES 上是否实现二进制兼容。
图 1. 确定应用程序的二进制兼容性二进制兼容性概述Linux on POWER 的二进制兼容性通过遵循 Application Binary Interface (ABI) 来实现。ABI 是一个接口,编译后的二进制文件通过它访问操作系统及其服务。当多个操作环境支持相同的 ABI 时,就可以在这些操作环境中运行相同的二进制文件。可以在 “64-bit PowerPC ELF Application Binary Interface Supplement 1.7” 中找到关于 PowerPC® Executable 和 Linking Format (ELF) ABI 的 64 位补充的更多信息(部分提供相关链接)。
二进制兼容性是指能够在特定处理器系列的多个环境中运行二进制文件的能力。这些环境可能是相同 Linux 发行版的不同版本,或者是完全不同的版本。例如,在基于 POWER6™ 处理器并运行 SLES10 的系统上运行可以在基于 POWER5™ 处理器并运行 SLES10 的系统上编译和运行的二进制文件。另一个例子是,在基于 POWER6™ 处理器并运行 SLES10 的系统上运行可以在基于 POWER5™ 处理器并运行 RHEL4 的系统上编译和运行的二进制文件。
处理器兼容性处理器兼容性是与 Linux on POWER 二进制兼容性密切相关的主题。这个小节讨论在不同的 64 位 POWER 处理器之间的兼容性,以及 32 位 PowerPC 处理器和 64 位 POWER 处理器之间的兼容性。
POWER 处理器兼容性 小节讨论的最后一个例子涉及到在两个不同的处理器类型上运行相同的二进制文件:POWER5 处理器和 POWER6 处理器。POWER6 架构是 POWER5 架构的改进,同时又保持与 POWER5 兼容,这就允许您在这两个平台上运行相同的应用程序。
PowerPC 和 POWER 处理器兼容性运行在本机 32 位 PowerPC 环境和 64 位 POWER 环境上的 32 位应用程序也可以实现二进制兼容性。可以在本机 Linux PowerPC 环境上执行在 64 位 Linux on POWER 系统上生成的 32 位二进制文件。能够实现这种兼容性是因为:
64 位 Power Architecture 支持完整的 32 位 PowerPC 架构。
64 位 Linux 内核能够处理 32 位系统调用。
32 位运行时环境包含必要的 32 位库。
64 位运行时环境包含必要的 32 位和 64 位库。
可以通过不同的方式生成 32 位和 64 位 Linux 二进制文件,这取决于开发平台:
在 32 位 PowerPC 平台(比如运行 Linux 的 Apple Powerbook)上的本机 GNU Compiler Collection (GCC) C 编辑器能够生成可以在本机 32 位平台上,或在包含适当 32 位用户空间库的 64 位 Linux on POWER 平台上执行的 32 位二进制文件。
IBM XL C/C++, Version 8.0 和针对 64 位 Linux on POWER 的 GCC C 编译器能够生成 32 位和 64 为二进制可执行文件,这些文件可以在 32 位或 64 位运行时环境中执行。
还存在可以同时在 32 位 PowerPC Linux 系统和 64 位 Linux on POWER 系统上运行的跨系统编译器。这些跨系统编译器能够生成 32 位和 64 位二进制文件。不管在什么地方构建二进制文件,32 位的二进制文件都可以在 32 位 Linux 平台或 64 位 Linux 平台上运行,而生成的 64 位二进制文件仅能在 64 位 Linux on POWER 系统上运行。跨系统编译器的一个例子是 Crosstool
表 2 显示了如何为不同的开发平台生成 32 位和 64 位 Linux 二进制文件:
表 2. 生成 32 位和 64 位 Linux 二进制文件开发平台编译器生成的 Linux 二进制文件32 位 Linux on PowerPC本机 GCC C 编译器32 位64 位 Linux on POWER本机 XL C/C++ 或 GCC C 编译器32 位或 64 位32 位 Linux on PowerPC 或
64 位 Linux on POWER跨系统编译器,比如 crosstool32 位或 64 位
尽管已经演示了 32 位和 64 位环境之间的兼容性,但这并不意味着官方发行版支持这种兼容性。Red Hat 在 RHEL3 和 RHEL4 之间向前或向后支持 32 位和 64 位兼容性,而当从 SLES8 迁移到 SLES9 时,SLES8 仅支持 32 位向前兼容性。
表 3 显示了 32 位和 64 位应用程序在不同的 RHEL 和 SLES 版本上的向后和向前兼容性:
表 3. 在 RHEL 和 SLES 发行版中的 32 位和 64 位兼容性发行版32 位64 位RHEL3 > RHEL4向前兼容向前兼容RHEL4 < RHEL3向后兼容向后兼容SLES9 > SLES8向前兼容 NA SLES8 < SLES9 NA NA
优化性能2.6 内核和 POWER6 架构包含能够改进应用程序的性能的特性。性能的改进得益于不同的库、处理器特性和编译器更新。有一些性能改进不需要修改应用程序,而另一些性能改进需要重新编译源代码。记住,重新编译以获得性能改进可能会损害二进制文件在某些环境中的兼容性。这个小节提供一些例子,它们展示能够改进应用程序性能的 2.6 内核新特性和 POWER6 架构。
NUMANon-uniform Memory Access (NUMA) 是针对 Linux on POWER 在 2.6 内核中引入的,这个特性在 RHEL5 和 SLES10 的最新版本中得到进一步优化。NUMA 解决了系统中的某些处理器因为总线位置不同到达特定内存区域的时间要比其他处理器长的问题。NUMA 通过在每个总线使用更多内存总线和更少处理器来减少系统共享内存总线的争用。尽管这在包含少量处理器的系统中作用不明显,但它能够在系统包含大量处理器时改善性能。
在 Linux 2.6.15 内核中,NUMA 优化通过指定仅本地处理器能够访问内存,从而改进了跨大型系统(处理器核在 4-8 个以上)运行的工作负载的性能。如果处理器正在查找存储在相邻的 cell board 上的内存中的数据,Linux 2.6.16 内核能够获取该信息并将其移动到本地内存中(运行速度更快),然后在本地内存中执行所需的操作,而不需重新启动该操作。
由于 POWER5 和 POWER6 架构能够扩展到 64 位处理器,大部分应用程序都得益于 2.6 内核级别的 NUMA 支持。设法提高性能的应用程序可以使用 user-land NUMA API。RHEL4 附带了 user-land NUMA API,以及更多关于如何在 NUMA Group 主页使用这些 API 的信息部分提供相关链接)。
使用 Linux 2.6.16 内核时,必须根据共享内存的分配方式进行一些更改。如果处理器正在查找存储在相邻的 cell board 上的内存中的数据,Linux 2.6.16 内核能够获取该信息并将其移动到本地内存中(运行速度更快),然后在本地内存中执行所需的操作,而不需重新启动该操作。
编译器改进您可以考虑重新编译以利用 Linux on POWER 的最新编辑器的新特性带来的性能优势。现在,高性能编译器 IBM XL C/C++ Version 8 可以在基础级别的 RHEL4、SLES9 和 SLES10 上使用。IBM XL C/C++ Version 9 可以在 RHEL5 及其更新、SLES10 SP1 和 SP2 上使用。Version 9 添加了针对基于 POWER6 处理器的系统的性能改进。
-qarch 和 -qtune 选项用于为各自的架构优化性能。例如,要优化 POWER6 的性能,使用 -qarch=pwr6 和 -qtune=pwr6。此外,还引入了 -qtune=balanced 选项。这个选项与 -qarch=pwr5(或 pwr5x)一起使用时,将生成可以在 POWER5 和 POWER6 系统上运行的二进制文件,但包含能够改进 POWER6 性能的调度改进。Version 9 还包含对 AltiVec Vector Multimedia Extensions (VMX) 的支持,VMX 最初是在 IBM PowerPC 970 处理器上提供的,现在通过 -qaltivec 选项整合到 POWER6 产品系列。
GNU Compiler Collection 包含针对多种不同语言的编译器。版本 3.3 到 4.1 得到了改进,包括对其 C 编译器 gcc 的特定于 POWER6 的优化。-mcpu=power6 和 -mtune=power6 标志现在得到支持,从而导致出现针对 POWER6 架构的注册表使用和指令调度参数。此外,还包含针对 IBM PowerPC 970 和 IBM POWER6 处理器的 VMX 向量扩展,它们能够提升向量化代码的性能。尽管这些优化选项在各自的架构上改善了性能,但它们可能损害应用程序在其他平台上的二进制兼容性。