在支持企业应用程序方面,Linux 2.6 内核做了很多改进。本文给出了 IBM Linux Technology Center 的 Web 服务测试工作的结果,从各个不同的角度对 Linux 2.4 和 2.6 内核进行了比较。其中的亮点是 2.6 内核的关键增强功能、测试方法学和测试本身的结果。最终结果:2.6 内核提供 Web 页服务要比 2.4 快得多,并且可靠性一点也不差。
在 IBM Linux Technology Center (LTC) 进行的 Linux Web 服务测试工作的目的是发现 Linux 内核的缺陷。测试着重于与实际情况中使用 Web 服务器/应用程序服务器的企业用户环境相关的工作负荷,也着重于提高 Linux 内核的稳定性、可扩展性以及 (内核) 与 Web 服务器/实用程序服务器的兼容性。最重要的并不是识别 Web 服务器和应用程序服务器的缺陷。
测试综述 两类 Web 服务测试
有两类服务器可以用于 Web 服务:Web 服务器和应用程序服务器。在本文中,我将使用术语“Web 服务”来统一表示它们。
Web 服务器 通过处理基于 HTTP 协议的请求来使网页显示在 Web 浏览器中。
应用程序服务器 是广义上的服务器,通过各种协议,其中可能包括 HTTP 协议,来向客户机应用程序公开业务逻辑。相对于 Web 服务器,它提供了更为复杂和强大的功能,例如会话管理、负载平衡、消息传递、事务管理、安全,等等。在某种意义上,应用程序服务器是 Web 服务器的超集。
我们为 Linux 内核测试环境选择了一些 Web 服务器和应用程序服务器,包括 Apache、Jakarta-Tomcat、IBM WebSphere Application Server 和 Jboss。这些大部分都是开放源代码项目,可以免费下载(请参阅 参考资料 的链接以获得更多关于这些服务器的信息)。
2.4 和 2.6 内核测试之间的差异 使用 Web 服务器和应用程序服务器作为测试工作负载,在 2.5/2.6 内核上的测试工作要比在 2.4 内核上详尽得多。在测试 2.4 内核时,仅用到了 Apache 和 WebSphere Application Server 这两个服务器作为综合测试方案的一部分。Web Performance Tool (WPT) 是所用的主要 Web 测试工具。出于偶然的机会,当内核中有大的改动或者需要验证软件,要进行 Web 服务测试。
在对 2.5/2.6 内核的测试中,我们制定了更为可靠和完整的测试计划 (请参阅 参考资料,获得 SourceForge 上关于2.5 测试计划和实施计划的链接)。在计划中制定了适当的测试范围、测试方法和测试时间线。在综合测试、重点测试和用户仿真测试中,Web 服务器和应用程序服务器测试被广泛用作测试工具。
除了使用更多的服务器以外,我们还使用了一些不同的 Web 客户机测试工具,包括 WPT、Hammerhead、Httperf 和 Pagepoker,来模拟不同类型的用户环境。所有服务器和客户机工具执行的持续时间不同 (24 小时和 96 小时),不同于持续时间固定的对最新可用内核的测试。
此外,测试硬件不局限于基于 Intel 的单处理器系统。测试在 1 路、4 路和 8 路 IBM xSeries 机器上和 64 位 IBM PowerPC 系统上进行。内核相关的缺陷在 Linux 内核缺陷追踪系统中公开。
2.6 内核的关键增强功能 Web 服务在企业界扮演着重要的角色。为支持企业应用程序,2.6 内核有了显著的改进和变化。新硬件支持、软件支持和内部的内核改进给 2.6 内核带来了更好的扩展性和稳定性。2.6 内核在跨多个 CPU 和大内存时的高负载情形下性能比 2.4 更好。2.6 中将有益于企业应用程序的一些关键特性包括:
新硬件支持 Linux 支持范围广泛的硬件平台。2.6 内核支持新的体系结构,例如 64 位 PowerPC、64 位 AMD Opteron 和嵌入式处理器。
超线程 超线程是 Intel 的一项创新,是 2.6 内核所支持的主要的硬件提高。基本来说,超线程可以通过同步多线程技术(simultaneous multi-threading technology,SMT)在单个物理处理器上创建多个虚拟处理器;多个应用程序线程可以同时在一个处理器上运行。为充分利用这一特性,应用程序需要是多线程的。
超线程给 Web 服务器和应用程序服务器带来了很多益处。它可以增加可处理的事务的数目,提供更快的服务器响应时间,并支持服务器处理更大的工作负载和更多的用户请求。当前,Intel Pentium 4 Xeon 处理器具有内置的超线程硬件。
NUMA(不一致内存访问,Non-Uniform Memory Access)
NUMA 是为提高系统性能添加到 Linux 2.6 内核的另一个主要特性。在支持多处理器的传统模型中(对称多处理,或者说是 SMP),每个处理器对内存和 I/O 有同等的访问权限。对处理器总线的高争夺率成为性能瓶项。NUMA 体系结构可以在不增加处理器总线负载的情况下提高处理器速度。在 NUMA 系统中,每个处理器距某部分内存较近而距其他内存较远。处理器被安排在称为“节点”的较小的区域中。每个节点有其自己的处理器和内存,节点间可以互相通信。处理器访问本地节点的内存要比访问不同节点的内存快。尽量减少节点间通信可以提高系统的性能。
为支持 NUMA 硬件,Linux 内核在多个范围的进行了一系列改进,包括调试器,多路 I/O,一个可以让用户可以了解用到的处理器和内存资源分配的用户级 API,和内部的内核 API 以使内核子系统了解 NUMA 拓扑。NEC Azusa、IBM x440 和 IBM NUMA-Q 是 NUMA 机器的例子。
扩展的设备支持 在 2.6 内核中支持更多类型的设备。2.6 内核还将主识别号的限制从 255 增加到 4095,并且允许每种类型可以有多于 100 万个子设备。这将给高端的企业系统以足够的支持。
线程改进 2.6 内核采用了新的线程库,Native POSIX Thread Library (NPTL)。这个新库基于 1:1 模型,完全符合 POSIX 标准。Red Hat 所作的测试表明,在一个老的 IA-32 双 450MHz PII Xeon 系统上,使用 NPTL 可以在 2.3 秒之内创建和销毁 100,000 个线程 (在任一时刻最多可以同时运行 50 个线程)。
NPTL 为多线程应用程序在 SMP 环境中带来了极大的性能提高。它尤其有益于超重量级的多线程企业级应用程序,例如 Java 应用程序、Web 服务器和应用程序服务器应用程序。
2.6 内核中另一个对线程的改进是,可分配的 PID 数目从 32,000 增加到了 10 亿。这一线程变化改善了在重负载系统中应用程序的启动性能。由于允许的 PID 上限较低,2.4 内核有时会出现应用程序请求的 PID 编号过高的情况。
O(1) 调度程序
0(1) 调度程序于 2002 年被接受并加入到官方的 Linux 2.5 内核树中。0(1) 调度程序通过改善大量进程的吞吐率提高了 Linux 的扩展性和整体上的性能,尤其是在大型的 SMP 上。0(1) 在任务和 CPU 数目巨大时可以很好地扩展,具有很强的“亲合力”,以避免任务在 CPU 之间反复移动。0(1) 调度程序还允许跨 CPU 的负载平衡和 NUMA-aware 负载平衡。
I/O 改进
块 I/O 层
2.6 内核中的块 I/O 层被重写,以提高内核的可扩展性和性能。2.4 中的全局 I/O 请求锁不再使用。在 2.6 中块 I/O 缓冲区(kiobuf)允许 I/O 请求可以比 PAGE_SIZE 大。出现的大部分问题是由对缓冲区头和 kiobuf 的使用引起的,在这个新的层中已经得以处理。完全重写了 I/O 调度程序。对 SCSI 的支持也有了重大的改进。
异步 I/O
异步 I/O 是在 2.6 内核中新出现的。它为 Web 服务器和数据库等企业应用程序的扩展提供了一个途径,而不必求助用于网络连接的复杂的内部池机制。
其他改进
除了这些改进以外,还有其他一些值得一提的变化和新特性。例如,2.6 内核提供了对一些新文件系统的支持,包括 JFS、XFS、NFS v4 和 Andrew File System (AFS)。新的网络协议和特性,例如流控制传输协议 (Stream Control Transmission Protocol, SCTP)、Internet Protocol Security (IPSec)、改进的 IPv6 支持和 IP Payload Compression (IPComp),给 Linux 2.6 内核用户提供了更好地网络安全和传输质量。
不是 2.6 内核带来的提高都可以应用于每一个企业应用程序。它们中有一些需要特定的硬件和软件。无论如何,这里列出的大部分提高都是全面的内核改进,将帮助 Linux 跨入企业门槛。
测试基础设施 在这一节,我将讨论 Web 服务测试是如何进行的,包括硬件环境、选择的 Web 服务器/应用程序服务器和 Web 测试工具,以及针对典型测试情形的测试策略。以下的讨论基于 2.6 内核。
Web 服务服务器 在 Linux 2.6 内核测试中使用了四个 Web 服务服务器。两个是 Web 服务器 (Apache 和 Jakarta-Tomcat),另外两个是应用程序服务器(WebSphere Application Server 和 Jboss)。
Apache 是处于市场领导地位的 Web 服务器。Netcraft Web Server Survey 的调查结果显示,Internet 上超过 64% 的 Web 站点正在使用 Apache。它是一个开放源代码的项目。
Jakarta-Tomcat 是一个开放源代码的 servlet 容器,带有经 Apache 许可的 JSP 环境。Jakarta-Tomcat 有一个内置的 Web 服务器,也可以在产品环境中与其他 Web 服务器一起使用。
WebSphere Application Server 是一个企业级的应用程序服务器,用于动态电子商务应用程序。这个服务器的基础是 J2EE 技术和 Web Services。WebSphere Application Server 具有很高的性能,并提供了一个可以跨越大部分操作系统的高度可扩展的事务引擎。越来越多的 WebSphere 应用程序正在由传统的 Unix OS 向 Linux 迁移,因为这样可以通过更少的费用而获得近乎同样的性能。