级别: 初级 Matt Davis, Linux 顾问, IBM Chakarat Skawratananond (chakarat@us.ibm.com), 技术顾问, IBM Nikolay Yevik, Linux 顾问, IBM
2004 年 12 月 10 日 在文中,我们重点介绍了 Linux 内核版本 2.4 与 2.6 在 POWER 上的区别。
Linux 内核 2.4 与 2.6 在 POWER 上的区别
模块子系统(Module Subsystem)、统一设备
模型(Unified Device Model)和 PnP 支持
模块子系统发生了重大变化。
稳定性有所提高
为了彻底避免内核加载或者导出正在被使用的内核模块,或者至少为了减少加载或者卸载模块的同时使用该模块的可能性(这有时会导致系统崩溃),内核加载和导出内核模块的过程都得到了改进。
统一设备模型
统一设备模型的创建是 2.6 内核最重要的变化之一。它促进了模块接口的标准化,其目的是更好地控制和管理设备,例如:
- 更准确地确定系统设备。
- 电源管理和设备电源状态。
- 改进的系统总线结构管理。
即插即用(PnP)支持
1.1.1 和 1.1.2 小节中提及的变化使得运行 2.6 内核的 Linux 成为一个真正即插即用的 OS。
例如,对 ISA PnP 扩展、遗留 MCA 和 EISA 总线以及热插拔设备的 PnP 支持。
内核基础设施的变化
-
为了区别以 .o 为扩展名的常规对象文件,内核模块现在使用的扩展名是 .ko。
-
创建了新的 sysfs 文件系统,当内核发现设备树时就会描述它。
内存支持,NUMA 支持
支持更大数量的 RAM
2.6 内核支持更大数量的 RAM,在分页模式下最高可达 64GB。
NUMA
对非一致内核访问(Non-Uniform Memory Access - NUMA)系统的支持是 2.6 内核中新出现的。
线程模型,NPTL
相对于 v2.4 的 LinuxThreads,在版本 2.6 中新出现的是 NPTL(Native POSIX Threading Library)。
NPTL 为 Linux 带来了企业级线程支持,提供的性能远远超过了 LinuxThreads。它所基于的用户与内核线程
的比率是 1:1。
在 2003 年 10 月,GNU C 程序库 glibc 中融入了 NPTL 支持,Red Hat 率先在 Red Hat Linux 9 和
Red Hat Enterprise Linux 中使用定制的 v2.4 内核实现了 NPTL。
性能改进
- 新的调度器算法
-
2.6 Linux 内核引入了新的 O(1) 算法。在高负载情况下它运行得特别好。新的调度器基于每个 CPU
来分布时间片,这样就消除了全局同步和重新分配循环,从而提高了性能。
- 内核抢占(Kernel Preemption)
-
新的 2.6 内核是抢占式的。这将显著地提高交互式和多媒体应用程序的性能。
- I/O 性能改进
-
Linux 的 I/O 子系统也发生了重大的变化,通过修改 I/O 调度器来确保不会有进程驻留在队列中
过长时间等待进行输入/输出操作,这样就使得 I/O 操作的响应更为迅速。
- 快速用户空间互斥(Fast User-Space Mutexes)
-
“futexes”(快速用户空间互斥)可以使线程串行化以避免竞态条件,引入它也提高了响应速度。
通过在内核空间中部分实现“futexes”以允许基于竞争设置等待任务的优先级而实现改进。
扩展性改进
- 处理器数目更多
-
Linux 内核 2.6 最多可以支持 64 个 CPU。
- 支持更大的内存
-
归功于 PAE(物理地址扩展,Physical Address Extensions),在 32-位系统上分页
模式下所支持的内存增加到了 64GB。
- 用户和组
-
惟一用户和组的数量从 65,000 增至 40 多亿,也就是从 16-位增加到了 32-位。
- PID 的数量
-
PID 的最大数量从 32,000 增至 10 亿。
- 打开文件描述符的数量
-
打开文件描述符的数量没有增加,但是不再需要事先设置该参数,它将自行调节。
- 支持更多的设备
-
在 Linux 内核 2.6 之前,内核中有可以约束大型系统的限制,比如每条链 256 个设备。v2.6 内核
彻底地打破了这些限制,不但可以支持更多类型的设备,而且支持更多同类型的设备。在 Linux 2.6 系统中,
可以支持 4095 种主要的设备类型,每一个单独的类型可以有超过一百万个子设备。
- 文件系统大小
-
Linux 内核 2.6 所允许的可寻址文件系统大小最大为 16 TB。
文件系统
ext2、ext3 和 ReiserFS 等传统 Linux 文件系统得到了显著的改进。最值得注意的改进是扩展属性
(或文件元数据)的引入。最重要的是 POSIX ACL 的实现,这是对普通 UNIX 权限的扩展,
可以支持更细化的用户访问控制。
除了对传统 Linux 文件系统的改进支持以外,新的内核完全支持在 Linux 中相对较新的 XFS 文件系统。
Linux 2.6 内核现在还引入了对 NTFS 文件系统的改进的支持,现在允许以读/写模式安装 NTFS 文件系统。
用于 POWER5 的 Linux 发行版本的新特性
将运行于基于 POWER5 的系统之上的 Linux 发行版本是 SUSE LINUX Enterprise Server 9(SLES 9)和
安装了第三版服务包的 Red Hat Enterprise Linux Advanced Server 3(RHEL AS 3 Update 3)。
在 2004 年这两个发行版本将广为可用。SLES 9 基于 Linux 内核 2.6。RHEL AS 3 Update 3 基于 Linux
内核 2.4。SLES 9 和 RHEL AS 3 Update 3 也都同样可以运行在 POWER4 硬件之上。下面的表着重指出了
两种发行版本对 POWER5 特性的支持。
| 功能 |
SLES 9 |
RHELAS 3 Update 3 |
| 动态 LPAR |
|
| | -- 处理器 | 支持 | 不支持 | | -- 内存 | 不支持 | 不支持 | | -- I/O | 支持 | 不支持 | | --最多 254 个分区 | 支持 | 支持 | | 0.1 粒度的子处理器分区 | 支持 | 支持 | | -- 有上限的和无上限的分区 | 支持 | 支持 | | -- 并发多线程 | 支持 | 支持 | | 存储选项 |
|
| | 虚拟 SCSI 服务器 | 不支持 | 不支持 | | 虚拟 SCSI 客户机 | 支持
i5 本身
安装 AIX 5.3 的 p5
| 支持
i5 本身
安装 AIX 5.3 的 p5
| | 通信选项 |
|
| | 虚拟局域网 | 支持 | 支持 | | 大页(Large Page)支持 | 支持 | 不支持 | | PCI 热插拔 | 支持 | 不支持 | | SUE 机器检查处理 | 支持 | 支持 |
下面,我们详细描述那些特性。
动态逻辑分区(动态 LPAR)
逻辑分区使得多个操作系统可以同时共存于同一硬件平台之上。系统资源可以被划分,这样各个分区就不会互相影响。可以通过硬件管理控制台(hardware management console,HMC)来管理系统中的 LPAR。
使用动态 LPAR,不需要重新引导分区就可以动态地添加和删除资源。当需要添加这些资源时,管理员可以
重新配置系统,使其识别出这些附加的资源。所支持的逻辑分区的最大数目取决于服务器模型中
处理器的数目,系统限制是 254。是否采用动态 LPAR,最终由 Linux 的发行者和 2.6 内核的用途所
决定。SLES 9 支持处理器和 I/O 的动态移动。RHELAS 3 Update 3 不支持动态 LPAR。
子处理器分区
可以配置给任何使用共享处理器的分区的最小单位是 0.10 处理单元。可以由多个逻辑分区共享的一组物理
处理器称为共享处理池。共享处理器功能使得您可以将处理器的一部分分配给某个逻辑分区。
图 1 可以认为是使用共享处理器池环境的一个示例。此图描述的是一个假想的运行着 i5/OS 或者 AIX 的
4-路机器设置。它还有三个另外的逻辑分区。我们假定第二个分区是处理财务事务的事务服务器;此外,还假定该
事务处理应用程序将与 AIX 或 i5/OS 进行交互,存储和获取它在数据库中的信息。标记为“Report”的分区
是事务服务器的姊妹应用程序(sister-application),它将生成财务报表。为了实现负载平衡,公司将事务和报表分区独立出来,因为事务服务器对时间和响应很敏感,而报表的生成可以在不忙的时候进行。最后一个分区是
公司的开发和测试分区。这个分区是公司工程师的开发空间。注意,处理器是如何基于工作负载在四个分区之间
进行分配的。
图 1. 共享处理器示例
共享处理池中的分区的共享模式可以是有上限的(capped),也可以是无上限的(uncapped)。有上限的分区
表示那个逻辑分区永远不能超出分配给它的处理能力。所有没有被使用的资源将只能由共享处理池中无上限的
分区所使用。当定义分区的属性时,可以指定分区是有上限的还是无上限的。当定义一个分区时,还可以设置
最小的和最大的处理器值,这个值可以用数字或者分数来表示处理器能力。这非常适用于前面描述的示例。图 2
是先前示例的演化,不过现在指明了最小和最大值。
图 2. 基于工作负载动态调动处理器能力
在这个假定的示例中,可以根据需要动态移动处理器,其好处显而易见。事务和报表分区的负载明确指出非常需要
进行动态处理器分配。事务服务器被分配了一个半处理器(最少)。它还可以根据需要使用第二个虚拟处理器的
其余一半以及第三个虚拟处理器的全部。如果您假定是在系统有更多空闲时间的非繁忙时段内生成报表,那么报表
分区及其应用程序最多可以使用两个虚拟处理器,不过最少不能少于四分之三个处理器。测试分区也是如此。
假定工程师需要编译他们的应用程序。如果在有空闲处理能力时进行编译,那么测试分区最多可以使用三个
虚拟处理器,以使得编译可以更快完成。
这些处理器共享实例的前提很大程度上是系统处于空闲而使得其他分区可以使用资源,但是,肯定会有某些时间多个分区
都在请求更多处理能力。考虑一个例子,由于工作负载激增,报表分区和事务分区都请求更多处理器资源。由于对您的
业务来说事务服务器的及时响应是最关键的,所以您更愿意让事务服务器比报表服务器获得更多虚拟处理能力。在这种
情形下,为处理能力设置权重变得重要起来。
无上限的权重是一个从 0 到 255 的数字,您可以为共享处理池中的每一个无上限分区设置它。通过设置无上限权重
(255 是最高权重),所有可用的空闲能力都根据无上限权重已经确定的值分布到竞争的逻辑分区。默认的无上限权重
值是 128。
图 3. 权重决定空闲处理器的分布
在事务和报表服务器负载都激增的情况下,可以设置权重来决定如何分配处理器。在图 3 中,事务服务器的
权重设置为 2,报表服务器的权重设置为 1。所以,在峰值期间,每当三个处理单位可用时,系统管理程序将
把两个处理器单位分配给事务服务器,把一个处理器单位分配给报表服务器。
同步多线程
POWER5 体系结构的特色之一是同步多线程技术。POWER4 微处理器每个时钟周期收集一组指令(最多有 5 个),
并在每个时钟周期内完成一组指令。POWER5 微处理器使此吞吐量增加了一倍,每个时钟周期收集两组指令(每组最多有五个),
并在每个时钟周期内完成两组指令。SLES 9 和 RHEL AS 3 Update 3 都支持这项技术。
存储器选项
对于存储器和 I/O,Linux 可以利用多种真实设备和虚拟设备。这一灵活性使得高效地设置 Linux 分区成为可能。
就磁盘而言,Linux 逻辑分区支持三种不同的存储器选项。
- 专用于分区的使用 SCSI 适配器和驱动器的内部存储器。
- 专用于分区的使用 SAN 适配器的外部存储器。
- 使用虚拟 SCSI 适配器的虚拟存储器和不同分区中的存储器。
虚拟磁盘
虚拟磁盘使得基于 POWER5 的系统中的多个分区可以共享存储器。有一个分区,即 I/O 服务器分区,持有物理适配器
和存储器(可能是内部的或者外部的)。虚拟适配器允许其他分区,即 I/O 客户机分区,使用 I/O 服务器分区的
存储器。I/O 服务器可以是 AIX 和 i5/OS。SLES 9 和 RHEL AS 3 Update 3 都对此提供了支持。
图 4. AIX 或者 i5/OS 可以为 Linux 分区提供虚拟磁盘
图 4 以图形方式描述了宿主分区如何向 Linux 分区提供虚拟磁盘。使用虚拟磁盘的好处不只是节省磁盘驱动器的费用。
在较小的机器上,添加磁盘和控制器可能是一个难题,还可能需要购置一个扩展单元。另外,宿主系统可以管理、备份和
快速复制虚拟磁盘。
CDROM、磁带和 DVD-ROM
您也可以与 Linux 分区共享 AIX 5.3 或 i5/OS 所拥有的 SCSI 驱动器。这非常类似于虚拟磁盘功能。
如果 AIX 或 i5/OS 拥有一个 CDROM、磁带驱动器或者 DVDRAM 驱动器,那么,Linux 就可以使用这些设备,
就像它们已经物理地连接到 Linux 分区上一样,只要宿主分区没有正在使用这个设备。虚拟 SCSI 设备的好处与
虚拟磁盘几乎相同;更少的硬件费用,不需要为每个分区专门配置设备。
通信选项
基于 POWER5 的系统上的 Linux 可以通过直接相连的网络接口或者虚拟的以太网接口建立 TCP/IP 连接。
虚拟以太网提供了与 1 Gigabit 以太网适配器大致相同的功能。基于 POWER5 的服务器中的分区可以使用
TCP/IP 通过虚拟以太网通信端口互相通信。
您可以定义最多 4,094 个独立的虚拟以太网 LAN(VLAN)。每个分区可以有最多 65,534 个虚拟以太网适配器连接
到虚拟交换机上。每个适配器可以连接到 21 个 VLAN。建立和设置虚拟以太网不需要任何专门的硬件或软件。
当您为某个分区启用了一个具体的虚拟以太网之后,在那个分区中就会创建出一个名为 ethXX 的网络设备。
然后用户就可以建立起与其他分区进行通信的 TCP/IP 配置。
让我们再次考虑第 7 页上子处理器分区部分中的例子。在情形的描述中,事务服务器使用 AIX 或 i5/OS 分区中的
数据库来存储和获取信息。这是虚拟以太网的一个非常典型的应用,因为通信速度非常快,而且不需要任何另外的硬件。
图 5 展示的是添加了两个虚拟以太网 LAN 的示例。
图 5. 虚拟以太网 LAN 是分区彼此通信的快速而高效的途径
不过,在大部分情况下,您需要连接到虚拟以太网的分区也能够与物理网络进行通信。但这需要至少有一个分区既拥有物理以太网适配器,又拥有连接到其他分区的虚拟以太网适配器。拥有这两种适配器的分区可以路由物理以太网和虚拟以太网之间的传输。
图 6. 某个分区同时拥有物理的和虚拟的网络连接,可以将传输路由到物理 LAN
将分区连接到物理网络的一个常见方法是在某个分区上运行防火墙。在防火墙分区中,您可以拥有一个直接连接到物理
网络的网络接口,如
图 6 所示。然后其他分区就可以以通过虚拟 LAN 和防火墙传递传输的方式
来与物理网络进行通信。
到撰写文本时,SLES 9 和 RHEL AS 3 Update 3 都已经可以使用虚拟 LAN。
大页支持
在 2.6 内核中,支持两种虚拟页大小:传统的 4 KB 页大小以及 16 MB 页大小。使用大页主要是为提高
内存访问频繁的应用程序的性能。有了大页的支持,无需修改应用程序的代码就可以在运行时使用得到
大页(16MB)支持的文本和数据。性能的提高归功于转换表缓存区(translation look aside buffer,TLB)失败
的减少。这是因为 TLB 能够映射更大的虚拟内存范围。由于不再需要在 4 KB 边界重新进行预取,大页还
改进了内存预取的性能。大页在 SLES 9 中得到了支持,但没有在 RHEL AS 3 Update 3 中获得支持。
PCI 热插拔(hot plug)
有了这种能力,您就可以在操作系统正在运行时向一个可用的 PCI 插槽中插入一个新的 PCI 热插拔适配器。
这可以是与当前已经安装的相同类型的另一块适配器,也可以是不同类型的 PCI 适配器。不需要重新启动,
操作系统和应用程序就可以使用新的资源。不需要关闭系统,您也可以将出现问题的 PCI 热插拔适配器替换
为同类型的另一块适配器。当您调换适配器时,现在的设备驱动程序会支持此适配器,因为它是同类型的。
设备配置以及关于此适配器之下设备的配置信息都会为接替的设备保留。PCI 热插拔在 SLES 9 中得到了支持,
但没有在 RHEL AS 3 Update 3 中得到支持。
SUE 机器检查处理
此能力使得系统可以标记出 Special Uncorrectable Errors(SUE),并杀死所有引用此资源的相关进程,而
系统可以继续运行,不需要重新引导来从错误中恢复。SLES 9 和 RHEL AS 3 Update 3 都支持这一特性。
开发工具链变化
随着 Linux 2.6 内核中的各种革新,程序库和用户空间开发工具也需要有相应的变化。本节将介绍 GNU 工具链
中的变化,涉及到 glibc、bintuils、as、ld 和 gcc。虽然本节的内容还远远不够完全,但它应该是一个不错的
起点参考资料,通过另外阅读一些可免费获得的源代码修改日志,可以补充这方面的知识。
Glibc
为了支持 2.6 内核中的新的以及得到改进的特性,也为了支持 POWER 体系结构的新的和扩展的功能,
glibc,即 GNU C 程序库,已经更新为版本 2.3。首先,变化的核心是用于 Linux 模型的 Native POSIX Threads。
国际化、网络接口编址和正则表达式的使用等也发生了变化。
- 国际化
-
通过允许 iconv 使用系统所在地点,国际化得到了改进。另外,还实现了 locale.h 的线程安全的接口。在这里
不再单独评论它们,不过,在可以免费获得源代码文档中有相关细节。
- 网络接口
- 通过一个 BSD 兼容的实现,改进了网络接口编址。
- 正则表达式
- 为了与 POSIX 兼容而进行重写之后,正则表达式的运行现在快了很多。
- Fexecve
-
Fexecve 被用来 exec 文件描述符,现在可以在 Linux 中启用它。
- Malloc
-
为了更快,更具兼容性,malloc 已经基于 Doug Lea 的 Malloc 2.7.0.c。
- 线程局部存储(Thread-locale storage)
-
实现了线程局部存储,为的是在线程中更快地收集和存储空对象,而现在这是由编译器来处理的。要获得更多信息,
请访问
http://people.redhat.com/drepper/tls.pdf,参阅 Ulrich Drepper 撰写的白皮书。
GNU binutils
GNU binutils 包括 ld、as 以及其他一些小实用程序,比如 objcopy 和 readelf。在这一次的发布中,这些小实用程序
并没有为了 2.6 内核或者 POWER 体系结构而发生明显的变化,它们的变化较小。例如,实用程序 readelf 现在
可以用来显示存档文件中文件的信息。在 binutils 的 Web 站点 http://sources.redhat.com/binutils/ 上可以
得到完整的改变记录。
AS 和 LD
AS 和 LD 在某些方面为 POWER 体系结构而发生了变化。不过,因为 POWER 体系结构与多种操作系统一起使用,
所以这些变化不全是针对 Linux 的特定需要。确实影响用于 POWER 上的 Linux 的变化包括,对 POWER opcode
的支持,VMX 扩展的增加(在基于 PPC970 的 Linux 中可用)。另外,现在可以使用对 POWER4 和 PPC970 芯片的优化配置文件(optimization profile)。默认的优化配置文件是 -maltivec,它支持 PPC970 中的 VMX 扩展。可以使用 -mpower4 进行 POWER4 优化。
GCC
为了支持 NPTL,GCC 发生了显著的变化,不过其他变化也不应该忽视。增加了很多用于 POWER 调度、优化和兼容方面的改进。
- DFA 调度器
-
用于指令的 DFA 调度器在 gcc 3.3.3 中得到了支持。通过
http://www.gnu.org/software/gcc/news/dfa/html
深入了解该项目。
- Directives
- 现在,在 C 宏的内部可以使用 directives。
- Includes
-
如果程序库已经在 path 中,那么 -I 程序库包含将被忽略。这样避免了程序库包含的意外次序问题。
- 对 POWER4 处理器的新的支持
- 对 POWER4 处理器具体优化的新的支持,即 -mpower4。
- 为 VMX 扩展所做的改进
-
针对 PPC970 芯片中的 VMX 扩展,有一些函数得到了改进。
- 与 ISO C99 更兼容
-
要了解当前的状态,请参阅 http://www.gnu.org/software/gcc/gcc-3.3/c99status.html 上的表。
参考资料
- 您可以参阅本文在 developerWorks 全球站点上的
英文原文。
作者简介  | |  |
Matt Davis 是 IBM eServer Solutions Enablement 团队的一名 Linux 技术顾问。
作为 Linux on POWER 项目的一名元老,他研究和测试了新近出现的
Linux on POWER 技术,并写了一些报告来总结他的发现。这其中包括 POWER 上 Linux
的日志文件系统(Journaling File Systems),利用 POWER 上的 Linux 进行并行网格计算,
POWER 上 Linux 商业软件的开放源代码方案,以及 Linux 解决方案编录,等等。
当他还是位于奥斯汀的得克萨斯州立大学的一名学生时(在那里他获得了两个学位),
他就以实习生的身份来到了 IBM。您可以通过 mattdavis@us.ibm.com 与他联系。
|
 | |  |
Chakarat Skawratananond 是 IBM eServer Solutions Enablement 组织的一名技术顾问,在那里,他
帮助独立软件开发商在 IBM pSeries 平台上使用他们的用于 AIX 5L 和 Linux 的应用程序。您可以通过
chakarat@us.ibm.com 与他联系。 |
 | |  | Nikolay Yevik 是 IBM eServer Solutions Enablement 团队的一名 Linux 技术顾问。
他有 5 年多的 C/C++ 和 Java 软件开发经验,以及 AIX 和 Linux 系统管理经验。他拥有石油工程和计算机科学
硕士学位。您可以通过 yevik@us.ibm.com 与他联系。
|
对本文的评价
|