如何在 Intel x86 服务器上构建 IBM PowerLinux 应用程

IBM® Advanced Toolchain for PowerLinux 交叉编译器的实际价值在于,开发人员可在他们已熟悉的开发平台上(在大多数情况下是 x86)编译和构建 IBM Power Architecture® 应用程序。本文将介绍开发人员如何使用 Toolchain 交叉编译器,轻松地构建在 Power Architecture 上运行的源代码。本文还会回答有关交叉编译的应用程序性能、功能和在 IBM PowerLinux™ 服务器上原生地调试交叉编译应用程序的能力的问题。

简介

将在 x86 服务器上运行的 Linux® 应用程序移植到另一个平台上,比如 PowerLinux,需要设置一个不同的构建环境来编译该应用程序,是吗?没有必要。您可以在 x86 服务器上使用交叉编译器,构建针对一种不同平台架构(比如 IBM Power®)的应用程序二进制文件。交叉编译器已存在很长时间。它们主要用于为具有有限的资源的嵌入式系统构建应用程序,以便运行能够支持原生编译器的操作系统。我第一次了解交叉编译器是在参与一个针对手持设备的项目的时候。我在 x86 工作站上编写并编译源代码,并通过一个串行通信连接来将这些二进制文件加载到设备中。最近,我正在使用交叉编译器构建简单的应用程序,以便控制我所研究的一个遥控设备的伺服电动机。好了,我们进入正题。

本文将介绍 IBM Advance Toolchain for PowerLinux 中包含的交叉编译器。从这里开始,我会将 IBM Advance Toolchain for PowerLinux 称为 “toolchain”。toolchain 是一组开源开发工具和运行时库,它使用户能够在 Linux 上利用 IBM 最新的 Power 硬件特性。toolchain 本身是自成一体的,不依赖于系统 toolchain。它安装在 /opt 中,所以不会覆盖默认的 Linux 发行版 toolchain。截至撰写本文时,最新版本包含以下包的最新稳定版本:

GNU Compiler Collection(gcc、g++ 和 gfortran),以及各个针对支持的 IBM POWER® 处理器而优化的 gcc 运行时

GNU C 库 (glibc),单独针对支持的 POWER 处理器而进行了优化

GNU 二进制实用程序 (binutils)

十进制浮点库 (libdfp),进行了优化,添加了对基于 IBM POWER7® 和 IBM POWER8™ 处理器的服务器的硬件 DFP 支持

AUXV 库 (libauxv)

GNU 调试器 (gdb)

性能分析工具(oprofile、valgrind 和 itrace)

多核利用库(Intel® TBB、Userspace RCU),从 5.0-3 版本开始

以及多个支持库(比如 libhugetlbfs、zlib 等)

有关下载 toolchain 的信息,请参阅本文末尾的参考资料节。

出于本文的目的,我们将主要介绍 toolchain 交叉编译器。本文介绍如何使用 toolchain 交叉编译器,在 x86 服务器上构建适合 PowerLinux 的二进制可执行程序。文中还回答了以下问题。

在 x86 平台上构建的交叉编译应用程序,执行性能有在 PowerLinux 上原生构建的二进制程序那么好吗?

在 x86 平台上构建的交叉编译应用程序和库,是否拥有与在 PowerLinux 上构建的应用程序相同的应用程序二进制功能?

在 x86 平台上构建的交叉编译应用程序,是否会生成可在 PowerLinux 上执行原生调试的二进制程序?

为了回答这些问题,我使用了两个流行的开源应用程序 PostgreSQL 和 Apache httpd 服务器。PostgreSQL 和 Apache httpd 源代码发行版都是在 x86 服务器上使用 toolchain 交叉编译器来构建的,而且在 PowerLinux 服务器上是原生构建的。然后,这些应用程序被安装在一个 PowerLinux 服务器上的不同安装目录中并运行。我对这些应用程序运行了两个基准测试工具,比较了它们的性能和功能。

测试的结果将在以下各节中介绍。对于对重新创建测试感兴趣的读者,环境和配置 和 使用 toolchain 构建应用程序 节中分别介绍了环境配置和如何构建这些应用程序的信息。

结果

为了测试这些应用程序,我使用了一些公开的基准测试工具。对于 PostgreSQL,我使用了来自 GitHub 的 pgbench-tool。它使用了 PostgreSQL 源代码发行版随带的 pgbench 工具。对于 Apache httpd,我使用了 Apache httpd 源代码发行版随带的 apache bench (ab) 工具。请查阅本文底部的参考资料节,了解下载 pgbench-tools 的地方的信息。

PostgreSQL 测试设置和结果

在 x86 服务器上使用交叉编译器构建 PostgreSQL 应用程序后,完整的二进制程序集合被转移到一个 PowerLinux 服务器上。我们对默认的配置文件进行了以下修改:

Postgresql.conf max_connections = 4096 shared_buffers = 2048MB synchronous_commit = off checkpoint_segments = 3 checkpoint_timeout = 5min

修改 PowerLinux 系统设置的 kernel.sem 值。

sysctl.conf kernel.sem = 250     32000   32   12288

修改 pgbench-tools 的配置文件

MAX_WORKERS="32"。

根据 pgbench-tools 网站中的介绍,PostgreSQL 测试按照以下步骤运行:

创建 pgbench 和 results 数据库。

初始化 results 数据库。

创建一个包含描述的测试集。

使用 runset 脚本运行测试。

编译并提交测试结果。

有关执行这些步骤时使用的具体信息,请参阅 pgbench-tools 自述文件

Postgresql 结果(交叉编译)

以下是在 Power 服务器上对交叉编译的二进制程序运行 pgbench-tools 的结果。

图 1. 交叉编译的 PostgreSQL 二进制程序的比例系数

图 1. 交叉编译的 PostgreSQL 二进制程序的比例系数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/cf58afa05233967f4786f553f252ed15.html