APP下载

基于使用剖面分析的系统健壮性评测方法

2012-07-25韩建亚吴智博刘卓钺刘宏伟

计算机工程与设计 2012年3期
关键词:故障注入内核调用

韩建亚,吴智博,刘卓钺,董 剑,刘宏伟

(哈尔滨工业大学 计算机科学与技术系,黑龙江 哈尔滨150001)

0 引 言

系统健壮性是衡量系统在异常输入或压力环境下保持正常工作能力的一种度量,也就是说系统健壮性评测可以看作是操作系统抵御外界错误的能力,包括上层应用程序引发的错误和底层硬件层引发的错误或者是从驱动设备带来的错误[1]。近年来,关于健壮性评测的方法有很多,例如典型的卡内基梅隆大学的研究项目Ballisa是通过向系统调用输入异常参数[2]来检测进程中止或系统崩溃现象来测试系统健壮性,之后的研究又将这种方法扩展到Windows 2000,WindowsNT4and XP系统中[3]。关于用户使用剖面分析[4]的研究也越来越多,典型的有驱动程序使用剖面分析的研究[5],这种剖面技术虽然难于分析,但是一旦很好的得到使用剖面结果,包含具体函数发生频率,发生持续时间比重等结果,就可以更好的测试热点代码,能够显著的降低测试时间和提高测试效率。这种使用剖面分析的方法也将会逐渐的应用到商业测试,网络故障诊断等领域中[6]。

所以在健壮性测试中,本文采用在传统的健壮性评测方法之前引入用户使用剖面分析过程,并从多个层次考虑系统健壮性问题,首先通过用户使用剖面分析得到相应应用程序运行过程中系统调用接口和内核函数接口的使用情况,然后根据使用剖面分析结果找到热点函数,针对这些使用频率包括使用时间比率比较高的函数,以故障注入[7]的方式进行健壮性评测,最后根据使用剖面分析结果和健壮性评测结果进行整体的健壮性分析。

1 测试环境

目标机操作系统可以分为4个层次,即4个子系统,分别是用户进程、系统调用接口、内核、硬件控制器。目标系统结构图如图1所示。

图1 目标机系统结构

本文从系统调用接口层和内核层两个层次来考虑系统健壮性问题。

2 评测框架

健壮性评测结构主要分为3个步骤:①用户使用剖面分析。主要包括系统调用剖面分析和内核函数剖面分析,给出函数使用情况。②故障注入。根据用户使用剖面分析结果对目标函数进行故障注入,包括系统调用的故障注入和内核函数的故障注入,通过故障注入获得函数接口失效率。③结果分析。结合用户使用剖面分析与故障注入结果进行健壮性分析。

由于进行故障注入过程中,会出现系统重启和系统死机等现象[8],所以在进行健壮性评测过程中使用双台机器,通过局域网相连,来监控目标机状态。测试架构主要包括主控端和目标机端,其中主控端主要包括结果回收,结果分析,数据处理和心跳检测[9]模块,目标机端实现评测主要功能,主要包括使用剖面分析,故障注入,结果分析3部分。图2为实验测试平台整体架构图。

图2 测试平台系统结构

2.1 使用剖面分析的设计与实现

2.1.1 运行环境下使用剖面分析方法

由于Linux系统层次实现方式不同,这里将使用剖面分析分为系统调用分析和内核函数分析。

其中都是在应用负载运行过程中进行。通过修改strace工具和kernprof工具分别统计系统调用和内核函数的使用时间比重和调用次数比重,根据统计结果结合用户要求选择综合使用频率比较高的函数进行故障注入。整体上包括用户输入应用负载名称,注明统计条件,最后分别得到系统调用和内核函数列表,包括应用负载运行过程中函数被调用次数[10],函数发生比率,调用时间,调用时间比例等结果。图3为使用剖面分析流程图。

图3 用户使用剖面分析流程

2.1.2 使用剖面分析度量方法

参照C.Sarbu中关于使用剖面分析在驱动程序的应用[11],本文针对系统调用和内核函数使用特点,定义以下使用剖面分析度量方法。分别针对系统调用和内核函数,设计基于函数接口发生次数的度量方法,基于持续时间的度量方法和两者结合的综合度量方法:

(1)基于发生次数的度量方法:系统调用发生比重(NKOWi)和内核函数发生比重 (KOWi)分别表示应用程序运行过程中调用的第i个系统调用及内核函数发生次数占总共调用的系统调用和内核函数的比重。计算方式如下

式中:NKOCi、KOCi——第i个系统调用、内核函数在应用程序运行过程中的调用次数。

(2)基于持续时间的度量方法:系统调用持续时间比重 (NKDWi)和内核函数持续时间比重 (KDWi)分别表示应用程序运行过程中调用的第i个系统调用及内核函数调用时间占应用程序运行总时间的比重。

(3)综合度量方法:为了更准确的度量系统用户使用剖面,结合两种度量方法,本文针对系统调用和内核函数分别给出进行用户使用剖面分析的综合度量方法,计算方法如下,其中 (λ∈R,0≤λ≤1)

2.2 故障注入设计与实现

对系统调用层和内核函数层的健壮性测试是通过对单一的调用接口进行异常参数形式的故障注入实现的,参数生成是基于Ballista异常参数思想[12]生成故障用例,图4为故障注入流程图。

图4 故障注入流程

整体故障注入过程如下,具体的系统调用和内核函数由于系统层次不同,实现的方式也不同:①对故障参数用例进行初始化;②根据异常参数调用被测函数,并记录系统反映;③释放构造参数用例所申请的资源。

2.3 健壮性评测方法

按照前边的介绍,通过用户使用剖面分析得到故障注入目标后,对目标函数进行故障注入,最后通过以下方法将故障注入后的接口失效率[13]同接口使用情况结合起来。由此得到目标系统在运行相应应用程序过程中的健壮性。计算方法如下,其中NKR,KR分别为系统调用和内核函数健壮性向量NKRi,KRi分别表示第i个函数的健壮性。NKCC,NKCR,NKCall分别表示系统调用测试灾难性失效,重启和测试的总次数,同理对于内核函数。于是内核函数和系统调用的健壮性分别为Rker,Rnker

3 实验结果与结果分析

3.1 使用剖面分析实例

3.1.1 系统调用使用剖面分析

图5给出top应用在运行过程中系统调用的整体使用剖面分析结果,横坐标表示使用系统调用的个数n,其中系统调用的使用次数从左到右依次增加。纵坐标分别表示取前n个系统调用的发生频率之和,持续时间比率之和及λ=0.5,λ=0.75时的综合使用频率之和。由图可以看出top应用在运行过程中总共使用了28个函数,远远小于系统的总系统调用个数,由此可见操作系统对系统调用的使用是不均匀分布的。

图5 系统调用使用剖面整体结果

相对于图5,图6给出了在这28个被调用的系统调用中前7个函数的发生次数比率,持续时间比率,加权后的综合使用比率及前i个函数的综合使用比率之和,其中综合比率中λ取值0.5。从图中可以看出前7个函数使用比率之和就达到了95%以上,可以看出在运行状态下,仅这28个系统调用的使用就是不均匀的。

图6 系统调用使用剖面具体分析

为了分析方便,这里定义测试覆盖率C以及测试缩减比率T[14],其中C代表所选择的前i个函数发生次数之和占总测试数目的比例,T代表这i个函数占总函数个数的比例。

覆盖率和测试缩减比率关系如表1所示。可以看出在覆盖率要求95%的情况下,测试缩减比率分别为79%,71%和75%,综合考虑测试覆盖率和测试缩减率,本文选用覆盖率达到95%的函数列表作为系统调用故障注入对象。

表1 系统调用测试覆盖率与测试缩减率对比

假设对每个系统调用的测试消耗是一样的,实验结果表明由于在具体应用中函数使用频率的显著分布不均匀,所以根据剖面分析结果进行测试的函数比例显著降低,而且这种分析方法覆盖率达到95%以上,所以可以证明这种用户使用剖面分析方法极大的减少了测试数量同时有效的提高了测试效率。

3.1.2 内核函数使用剖面分析结果

类似系统调用使用剖面分析方法,图7给出了top应用运行过程中内核函数的整体使用剖面分析结果,应用运行过程中共使用内核函数1000多个,但是仅前115个函数就使得测试覆盖率C达到将近90%,有此得到测试缩减率T达到将近90%。表2给出了内核函数使用剖面分析中覆盖率C和测试缩减率T的关系。

图7 内核函数使用剖面整体分析

表2 kernel内核测试覆盖率与测试缩减率对比

由此可见用户使用剖面分析对内核函数测试的影响更显著,所以对内核函数进行使用剖面分析极大减少了测试数量,对健壮性评测的意义关键。

3.1.3 使用剖面分析对比结果

图8给出了剖面分析的一些对比结果,分别为测试覆盖率C为95%,99%情况下的系统调用和内核函数总函数个数同测试函数个数的比例对比图,其中最后给出了top应用运行过程中,使用的内核函数和系统调用个数的比例对比图。

图8 使用剖面分析对比结果

从图8可以看出,对于系统调用和内核函数来说,当覆盖率达到95%时,函数测试个数占总函数个数的比例是非常小的,同时内核函数和系统调用使用个数比例相差非常大,由此可以看出,本文从系统调用层和内核函数两个层次整体考虑健壮性是非常有意义的,因为应用程序有可能只使用了很少的系统调用,却调用了大量的底层内核函数来和硬件打交道,这种多层次的健壮性评测方法很好的解决了这种问题,很大的提高了单层次健壮性评测的准确性。

3.2 健壮性分析对比结果

通过运行3种类型的工作负载,包括计算密集型工作负载,图像密集型负载和网络密集型负载[15],将得到的使用剖面分析结果和函数接口失效率结果按照式 (7),式(8)结合起来,得到系统在某种工作负载下的具体健壮性结果对比图如图9所示。

图9 健壮性对比结果

图9中分别列出在3种工作负载下,结和用户使用剖面分析的健壮性结果同单一接口测试得到的系统平均健壮性结果的对比图。

从图9中可以看出,本文提出的健壮性测试方法得到的健壮性结果整体上高于单一接口测试方法得到的平均健壮性结果,这主要是因为高使用频率的函数的失效比例要低于其它函数。由此可以说明系统对经常使用的函数的设计更加健壮。同时可以看出,内核函数的失效率要高于系统调用的失效率。这是因为对内核函数的故障注入能够引发内核态的故障,其故障的严重性有时要大于用户态能够引发的故障。

4 结束语

本文提出的基于使用剖面分析的多层次的系统健壮性评测方法,在传统的健壮性评测之前加入用户使用剖面分析,通过使用剖面分析可以有效的减少测试数量,同时这种方法也可以找到热点函数,可以针对特定的应用,提高使用频率较高的函数的健壮性。目前该方法只分析了单个操作系统的健壮性评测结果,但是系统通用于不同的应用负载,今后可以运行多个应用负载,特别是针对专门用途的工作负载,并且可以将系统扩展到不同类型的操作系统中。

[1]Kanoun K,Spainhower L.Dependability benchmarking for computer systems[M].Wiley:IEEE Computer Society Press,2008.

[2]BIAN Wei,ZUO Decheng,QI Xin,et al.System robustness testing based on SWIFI [J].Journal of Harbin Institute of Technology,2009,41 (2):1-7 (in Chinese). [边维,左德承,祁鑫,等.基于软件实现的故障注入的系统健壮性测试研究 [J].哈尔滨工业大学学报,2009,41 (2):1-7.]

[3]JU Xiaoen,ZOU Hengming.Platform-based software reliability forecast and selection [D].Shanghai:Shanghai Jiaotong University,2009(in Chinese).[鞠晓恩,邹恒明.基于平台的软件可靠性预测与选择 [D].上海:上海交通大学,2009.]

[4]ZENG Fanping,LI Juan,LI Ling,et al.A fault injection approach based on operational profile [C].5th International Conference on Wireless Communications Networking and Mobile Computing,2009.

[5]Johansson A,Suri N.Error propagation in operating systems[C].Proceedings of the International Conference on Dependable Systems and Networks,2005:86-95.

[6]Kumar K S,Misra R B.Software operational profile based test case allocation using fuzzy logic [J].International Journal of Automation and Computing,2007,4 (4):388-395.

[7]YU Bin,LIU Hongwei,CUI Gang,et al.Research and design in high-available dual fault-tolerance server [J]. Computer Engineering and Design,2006,27 (9):1524-1525 (in Chinese).[于斌,刘宏伟,崔刚,等.高可用双机容错服务器的研究与设计 [J].计算机工程与设计,2006,27 (9):1524-1525.]

[8]Mitra S,Seifert N.Robust system design with built-in softerror resilience[J].IEEE Computer,2005,38 (2):43-52.

[9]QIAN Yong,WU Jian.Framework of high availability cluster system [J].Ordnance Industry Automation,2008,27 (5):64-66.

[10]JU Xiaoen,ZOU Hengming.Operating system robustness forecast and selection [C].19th International Symposium on Software Reliability Engineering,2008:107-116.

[11]SARBU C,Johansson A,SURI N.Profiling the operational behavior of OS device drivers [C].19th International Symposium on Software Reliability Engineering,2008.

[12]Moraes R.Injection of faults at component interfaces and inside the component code:are they equivalent [C].Proc of EDCC,2006:53-64.

[13]Johansson A,Suri N,Murphy B.On the selection of error model(s)for OS robustness evaluation [C].International Conference on Dependable Systems and Networks,2007:502-511.

[14]Sarbu C,Johansson A,Fraikin F,et al.Improving robust

ness testing of COTS OS extensions [G].LNCS 4328:In

ternational Service Availability Symposium,2006:120-139.

[15]Kanoun K,Crouzet Y,Kalakech A,et al.Benchmarking the dependability of windows and Linux using PostMarkTM workloads [C].International Symposium on Software Reliability Engineering,2005:11-20.

猜你喜欢

故障注入内核调用
强化『高新』内核 打造农业『硅谷』
核电项目物项调用管理的应用研究
SM4算法前四轮约减轮故障注入分析
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
LabWindows/CVI下基于ActiveX技术的Excel调用
采用修改-回放原理的1553B故障注入方法
基于系统调用的恶意软件检测技术研究
微生物内核 生态型农资
列车MVB总线故障注入研究