改善 Linux 性能的第一步是对其进行量化。但如何精确地对 Linux 的性能或与它相当的系统性能进行量化呢?在本文中,IBM Linux 技术中心的成员描述了他们在去年底对 Linux 2.4 和 2.5 内核所做的几个基准程序测试,就这些专家经验,以飨读者。
目前,Linux 操作系统是最成功的开放源码项目之一。Linux 作为 Web 服务器操作系统,展示了其高可靠性,在 Web 服务器市场,它占据了很大的份额。这些 Web 服务器通常是低端及位于中间档次的系统,带有最多可达 4 路的对称多处理器(SMP);而企业级系统有更复杂的需求,譬如需要更多的处理器个数和 I/O 配置以及大的内存和带宽。为了使 Linux 为进入企业环境而作好准备,以及能够作为商业性应用进入 SMP 市场,与商业 UNIX 系统相比,它的 SMP 可伸缩性、磁盘和网络 I/O 性能、调度程序和虚拟内存管理器必须得到改善。
Linux 可伸缩性研究计划(Linux Scalability Effort,LSE)(请参阅参考资料中的链接)是一个开放源码项目,解决了用于企业级机器的 Linux 内核问题,这些机器的可伸缩性达到 8 路或更高。
IBM Linux 技术中心(Linux Technology Center,LTC)的 Linux 性能团队(请参阅参考资料的相关链接)积极地参与了 LSE 活动。此外,他们的目标是,通过改进 Linux 内核性能(尤其针对 SMP 可伸缩性)而使 Linux 更优秀。
本文描述了在着重平台无关性问题的同时,该团队在测量、分析与改进 Linux 内核性能和可伸缩性上所采用的策略和方法。该团队使用了一套基准测试程序来完成此项任务。这些基准测试程序考虑到了各种工作负载,其中包括 Web 服务、数据库和文件服务。此外,我们还将向您展示每个基准测试程序所着重的各个内核组件(例如,磁盘 I/O 子系统)。
分析方法 这里我们讨论用来量化针对 SMP 可伸缩性的 Linux 性能的分析方法。如果您愿意,可以直接跳到基准测试程序结果这一节。
我们用来改进 Linux 性能和可伸缩性的策略包括:运行几个业界接受的和组件级的基准测试程序,选择合适的硬件和软件,开发基准测试程序运行规则,设定性能和可伸缩性目标,以及测量、分析和改进性能和可伸缩性。在这一节中将详细讲述这些过程。
调优、测量和分析 在做任何测量之前,需要调优硬件和软件配置。调优和测量是一个不断循环的调优和测量过程。它涉及了系统组件(譬如 CPU 利用率和内存使用率)的测量,还可能涉及系统硬件参数、系统资源参数和中间件参数的调整。调优是性能分析的第一步中的环节。没有调优,测量出的结果可能会使人产生误解;即,这些结果可能不会指出内核的限制,而显示出别的问题。
根据运行规则来运行基准测试程序,从而可以根据已定义的性能度量来测量性能和可伸缩性。对给定机器计算 SMP 可伸缩性时,可以选择根据 UP 内核的性能来计算此度量值,也可以选择根据 SMP 内核(其中处理器数目设为 1 — 一个处理器)的性能来计算它。我们决定使用 UP 测量来计算 SMP 可伸缩性,这样可以更精确地反映 SMP 内核性能的改进。
使用前面确定下来的 Linux 内核版本来测量基线。对于大多数基准测试程序,需要测量 UP 和 SMP 基线。对于少数基准测试程序,只需测量 8 路 SMP 性能,因为收集 UP 性能信息受到时间限制。大多数其它基准测试程序测量在特定时间段内完成的工作量,在 UP 上的测量时间不超过在 8 路 SMP 上的测量时间。
然后使用性能分析数据来确定性能和可伸缩性的瓶颈。需要对 SUT 有宽泛的理解,并要对基准测试程序所着重的 Linux 内核组件有更具体的理解,从而理解性能瓶颈存在于何处。还必须理解造成瓶颈的 Linux 内核源代码。此外,我们需要与 LTC Linux 内核开发团队和 OSC(开放源码社区)紧密合作,以便开发补丁来修正瓶颈。
退出策略 对 Linux 内核性能的评估可能需要运行基准测试程序,然后分析结果来确定性能和可伸缩性的瓶颈,接着将补丁集成进 Linux 内核来解决所有这些瓶颈,最后再次运行该基准测试程序,这是一个周而复始的过程。作为一名性能团队成员,要与 Linux 内核开发团队或 OSC 通力合作,通过在 OSC 查找现有的补丁或者开发新的补丁来获取补丁。有一组用来确定何时 Linux 已经“足够好了”和可以结束该过程的标准。
首先,如果我们已经达到了目标,并且,针对某个具体基准测试程序,不存在需要解决的任何突出的 Linux 内核问题(解决这些问题可以很大程度地改善