2.6 版之前发行的所有 Linux 版本中的 Linux 线程库都称为 LinuxThreads。该库自 glibc 2.0 以来已经得到 GNU C 库支持,而且在很大程度上与 POSIX 是兼容的。从 2.6 内核开始,引入了新的经过改善的线程库,称为 Native POSIX Threading Library(NPTL)。该实现在 LinuxThreads 之上提供了显著的性能提高。NPTL 与 POSIX 规范的兼容性也强于 LinuxThreads 包与 POSIX 规范的兼容性。然而,只使用 2.6 内核并不意味着就使用了 NPTL。发出下列命令可以查看正在使用的 POSIX 实现:
$ getconf GNU_LIBPTHREAD_VERSION
NPTL 实现一对一线程模型,在该模型中,用户线程与内核线程之间存在一对一的关系。NPTL 还实现进程间 POSIX 同步原语。特别是线程选项 PTHREAD_PROCESS_SHARED 现在已受支持。在默认情况下,创建每个线程时,detachstate 属性被设为 PTHREAD_CREATE_JOINABLE,调用策略设为 SCHED_OTHER,而且没有用户提供的堆栈。
如果 Solaris 应用程序使用 POSIX 线程 API,那么将其移植到 Linux 会非常简单。注意,即使使用 GCC,Solaris 也不支持 NPTL。表 9 显示了 Linux 中 POSIX 线程属性的默认值:
属性 | 默认值 |
---|---|
scope | PTHREAD_SCOPE_SYSTEM |
detachstate | PTHREAD_CREATE_JOINABLE |
schedparam | 0 |
inhiritsched | PTHREAD_EXPLICIT_SCHED |
schedpolicy | SCHED_OTHER |
虽然许多应用程序将从 2.4 内核迁移到 2.6,而无需重新编译,但是增加 NPTL 可能需要在多线程应用程序中进行少量的修改。关于如何通过使用 LinuxThreads 将应用程序迁移到 NPTL 超出了本文的范围。LinuxDevices.com 上的文章 “Migrating to Linux kernel 2.6” 提供其他相关信息(见 参考资料)。
|
一旦在 Linux 中移植并成功执行了代码,需要完成性能监控和性能调优,以确保移植的代码在目标平台上可以正常执行。这一节将提供 Linux on POWER 中可以使用的工具列表,帮助您完成以上操作。
两个常用的工具(sysstat 包 和 nmon)使得性能监控和调优更加容易:
- sysstat 包包含用于基础性能监控的通用扩展工具,包括 mpstat、iostat 和 sar 等工具。
- nmon 将各种经典的系统监控工具集成到一个一站式的数据收集工具中。此外,还包含许多方便使用的后期处理插件,可用于收集、绘制和合并信息。
Oprofile 基于硬件相关事件(比如缓存遗漏或 CPU 周期)提供代码的配置文件。例如,Oprofile 可以帮助确定是哪个源例程导致大部分缓存遗漏。Oprofile 使用包括 IBM POWER4™、POWER5™、POWER6™ 和 PowerPC™ 970 在内的许多 CPU 中提供的硬件性能计数器。有关的详细信息,请参阅 Oprofile Web 站点(参考资料 部分提供相关链接)。
针对 SLES10、SLES11 和 RHEL5 的 OProfile for Linux 已经可用,它包含在 Advance Toolchain 中。已安装系统的 /usr/share/doc/packages/oprofile 目录包含关于 Oprofile 的快速参考。
Post-Link Optimization(FDPRpro)
这个工具收集正在处理一般工作负载的程序的行为信息,从而帮助优化程序的可执行映像。信息收集完成之后,它将重新分析程序(和收集到的配置文件)、应用全局优化(包括程序重构),并为工作负载创建新版本的应用程序。优化器生成的新程序通常会更快,并且占用的内存比原先的程序少。
在撰写本文时,Post-Link Optimization 工具在 SLES8(以及更新版本)和 RHEL3(以及更新版本)上已经得到支持。要了解更多信息,请访问 alphaWorks Post-Link Optimization for Linux on POWER 站点(参考资料 部分提供相关链接)。
应用程序软件是以称为包 的管理单位发送给最终用户的。包是相关文件(二进制文件、库、文档和源代码)和元数据的集合。包管理系统使用元数据来协调包中的所有块。Solaris 使用 pkgadmin 作为其包管理器。RPM 是 Linux 上广泛使用的包管理系统。要获得关于 RPM 的更多信息,请访问 www.rpm.org(参考资料 部分提供相关链接)。
注意,Solaris 中 pkgadmin 使用的包规范模板文件的格式与 RPM 使用的 spec 文件的格式不同,将包信息从模板文件转换到 spec 文件需要做大量工作。
大多数情况下,从 Solaris 到 Linux on POWER 的移植工作仅涉及在编译器/连接程序开关中进行重新编译或少量更改。然而,Solaris 和 Linux 的设计本质是不相同的:
- Solaris 侧重于性能、可伸缩性和可靠性,而忽略可移植性。
- Linux 设计时考虑了可移植性,几乎现在的所有硬件平台都支持 Linux。
现在的 Linux 发行版基于 Linux 2.6 内核,该内核继续利用大量社区和团体改进。与基于 Linux 2.4 内核的旧版本相比,SLES10 SP2、RHEL5.2 和 SLES11 在性能、可伸缩性和可靠性方面都有了显著改进。对于运行在 Power 系统上的 Linux,应用程序能够利用完整的电源、性能、可伸缩性、虚拟化和管理功能。
记住,Solaris 上的一些特定于系统的特性在 Linux 上是不可用的。
我们衷心感谢 Steve Munroe、Mark Brown、Kevin Li 和 Ralph Nissler 的宝贵点评。
学习
- 查看最新的 XL C/C++ 编译器 和 XL Fortran 编译器。
- Red Hat 发布了在受支持平台上的 RHEL3、RHEL4 和 RHEL5 的特性对比。
- 访问 Advance Toolchain for Linux on POWER 论坛,可以在上面发表关于 Advance Toolchain 的问题。
- IBM Systems Application Advantage for Linux (Chiphopper) 产品能够帮助您将基于 Intel 的 Linux x86 应用程序移植到 IBM System 和中间件平台,并协助您进行测试。
- GNU binutils 用于通过 XL C/C++ 编译器集和 GCC 生成对象。可以在 GNU Binutils 站点了解详细信息。
- 文章 “Migrating to Linux kernel 2.6”(LinuxDevices.com,2004 年 3 月)讨论与将现有应用程序迁移到 2.6 内核和 Native POSIX Threading Library (NPTL) 相关的主题。
- 查看 rpm.org 了解更多关于 RPM 的信息。
- 查看 Port Your Solaris Application to Linux on POWER 确定 Linux on POWER 是否是您的正确选择。了解许多免费的培训机会,设置您的开发环境,远程访问 POWER 硬件以测试您的应用程序,并利用 IBM 运营和销售支持。
- developerWorks 迁移站
时间:2009-10-19 21:24 来源:developworks 作者:developworks 原文链接