Linux 为您的业务解决方案带来了开放标准,以及最大限度的可用性和灵活性。它提高了基于 POWER处理器的 IBM eServer系列服务器的性能和可靠性,应用程序可以充分利用 Linux on POWER 的优点。本文简要介绍了 Linux on POWER 所采用的硬件和软件环境,目的是为应用程序开发人员提供一些在入门时需要了解的知识。
简介
本文将概要介绍以下几个主题:
” 基于 Linux on POWER5处理器的服务器和基于 PowerPC970 与 970FX 的 eServer BladeCenterJS20 服务器。
” IBMVirtualization Engine(虚拟引擎)技术,以及 Linux 用户如何使用这些技术而获益。
” IBM 所支持的最新版本的 Linux 发行版:SUSE LINUX Enterprise Server 9(SLES9)和 Red Hat Enterprise Linux Advanced Server 4(RHEL AS4)。
” 各种平台上可用的编译器和软件。
Linux on POWER 硬件概述
IBM eServer OpenPower、IBM eServer p5 以及 IBM eServer i5 服务器都是基于相同的 POWER5 基础架构的,这是最新的 POWER 技术,是一系列具有相同的基本基础架构的处理器。基于 POWER5 处理器的服务器可以扩展为 64 路对称多处理器(SMP)机器,在一个芯片中可以具有两个 64 位的处理器核心。POWER5 处理器的优点包括:
” 同步多线程(SMT)
” 虚拟引擎
” 大型机级别的可靠性、可用性和可服务性(RAS)技术
同步多线程(SMT)
同时可以允许 POWER5 核心运行两个单独的指令序列。
虚拟引擎
设计用来将服务器、存储和网络资源汇集到一个虚拟环境中,从而对它们在多个应用环境和操作系统之间的使用进行优化。
大型机级别的可靠性、可用性和可服务性(RAS)技术
包括:
” 服务处理器:服务处理器是一个单独的微处理器,它实现了很多监视和故障记录功能,例如在启动时所出现的问题。服务处理器中的监视器可以自动启用,用来检查启动固件中的 “心跳信息”。如果在一段默认的时间内没有检测到心跳信息,那么服务处理器就会不断地查询系统电源的状态,并试图重新启动机器,直到系统成功启动为止。
” 首次故障数据捕捉(First Failure Data Capture,FFDC):软件可以使用 FFDC 来记录一些持久的故障和重要的软件事件。FFDC 还可以提供一种方法在故障之间进行关联,让软件可以从故障的现象链接到产生故障的根源上,从而促进快速定位故障的根源。
” IBM Chipkill内存:Chipkill 内存可以让计算机主板和固件检测计算机内存的问题,并可以有选择地禁用内存中有问题的部分。
” 错误检查和纠正(ECC)内存:内存卡上具有单错纠正和双错检测的 ECC 电路,可以纠正一位的内存错误。通过检测并报告超出 ECC 电路纠正能力的多位错误,双位错误检查可以帮助维护数据的完整性。内存芯片的组织方式可以确保任何特定的内存模块出现故障只会影响 ECC 字(位序列)中的一位,这样就可以在一个芯片完全不能用时,依然可以继续操作(这种技术就称为 Chipkill 恢复)。
” 动态处理器分配和逻辑分区(LPAR)容错技术:如果一个处理器上发生的错误超过了它可以恢复的上限,例如在访问二级缓存时出现了错误,那么就会记录这个事件。除了要记录这个错误之外,实际上还会对处理器进行标记,并对系统重新进行配置,这一切都是在保证操作系统继续运行的情况下进行的。这种特性可以让处理器得以延期修理,这样就可以减少非预期的系统宕机时间。
IBM eServer BladeCenter JS20 是基于 64 位的 PowerPC 970 和 970FX 处理器的,这些处理器的特性是具有惟一的 VMX(多媒体扩展)执行。VMX 是一种 SIMD(单指令多数据流)实现。通常对于一台计算机来说,一条指令只会完成一个任务。但是 SIMD 指令不但可以完成一个任务,而且可以一次对多个数据执行这个任务。如果利用这种特性,某些应用程序(尤其是多媒体和图形程序)可以极大地提高性能。
IBM eServer OpenPower
现在有两种可用的 eServer OpenPower 模型:OpenPower 710 和 OpenPower 720。这些服务器的目标客户是那些长期使用 Linux 的用户,以及那些希望获得最佳的性价比同时又要保证企业级可靠性和虚拟化技术的用户。Linux是 eServer OpenPower 系统所支持的惟一一种操作系统。
表 1 对 710 和 720 模型中的配置进行了总结:
表 1. IBM eServer OpenPower 710 和 720
| OpenPower 710 | OpenPower 720 |
处理器 | 1.65GHz POWER5 处理器 | 1.50GHz 1 路和 1.65GHz 2 路和 4 路 POWER5 处理器 |
处理器配置 | 1 路或 2 路配置 | 1 路、2 路或 4 路配置 |
内存 | 最大 32GB | 最大 64GB |
机架式还是桌面式 | 只有机架式 | 机架式或桌面式 |
内部存储 | 最大 570GB | 最大 1.1TB |
集成的以太网端口 | 两个 10/100/1000 Mbps 以太网端口 | 两个 10/100/1000 Mbps 以太网端口 |
PCI-X 插槽 | 3 | 5 |
IBM eServer p5 是下一代的 IBM eServer pSeries 服务器。eServer p5 服务器是为那些企业级的 UNIX客户以及那些希望使用可扩展性最好并且最可靠的 Linux 和 AIX 服务器的用户设计的。另外,在 eServer p5 的产品线中,也有一部分模型可以支持 IBM i5/OS。
表 2 对 IBM eServer p5 520、IBM eServer p5 550、IBM eServer p5 570 和 IBM eServer p5 575 模型中的配置进行了总结:
表 2. IBM eServer p5 服务器模型
| p5 520 | p5 550 | p5 570 | p5 575 Cluster Node |
处理器 | 1.65GHz POWER5 处理器 | 1.65GHz POWER5 处理器 | 1.65GHz 或 1.90GHz POWER5 处理器 | 1.90GHz POWER5 处理器 |
处理器配置 | 1 路或 2 路配置 | 2 路或 4 路配置 | 2 路、4 路、8 路、12 路或 16 路配置 | 8 路 SMP 配置 |
内存 | 最大 32GB | 最大 32GB | 2GB 到 512GB | 最大 256GB |
机架式还是桌面式 | 机架式或桌面式 | 机架式或桌面式 | 只有机架式 | 24 英寸框架 |
内部存储 | 最大 1.1TB | 最大 1.1TB | 6 块热插拔的磁盘,每个构造块最大 880GB(16 路的机器中 4 个模块最大 3.5TB) | 两个标准的热插拔插槽,最大 293.6GB |
集成的以太网端口 | 两个 10/100/1000 Mbps 以太网端口 | 两个 10/100/1000 Mbps 以太网端口 | 每个构造块中集成了 1 个千兆以太网端口 | 四个 10/100/1000 Mbps 以太网端口 |
PCI-X 插槽 | 6 | 5 | 每个构造块 6 个 | 4 |
IBM eServer p5 510、IBM eServer p5 595 和 IBM eServer p5 595 模型都可以使用。
IBM eServer i5
IBM eServer i5 是下一代的 IBM eServer iSeries 服务器。eServer i5 服务器为 IBM i5/OS、IBM AIX 5L、MicrosoftWindows和 Linux 解决方案提供了一种随需应变的计算环境。这些高度集成的服务器设计用来通过增强服务器的能力来降低复杂度并提高服务器的生产率。
eServer i5 模型包括 eServer i5 520、eServer i5 550 和 eServer i5 570。这些服务器与它们的 pSeries 对应型号的配置非常类似,但是都有自己的区别。eServer p5 和 eServer i5 之间的主要区别在于服务分区的定义。简而言之,服务分区就是一个可以用来更新 POWER Hypervisor(POWER 处理器的基础固件)的分区。这是 IBM 虚拟引擎的神经中枢。eServer i5 Linux 分区不能用作服务分区,而 eServer p5 Linux 分区则可以用作服务分区。
IBM eServer BladeCenter JS20
eServer BladeCenter JS20 为客户提供了一种高密度型的服务器。在一个 42U 的机架中,最大可以安装 84 个 2 路的刀片服务器,这降低了对空间和制冷的要求。其模块化的设计可以帮助客户安全地进行扩充,并最有效地控制成本。
表 3 介绍了 eServer BladeCenter JS20 的一些基本配置:
表 3. IBM eServer BladeCenter JS20
eServer BladeCenter JS20 | |
处理器 | 1.6GHz 或 2.2GHz PowerPC 970 or 970FX 处理器 |
处理器配置 | 1 路或 2 路配置 |
内存 | 最大 4GB |
机架式还是桌面式 | 机架式 |
内部存储 | 最大 60GB |
集成的以太网端口 | 两个千兆以太网端口 |
表 4. 每个系列的服务器上的操作系统
| SLES 8(Linux) | SLES 9(Linux) | RHEL AS 4(Linux) | AIX 5L (5.2 & 5.3) | i5/OS | Windows |
eServer OpenPower | No | Yes | Yes | No | No | No |
eServer p5 | No | Yes | Yes | Yes | Yes | No |
eServer i5 | No | Yes | Yes | Yes | Yes | Yes |
eServer BladeCenter | Yes | Yes | Yes | Yes | No | No |
虚拟化
IBM Virtualization Engine(虚拟引擎)是一组系统技术和服务的集合,可以帮助聚集资源池,并可以访问这些分布在异构的分布式环境中的资源的一个逻辑视图。Virtualization Engine 系统技术是可选的(eServer i5 服务器除外,在这种服务器上,虚拟化是一个集成的特性),其中包含了很多创新技术,例如逻辑分区、微分区、动态逻辑分区、虚拟存储和虚拟以太网。在 eServer BladeCenter JS20 中没有虚拟化技术。
Linux on POWER 平台目前可以支持的 Virtualization Engine 技术有:
” 逻辑分区(LPAR)
” 微分区
” 动态逻辑分区(动态 LPAR)
” 共享处理器池
” 虚拟存储
” 虚拟磁盘
” CD-ROM、磁带和 DVD-ROM
” 虚拟以太网(VLAN)
逻辑分区(LPAR)
逻辑分区可以让多个操作系统同时共存于一个硬件平台中。系统资源进行了划分,这样分区之间就不能彼此进行交互。使用硬件管理终端(HMC)可以管理系统中的 LPAR。
微分区
微分区可以让 Linux 的分区小至处理器的 1/10,并以处理器的 1/100 进行增长。
动态逻辑分区(Dynamic LPAR)
动态 LPAR 可以动态添加或删除运行 2.6 版本的内核的 Linux 分区中的处理器和 I/O 插槽,而不用重新启动系统。这种技术在 eServer OpenPower、eServer p5 和 eServer i5 上都是使用 POWER Hypervisor 固件实现的,它提供了硬件资源管理、分区和根据需要扩充容量 (Capacity Upgrade on Demand,CUoD)的功能。目前还不支持动态内存迁移的功能。动态 LPAR 在使用可用资源和根据变化的业务需求而动态匹配资源方面提供了更好的灵活性。
共享处理器池
共享处理器池是一组物理处理器,它们可以提供强大的处理能力,并在多个逻辑分区之间进行共享。所有的分区在使用共享处理器时至少要配置使用 0.10 的处理单元。所支持的逻辑分区的最大个数取决于服务器型号中的处理器的个数;系统的限制为 254。图 1 可以认为是一个使用共享处理器池的环境的例子。
图 1. 共享处理器
图 1 给出了一个虚拟的 4 路机器的配置,它可以运行 i5/OS 或 AIX 5L。它还有 3 个额外的逻辑分区,假设第二个分区是一个事务型的服务器,正在处理金融事务;我们再假设这个事务型的应用需要与 AIX 5L 或 i5/OS 进行交互,从而向数据库中存储信息,或从数据库中检索信息。标记为 “Report” 的分区是这个事务服务器的姊妹应用,其作用是生成金融报告。为了负载均衡的目的,公司已经将将这个事务分区和报表分区划分开来,因为事务服务器是对响应时间非常敏感的,而生成报告的应用则可以在非峰值期间完成。最后一个分区是公司的开发和测试分区。这个分区用作工程师的开发空间。注意处理器是如何根据任务负载的情况进行划分的。
共享处理池中的分区可以有一种共享的 capped(有上限) 或 uncapped(无上限) 模式。所谓 capped 分区是指这个逻辑分区永远都不能超过分配给自己的处理能力。共享处理池中任何尚未使用的处理资源都只能由 uncapped 分区使用。
在定义一个分区的配置文件(profile)时,您可以指定一个分区到底是 capped 还是 uncapped 的。在定义分区时,您还可以设置它可以使用的处理器的最大值和最小值。
图 2 对这个例子进行了一些扩展,它增加了处理器的最大值和最小值:
图 2. 根据任务负载动态移动处理器资源
可以按需移动处理器的优点在这个假想的例子中得到了充分的证明。正如图 2 所示的一样,事务型服务器分配了 1.5 个处理器(这是最小值)。它还可以根据需要消耗第二个处理器的另外一半的处理能力以及第三个处理的全部处理能力。如果假设报表程序是在非峰值时运行的,此时系统可能具有更多的空闲时间,那么报表分区以及该分区上的应用程序就可以消耗最多两个虚拟的处理器,但是不能小于一个处理器的 3/4。对于测试分区来说也是如此。假设工程师需要编辑程序。如果编译是在系统中具有空闲处理能力时进行的,那么测试分区就可以消耗 3 个虚拟处理器,这样可以更快地完成编译过程。
uncapped 分区这种利用当前未使用的处理资源的能力是由 POWER Hypervisor 启用的。与动态的 LPAR 不同,这个特性在 2.4 和 2.6 内核中都是支持的。这些例子中,处理器共享实例是根据系统空闲部分进行的,因此其他分区可以使用这些可用的资源;然而,当然也有些时候会发生这样的情况:多个分区同时需要更多处理资源。现在考虑这样一个例子:报表和事务型服务器都因为出现峰值的任务负载而同时需要更多处理资源。对于您的业务来说,事务型服务器及时响应是非常关键的,因此您可能希望事务型服务器在报表分区之前使用这些虚拟的处理资源。这是一个很好的例子,它说明了在哪些时候为处理资源设置权重非常重要。uncapped 分区的权重是一个数字,范围从 0 到 255,您可以为共享处理池中的每个 uncapped 分区都设置这个权重值。通过设置 uncapped 权重,任何可用而目前尚未使用的处理能力都可以按照所设置的 uncapped 权重值的比例分发到各个逻辑分区上。uncapped 权重默认为 128。
在事务型服务器和报表服务都处于峰值时,就可以设置权重来判断应该怎样分配处理器。例如,图 3 显示为事务服务器设置的权重为 2 个处理器单元,为报表服务器设置的权重为 1 个处理器单元。这意味着在峰值每个处理器单元都是可用的,POWER Hypervisor 会为事务服务器分配两个处理器单元,为报表服务器分配一个处理器单元。
图 3.
虚拟存储
对于存储和 I/O 来说,Linux 可以利用很多真实的设备和虚拟设备。这种灵活性可以非常经济地设置 Linux 分区。就磁盘来说,Linux 逻辑分区可以支持 3 个不同的存储选项:
” 内部存储,使用 SCSI 适配器和专门用于这个分区的驱动器。
” 外部存储,使用专门用于这个分区的 SAN 适配器。
” 虚拟存储,使用其他分区中的虚拟的 SCSI 适配器和存储。
虚拟磁盘
虚拟存储允许在一个基于 POWER5 处理器系统中的多个分区共享存储设备。一个分区(I/O 服务器分区)中拥有物理的适配器和存储设备(可以是内部存储,也可以是外部存储)。虚拟适配器可以让其他分区(I/O 客户机分区)使用 I/O 服务器分区中的存储设备。I/O 服务器分区可以是 AIX 5L、Linux(2.6 版本的内核)或 i5/OS。
节省磁盘驱动器的费用并不是虚拟磁盘的惟一优点。例如,在小型的机器上,添加磁盘和控制器可能是一个挑战,可能需要购买扩展单元。而且,虚拟磁盘易于使用主机系统进行管理、备份和复制。图 4 解释了一个宿主分区如何为 Linux 分区提供虚拟磁盘:
图 4. 为其他 Linux 分区提供虚拟磁盘的 AIX 5L 或 I5/OS 分区
CD-ROM、磁带和 DVD-ROM
您也可以将 AIX 5L V5.3、Linux(2.6 版本的内核)或 i5/OS 所有的 SCSI 设备与 Linux 分区共享。它们的工作模式类似于上一节中介绍的虚拟磁盘。如果 AIX 5L 、Linux(2.6 版本的内核)或 i5/OS 具有 CD-ROM、磁带设备或 DVD-ROM 驱动器,而如果宿主分区现在没有使用这个设备,那么 Linux 就可以使用这些设备,仿佛它们就是物理地连接在这个 Linux 分区上一样。虚拟的 SCSI 设备的优点与虚拟磁盘相同,硬件费用更低,不需要为每个分区都使用一个专用的设备。
虚拟以太网(VLAN)
基于 POWER5 处理器系统上的 Linux 可以通过一个直连的网络接口或通过一个虚拟以太网接口来建立 TCP/IP 连接。虚拟以太网的功能基本上相当于一块千兆以太网适配器。基于 POWER5 处理器的服务器中的分区可以通过虚拟以太网通信端口使用 TCP/IP 与其他分区进行通信。
您最多可以定义 4,094 个单独的虚拟以太网(VLAN)。每个分区都可以最多有 65,534 个虚拟以太网适配器连接到虚拟交换机上。每个适配器都可以连接到 21 个 VLAN 上。启用和设置虚拟以太网并不需要任何特殊的硬件或软件。在为一个分区启用一个特定的虚拟以太网之后,就会为这个分区创建一个名为 ethXX 的网络设备。然后您就可以配置 TCP/IP 与其他分区进行通信了。
我们再来看”共享处理器池”中的例子。在这个场景的描述中,事务服务器使用了一个 AIX 5L 或 i5/OS 分区中的数据库来存储或检索信息。这是虚拟以太网非常典型的一种用法,因为通信的速度很快,不需要其他硬件。图 5 介绍了一个具有两个虚拟以太网的例子:
图 5. VLAN 是分区间进行通信的一种快速而经济的方式
然而,在大部分情况中,您可能希望允许连接到虚拟以太网上的那些分区也可以与物理网络进行通信。这需要至少有一个分区同时具有一个物理以太网适配器和一个虚拟以太网适配器,后者连接到其他分区上,如 图 6 所示。拥有这两个适配器的分区可以对物理以太网和虚拟以太网之间的通信进行路由。
图 6. 同时具有物理和虚拟网络连接的分区可以对物理以太网上的通信进行路由
将分区连接到物理网络上的一种常见的方法是在您的分区中运行一个防火墙。在这个防火墙分区中,您可以有一个网卡直接连接到物理网络上,如图 6 所示。其他分区然后可以通过 VLAN 和防火墙传递报文而与物理网络进行通信。VLAN 在 Linux、i5/OS 和 AIX 5L V5.3 中都可以使用。
Linux on POWER 操作环境概述
有很多 Linux 发行版都可以在 POWER 和 PowerPC 架构上运行。IBM 目前在自己的基于 POWER 处理器的服务器上可以支持以下发行版:
” SUSE LINUX Enterprise Server(SLES):SLES 的最新发行版本是版本 9,本文以后都称之为 SLES9。
” Red Hat Enterprise Linux Advance Server(RHEL AS):RHEL AS 的最新发行版本是版本 4,本文以后都称之为 RHEL4。
这两个发行版的最新版本都是在 Linux 2.6 版本的内核基础上构建的,与早期的 2.4 版本的内核相比,有很多特性和功能的改进,还可以利用本文前面介绍过的 POWER5 的很多虚拟化技术。
二进制兼容性
二进制兼容性是将一个二进制文件在给定的处理器家族的多个 Linux 发行版上运行的能力。这些环境可以是相同发行版的不同版本,也可以是完全不同的发行版。例如,一个程序是在基于 POWER4 处理器并运行 SLES9 的系统上编译的,那么它也可以在一个基于 POWER5 但同样运行 SLES9 的系统上运行。另外一个例子是,一个程序是在一个基于 POWER4 并运行 RHEL3 的系统上编译的,它可以在一个基于 POWER5 处理器的且运行 SLES9 的系统上运行。
从硬件指令集的观点来看,在 POWER4 硬件上编译的代码应该有很大的可能可以在 POWER5 和 PowerPC 970(FX)硬件上不加任何修改就可以运行。然而,这要取决于 gcc、libc、中间件、Java 以及发行版本身的支持程度,它们最终会决定应用程序在不同的硬件版本之间的兼容性。例如,如果您所安装的发行版在 POWER4 硬件和 POWER5 硬件上是完全相同的,那么在任何一个硬件平台上编译的应用程序都是兼容的。
Red Hat 在 RHEL3 和 RHEL 4 之间支持 32 位和 64 位的向前兼容性和向后兼容性,而 SLES8 只支持在从 SLES8 到 SLES9 迁移时的 32 位向后兼容性。这意味着那些在运行 SLES8 的基于 POWER 处理器的系统上使用 32 位模式开发的应用程序在部署到 SLES9 上时,只需要适当的测试,从而确保兼容性即可。对于所有在 SLES8 上开发的 64 位应用,在迁移到 SLES9 上时,都必须重新进行编译,并进行适当的测试。下表对 RHEL3 与 RHEL4 之间以及 SLES8 与 SLES9 之间的向前兼容性和向后兼容性进行了总结。
表 5. Linux 发行版之间的向前兼容性和向后兼容性
发行版 | 32 位 | 64 位 |
RHEL3 到 RHEL4 | Yes | Yes |
RHEL4 到 RHEL3 | Yes | Yes |
SLES8 到 SLES9 | Yes | No |
SLES9 到 SLES8 | No | No |
SLES 9 和 RHEL4 都是基于 2.6 版本的内核的。
2.6 内核的特性
2.6 版本的内核是最新的 Linux 内核。通过运行 2.6 版本的内核,Linux 可以从使用 2.4 版本的内核所不具备的很多新特性获益。尽管您可以下载并编译自己定制的内核,但是值得注意的是,Linux 发行商自己会决定自己使用并支持哪个内核。因此,如果您的发行版本碰巧运行的是一个打过补丁的 2.4 版本的内核,那么您就无法使用以下这些 2.6 版本的内核所提供的新特性,但新线程模型除外,它在某些 2.4 版本的内核也是可用的。
巨页
2.6 版本的内核支持两种虚拟页的大小:传统的 4KB 页和 16MB 页。巨页的使用主要是为了改进那些对内存访问敏感的程序的性能。使用巨页支持之后,应用程序就可以将自己的文本段和数据段放在一个巨页(16MB)中运行了,而不用修改任何代码。性能的改进是由于降低了 TLB(translation lookaside buffer)的缺页率。这是因为 TLB 可以映射一个更大的虚拟内存范围了。巨页还可以改进内存预取的效率:它不用根据 4KB 的边界来反复执行预取操作了。
PCI 热插拔
这种功能允许您在保证操作系统持续运行时将 PCI 热插拔适配器插入一个可用的 PCI 插槽中。这个适配器可以与目前安装的适配器类型相同,也可以是不同类型的 PCI 适配器。不必重新启动系统,操作系统和应用程序就可以直接使用这些新资源。也无需关闭系统,就可以使用一块相同类型的适配器来替换一块有问题的 PCI 热插拔适配器。当您更换适配器时,现有的设备驱动程序可以支持新的适配器,因为它们的类型相同。设备配置和有关适配器底层的设备配置信息在替换设备时都可以保留下来。
虚存(VM)
2.6 版本的内核为虚存到物理页面的映射提供了一种有效的算法,称为反向映射(reverse mapping)。它可以对内存交换进行更智能的判断。在特殊的负载情况下,这可以极大地改进 VM 操作的性能。
调度程序
2.4 版本的内核中的调度程序在 SMP 系统中当进程完成自己的时间片并等待重新分配时会导致大部分 CPU 都处于空闲状态。另外,当空闲的 CPU 开始执行处于等待状态的进程时,有时会导致将某些进程在多个处理器之间产生乒乓效应。而 2.6 版本的内核解决了这个问题。新的调度程序还可以提高负载均衡能力和交互式应用程序的性能。
内核抢占
在 2.4 版本的内核中,不可能抢占正在内核态下执行的任务,包括使用系统调用进入内核态的用户任务,除非该任务自动放弃 CPU。在 2.6 版本的内核中,内核任务是可以被抢占的。这不但可以提高用户的交互式应用程序的性能,而且可以用于嵌入式设备和实时系统。
线程模型
在 2.6 版本的内核中采用了改进的线程模型 NPTL(Native POSIX Thread Library),其中内核线程与用户线程的相关度为 1:1。NPTL 的性能可以显著地超过 Linux Threads(在 2.4 版本的内核中实现的线程模型)。NPTL 对于多线程的企业级应用程序非常有价值,尤其是 Web 服务器和基于 Java 的应用程序。而且, 2.6 版本的内核还可以处理 10 亿个进程 id (PID),在 2.4 版本的内核中,这个限制是 32,000。
块 I/O 操作
块 I/O 操作在 2.6 版本的内核中进行了重写,这可以提高性能和错误处理能力。新的块 I/O 操作缓冲区可以让每个 I/O 请求的大小大于 PAGE_SIZE。同时对于 SCSI 的支持也有很大的提升。
异步 I/O(AIO)
尽管在用户级的线程基础上已经可以支持异步 I/O 操作,但是直到 2.6 版本的内核开始,这种功能的实现才使用了内核的支持。AIO 操作是在后台运行的,它不会阻塞用户的应用程序,从而可以提高性能,这是因为 I/O 操作可以与用户的应用程序同时运行了。很多应用程序,例如 Web 服务器、数据库和文件服务器,都可以利用这种功能进行重叠的处理和 I/O 操作。
其他改进
2.6 版本的内核中的其他改进包括:
” 所支持的用户和组数目已经从 65,000 增加到了 40 亿。
” PID 的数目已经从 32,000 增加到了 10 亿。
” 最大可以支持 16 TB 的文件系统。
” 打开文件个数的限制不再需要提前设置。
编译器
在 Linux on POWER 上可以使用以下的编译器:
” IBM XL C/C++
” IBM XL Fortran
” GNU 编译器集(GCC)
IBM XL C/C++ Version 7.0 是一种高性能的编译器,可以在 RHEL4 和 SLES9 中使用,它们改进了基于 POWER5 处理器系统的性能。-qarch 和 -qtune 选项用来对各自的架构进行优化。例如,要对 POWER5 平台进行优化,就可以使用下面的选项: -qarch=pwr5 和 -qtune=pwr5。
IBM XL C/C++ 编译器中的 -qaltivec 选项用来启用 IBM eServer BladeCenter JS20 中 PowerPC 970 和 970FX 处理器的 VMX 特性。
GCC 中包含了很多不同语言的编译器。从 3.2 到 3.3 有很多改进,包括 POWER 处理器对它的 C 编译器 gcc 的特有优化。
-mcpu=power5 和 -mtune=power5 标记现在都可以支持了,这样可以生成只用于 POWER5 架构的指令。还有一些对 IBM PowerPC 970 和 970FX 处理器的 VMX 向量扩展,这可以提高向量化代码的性能。
由于 IBM XL C/C++ 编译器使用了更多的 POWER5 高级硬件特性,它为所编译的程序提供了更好的性能,不过使用 gcc 编译的程序的可移植性更好。
下表对 GCC 和 XL C/C++ 中常用的编译选项进行了比较:
表 6. GCC 和 XL C/C++ 中常用的编译选项
GCC | XL C/C++ | 说明 |
-v | -v, -V, -# | 打开详细模式 |
-m32, -m64 | -q32, -q64, 或设置 OBJECT_MODE 环境变量 | 创建一个 32 位或 64 位的对象。GCC 64 位的编译器位于 /opt/cross/bin 中 |
-fsyntax-only | -qsyntaxonly | 只检查语法,而不生成对象文件 |
-fpic | -qpic=small | 生成共享库中使用的 Position-Independent Code。在 XL C/C++ 中,Global Offset Table 的大小不超过 64 Kb。如果指定 –qpic,而无任何子选项,则假设 -qpic=small。如果指定了 -qmkshrobj 编译器选项,则启用 -qpic 选项 |
-fPIC | -qpic=large | 允许 Global Offset Table 大于 64 Kb |
-pthread | -qthreaded or _r invocation mode | 创建在多线程环境中运行的程序 |
-fno-rtti | -qnortti | 对于异常处理和 typeid 和 dynamic_cast 操作符的使用,禁止生成运行时类型 –qrtti 识别(RTTI)。在 XL C/C++ 中,默认值为 -qnortti |
-static | -qstaticlink | 使用这个选项生成的对象将无法与共享库进行链接 |
-static-libgcc | -qstaticlink=libgcc | 指示编译器与 libgcc 的静态版本链接 |
-shared | –qmkshrobj | 指示编译器生成共享对象 |
-shared-libgcc | -qnostaticlink=libgcc | 指示编译器与 libgcc 的共享版本链接 |
-Wl,-rpath | -Wl,-rpath 或 –R | 传递用冒号分隔的目录列表,用它来指定运行时链接程序搜索的目录 |
-fno-implicit-templates, -frepo | -qtempinc, | 模板实例化 |
-w | -w | 取消警告消息 |
| -warn64 | 允许对长型到整型的截断舍位(long-to-integer truncation)进行检查 |
| -qinfo=<…> | 生成信息消息 |
-fpack-struct | -qalign=bit_packed | 使用 bit_packed 排列规则 |
| -qalign=linuxppc | 使用默认 GCC 排列规则来维护与 GCC 对象的兼容性。这个值是默认值 |
-O,-O2,-O3 | -O,-O2,-O3,-O4,-O5 | 优化级别 |
| -qarch, -qtune, -qcache | 处理器特有的优化选项 |
本文为 Linux 开发人员概要介绍了 IBM 最新的基于 POWER5 和 PowerPC 970(FX)处理器的系统,并重点介绍了在这些系统上可以使用的几种新技术。最后,还介绍了有关为 eServer OpenPower、eServer p5、eServer i5 和 eServer BladeCenter JS20 定制的 Linux 发行版,内容包括二进制兼容性、编译器和其上可以使用的软件。