从 Solaris 向 Linux on POWER 迁移指南(5)

来源:developworks 作者:developworks
   y pthread_getattr_np n y pthread_kill_other_threads_np n y pthread_rwlockattr_getkind_np n y pthread_rwlockattr_setkind_np n y pthread_timedjoin_np n y pthread_tryjoin_np n y

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 线程属性的默认值:


表 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

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 的宝贵点评。



参考资料

学习

好文,顶一下
(1)
100%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量