分类: LINUX
2008-11-17 23:13:51
Linux内核是Linux操作系统最核心的部分,其性能直接决定了操作系统的性能。内核性能的方法是针对Linux内核五大子系统(进程调度子系统、内存管理子系统、虚拟文件子系统、进程通信子系统和网络子系统)的自身特点,测量出Linux内核完成工作量负载的响应时间、CPU时间和CPU利用率等参数,作为衡量标准。
Linux内核法
1.Linux测试项目(LTP)
LTP(Linux test project)套件涵盖了内核的大多数接口,如系统调用、内存、IPC、I/O、文件系统和网络。这个项目收集了各种 Linux内核测试工具和相关资料,当前包括了超过 2900个测试用例。
2.可扩展性测试平台(STP)
开放源代码开发实验室 (Open Source Development Labs, OSDL)创建了可扩展测试平台(Scalable Test Platform,STP)系统。STP 是一个自动化的测试平台, STP可以构建内核、设置测试、运行测试,并收集结果,然后进行深入地比较。
3.代码覆盖分析
代码覆盖分析在一个给定的测试运行时,分析出内核中哪些代码行被执行,提示内核的哪些部分还没有被测试到,并指出需要再编写哪些新测试来测试内核的相应部分,以使可以得到更完备的测试。
4.内核回归测试
对Linux内核执行持续多日的回归测试,创建实时的、集中的档案库,以随时获得 Linux内核的快照,内核发生改变,测试人员就可进行测试。
Linux内核架构
Linux内核主要由五大子系统组成:进程调度子系统(Process Scheduler)、内存管理子系统(Memory Manager)、虚拟文件子系统(Virtual File System)、进程通信子系统(Inter-Process Communication)和网络子系统(Network Interface),其中进程调度子系统是 Linux操作系统的核心。这五大子系统彼此紧密协作,共同对用户程序提供服务,其系统架构如下图所示。
图1. Linux内核结构
核心的子系统是进程调度子系统,所有子系统依赖它来挂起/唤醒进程。当进程被唤醒后,进程调度子系统依靠内存管理子系统来对进程的内存映射(页表)进行调 整;进程间通讯子系统依靠内存管理子系统来实现共享内存通信机制,允许多个进程共享物理内存;虚拟文件子系统依靠网络接口子系统来实现网络文件系统 (NFS),并且依靠内存管理子系统来实现 Ramdisk 设备;内存管理子系统依靠虚拟文件子系统来实现对换。
由此可见,测试Linux性能的关键在于测试Linux内核性能,而测试Linux内核性能又可以细化成五大子系统的测试。
性能评测方法学
一个性能评测实际解决方案应该包括以下三个方面:
1).被评测系统处于压力负荷下;
2).测量系统执行有效特定任务的能力,执行特定任务的耗时,执行特定任务的CPU 利用率;
3).基于性价比因素考虑进行改进。
性能测试领域的自顶向下方法(Top-Down Approach),是一种把性能测试从系统角度分层次考虑的方法。从上到下分成系统层(System Level)、应用层(Application Level)、微结构层(Micro-Architecture)三层,如图所示。
图2. 自顶向下性能测试法
1).系统层(System Level):包括处理器、内存、硬盘和网络等;
2).应用层(Application Level):包括锁、线程、堆和API 等;
3).微结构层(Micro-Architecture):包括数据队列、循环结构和cache优化。
自顶向下方法是从系统硬件层(处理器、内存、硬盘、网络等)、应用层(锁、线程、堆、API)和微结构层来考虑性能测试标准。系统层关注的是系统硬件设备 资源和外围设备;应用层关注的是操作系统和应用程序资源;微结构层关注的是 CPU 资源、逻辑单元和内存访问等细节。
内核性能评价的主要标准和参数
1.Linux内核性能评价的主要标准
从系统性能评价方法学的角度来考虑,Linux内核性能评价应该遵循以下标准。
1).正确性
运行的正确性是首要的,运行结果出错的程序是没有应用价值的。
2).可靠性
Linux内核直接控制和管理计算机系统硬件和软件资源,以方便用户充分而有效地利用计算机资源的程序集合,如果自身都运行不可靠,稳定性差,将直接导致硬件工作不正常和软件应用的不稳定。
3).工作性能
(1) 处理能力,单位时间内能处理的信息量(吞吐率);
(2) 响应能力,包括响应时间、周转时间和排队时间等;
(3) 利用率,时间段T内,资源被使用时间t 与T的比值。
正确性是测试的前提,可靠性和工作性能可以通过设计相应负载对内核进行压力测试。
2.Linux内核性能评价的参数
1).响应速度
内核完成某一任务(程序)所花费的时间,如磁盘访问、器访问和输入/输出等待。
2).CPU时间
程序在CPU中的执行时间。
3).CPU利用率
因此只有充分利用 CPU,才能最大程度的提高系统的效率。
Linux内核压力测试
Linux内核压力测试使用如下图示过程。
图3. Linux内核压力测试过程
Linux内核压力测试组合了不同方面的多个测试,包括内存和网络传输负载生成器。在执行之前,测试会根据系统中存在多少物理和虚拟内存来调整其总的内存 使用情况。评价系统资源利用率所选择的测试组合必须给系统的资源带来足够的压力,可以从LTP测试套件中获得测试脚本ltpstress.sh。
Linux 内核主要有如下四个方面影响系统的响应和执行时间: CPU,用于在机器的CPU(s)上处理数据的时间;Memory,用于自真实器中读写数据的时间;I/O,用于自磁盘存储器读写数据的时间;Networking,用于自网络读写数据的时间。测试能得到 CPU(s)、内存、I/O 和网络等主要内核区域的资源利用率。
测试应该充分地覆盖内核代码,以帮助支持生成的稳定性声明。可使用下面两个开放源代码 Linux资源监控工具来评价资源利用率水平:Top与sar,包含于大部分 Linux 发行版本中,可用于当前的2.4 和2.6内核(目前内核为2.6.18)。
内核代码覆盖率分析
获得足够的内核覆盖率是系统压力测试的另一个职责。尽管所选的测试组合充分地利用了四种主要资源,它也有可能只是执行了内核的一小部分,因而应该对覆盖率进行分析以确保组合可以成为一个系统压力测试。
当前,有两个开放源代码工具可以帮助进行Linux 内核的代码覆盖率分析。Gcov,这个工具分析内核代码的覆盖率,并报告哪些行、函数和分支被覆盖以及它们被访问了多少次。Lcov,这个工具由一组 Perl 脚本构成,以实现基于 HTML 的输出,输出包括覆盖率百分比、图表以及概述页,可以快速浏览覆盖率数据。
Linux内核可靠性评测
系统的稳定性和可靠性通常以连续运转时间和系统的可靠运行时间来度量。
有两个特别的阶段:一个是“初始测试”阶段,另一个是“压力可靠性运转”阶段或“压力测试”阶段。初始测试执行:
文件系统压力测试。
硬盘 I/O 测试。
内存管理压力测试。
IPC 压力测试。
调试器测试。
命令功能的验证测试。
系统调用功能的验证测试。
通过初始测试是开始测试的必要条件,LTP 测试套件runalltest.sh可用于初始测试。
压力测试在使用网络与内存管理的同时,并行地运行大范围的内核组件,并在测试系统上生成高压力负荷,压力测试执行:
NFS 压力测试。
内存管理压力测试。
文件系统压力测试。
数学 (浮点) 测试。
多线程压力测试。
硬盘I/O 测试。
IPC测试。
系统调用功能的验证测试。
网络压力测试。
压力测试可以验证产品在系统高使用率时的健壮性,LTP 测试套件ltpstress.sh可用于压力测试。
评估
可靠性(reliability)是产品在规定的条件下和规定的时间内完成规定功能的能力,它的概率度量称为可靠度,是评估的依据。软件可靠性 (software reliability)是软件系统的固有特性之一,它表明了一个软件系统按照用户的要求和设计的目标,执行其功能的正确程度。可靠的软件系统应该是正 确、完整、一致和健壮的。
全文总结
本文在充分分析、总结国内外有关软硬件性能评测相关理论和研究成果的基础上,结合 Linux内核自身的特点,针对Linux五大子系统,研究评测内核的方法、工具和标准,以达到评测 Linux内核性能的目的。