在大多数情况下,将 Linux 应用程序从 x86 平台移植到 Linux on Power 很简单,因为两个平台都基于来自 Novell SUSE 或 Red Hat 的同一个 Linux 版本。移植常常只需要执行一次 GNU Compiler Collection (GCC) 再编译,对一些编译器和链接器开关稍作更改。
但是,为解决突然出现的未知问题做好准备是拥有一个成功端口的重要优势。通常,如果重点关注的是移植,将优化放在以后进行,那么本文中介绍的指南、技术和工具可以最大程度地降低(甚至可能消除)移植到 Linux on Power 的难度。
在某些情况下,当您单独在一种特定硬件架构(比如 x86)上设计应用程序时,有时可能需要做一些额外的修改。本文会重点介绍与将 x86 系统上运行的 LInux 应用程序移植到基于 IBM POWER® 处理器的系统相关的一些差异,本文还提供了让 x86 代码为移植到 Linux on Power 做好准备的一些建议。
您应用程序的字节顺序
32 位和 64 位数据类型(长度和对齐方式)
理解可用的编译器选择 - GCC(分发和 Advance Toolchain)和 IBM XL C/C++ 编译器。
使用 IBM SDK for Linux 和 IBM Rational Developer for Power Systems - 使用 GNU C/C++ 编译器构建大型程序。
应用程序开发人员可以在 Power Linux 上使用一些高级工具和技术,其中包括 IBM Software Development Kit for PowerLinux (SDK),这是一个免费、基于 Eclipse 的集成开发环境 (IDE)。该 SDK 集成了 C/C++ 源代码开发与 Advance Toolchain、链接后优化和经典的 LInux 性能分析工具(包括 OProfile、Perf 和 Valgrind)。 计划移植
将应用程序移植到一个新平台时,恰当的计划不可或缺。要为移植做好充足的准备,您应该:
以可视方式扫描代码,尤其需要注意那些可能错误匹配的赋值运算,以及位操作和比较。
理解 IBM Power® 平台架构要点,以及 x86 与 IBM POWER 处理器架构之间的差异 - 特别是您应用程序的字节顺序。
确定使用哪个 Linux on Power 发行版:Red Hat Enterprise Linux 或 Novell SUSE Linux、CentOS 还是 Ubuntu。
Power Development Cloud
这个完全自动化的 IBM Power Development Cloud 是一个免费的平台即服务 (PaaS),可用于使用 IBM 平台开发和演示软件解决方案。您可以利用 IBM Linux on Power 开发堆栈,它已预先配置和安装了针对从 x86 移植到 Linux on Power 的开发工具。
IBM Hardware Mall – 租赁和折扣
Hardware Mall 旨在激励独立软件供应商 (ISV) 在 IBM 平台上开发软件解决方案,为他们提供了系统硬件和适用软件的重要购买折扣和低租赁费率。
IBM Systems Application Advantage for Linux (Chiphopper)
IBM Chiphopper™ 产品是一个应用程序移植或重新托管程序,旨在免费帮助 IBM 业务合作伙伴启动、测试和支持其在竞争平台上运行的现有 Linux 应用程序向运行 LInux 和中间件平台的 IBM Power Systems™ 的移植。
IBM Innovation Center
IBM Innovation Center 提供了培训和一对一指导,涉及从构建到营销和销售解决方案的方方面面。IBM Innovation Center 团队随时准备帮助您实现开发目标
您可以在 解决方案开发硬件 网站上找到并利用所有这些服务。 理解 Power 平台的差异
您要移植到的 Power 硬件平台,确定了您在编译应用程序时想要使用的优化选项。您应考虑以哪个处理器版本为基础,例如 IBM POWER5、IBM POWER6®、IBM POWER7® 或 IBM POWER8™。为基于 POWER 处理器的系统开发一般性的代码非常容易,最终的应用程序将在多个系统上正常运行。针对 IBM 较新的几代 POWER 产品开发应用程序也很容易。一个重要的选择是选择使用 GCC 编译器还是 XL C/C++ 编译器。更多细节将在本文后面讨论。
编译器:
多年来,GCC 技术已得到显著改进,能够为基于 IBM POWER7 和 POWER8 处理器的服务器提供经过调优的应用程序。此外,如果性能是终极目标,那么 IBM XL 编译器可以实现更高的性能。
如果在 Linux on x86 上使用 GCC,推荐使用 GCC 完成初始移植。Linux on Power 上的 GCC 技术已显著改进,熟悉 GCC 会使得以它为基础进行移植变得更轻松。
如果需要的话,您还可以使用 IBM XL C/C++ 编译器。
如果在 Linux on x86 上使用 Java™,那么推荐从 IBM 网站下载并使用合适的 IBM Java 工具包。
编译器标志:
移植到基于 POWER 处理器的服务器时,可以在 XL C/C++ 编译器中对 -qarch 和 -qtune 使用不同标志,或者在 GCC 编译器编译器中对 -mcpu 和 -mtune 使用不同标志来优化应用程序。但是,对于初始移植,为了最大限度降低难度,最好使用基于 Power 的最常见的 –qtune=ppc和 –mcpu=power。具体的标志和使用它们的时机将在本文后面讨论。 确定使用哪个 Linux on Power 发行版
来自 Novell 和 Red Hat 的最新的操作系统产品(本文发表时)提供了完成企业级部署所需的技术、支持和可靠性。首选产品的选择通常在一个公司或组织内要考虑的事项。
SUSE Linux Enterprise Server (SLES)。
Red Hat Enterprise Linux (RHEL)。
使用 SLES 还是 RHEL 的决定不会对移植过程产生直接影响。但是,SUSE 和 Red Hat 拥有不同的发布和更新周期,在二进制兼容性上具有不同的策略,从长远角度讲,这些可能影响您的应用程序更新决策。此外,Red Hat 和 SUSE 发行版按相同的时间表发布对 Intel® 和 Power 的支持。 迁移到 GNU Make
如果目前尚未使用 GNU Make 构建应用程序,那么您可以考虑迁移到该应用程序。一种不错的编程实践是:使用一个能控制可执行文件的生成的工具,而不依赖于脚本或直接调用编译器来生成可执行文件。大多数 C 和 C++ 编程人员都使用 Make 作为这样的工具。切换到 GNU Make,这样您就能通过同一个构建控件 makefile 在多个平台上执行一致的构建操作。GNU Make 同时具有 SLES11 和 RHEL6 版本。有关 GNU Make 的更多信息,请参阅 “参考资料” 部分。
假设您的 Linux on x86 应用程序是使用 GCC 构建的,那么我们推荐首先使用 GCC 在 Power 上重新编译的简单方法。后续步骤将会添加简单的调优和优化选项供考虑。如果需要的话,接下来的一个步骤将是考虑 IBM XL 编译器,以便实现针对特定 IBM Power Architecture® 级别调优的更高性能。