一种指令级Linux内核瞬时故障注入方法研究

时间:2015-10-22 09:24 来源:www.fabiaoba.com 作者:张影 杨麦顺 张兴军 点击:

  【摘要】:为对Lmux操作系统的可靠性和健壮性进行测试,提出一种指令级Lmux内核瞬时故障注入方法。该方法允许测试人员动态地向指定的内核指令及其运行环境注入故障,并根据测试需求设计合适的故障模式,从而收集系统的反馈信息,研究导致系统失效的故障模式,实现对Lmux系统可靠性与健壮性的有效测试。以Lmux2.6.32内核为目标系统进行故障注入实验,结果表明,该方法能够有效地对内核指令及其运行环境进行故障注入,并在此基础上完成Lmux系统对不同故障的敏感度统计。

  【关键词】:Lmux内核;故障注入;可靠性;健壮性;测试;Lmux系统

  1概述

  金融、电信等关键性领域对计算机系统的安全性要求非常高,甚至要求零失误。但随着计算机性能的提高,其电子元件的规模越来越大,也越来越复杂,计算机发生故障的概率也大大增加,当系统因故障导致错误、失效或是宕机时,往往会造成不可估量的损失。因此,对系统的可靠及健壮性进行测试是非常有必要的。现阶段,基于故障注入的测试是评测计算机系统可靠性的重要方法之一。

  目前的系统测试工具多建立在跟踪及查看的基础上,例如Systemtap工具可对运行中的Linux内核进行监控和跟踪,它允许测试人员通过编写Systemtap脚本,获取内核数据及相关信息,strace命令可以跟踪程序执行时的系统调用和所接收的信号,包括参数、返回值、执行消耗的时间等。这些方法能够达到一定的测试目的,但都没有人为地对内核引入故障并测试系统处理故障的能力。当然Linux也提供了一些错误注入机制,例如failslab,它实现了slab分配器的内存分配错误注入2。但测试人员只能通过特定的命令触发系统预设好的错误,不能根据测试人员的意愿向内核注入自定义故障,依然达不到对系统处理故障的测试。

  此外,目前存在的大多数故障注入工具都是针对应用程序,不能实现Linux内核程序故障的注入,例如美国密歇根大学研制的DOCTORH故障注入工具,能够注入CPU、内存和通信故障,还能够注入系统行为级的高层故障。商用软件故障注入工具XceptionH利用CPU提供的调试寄存器实现了内存和CPU故障注入,但上述故障注入方法均不适用于内核故障注入。为此,本文提出指令级Linux内核瞬时故障注入(Instruction-levelFaultInjectionMethodforLinuxKernel,IFIMK)方法,由测试人员控制故障的触发位置及故障模式,向Linux内核引入指令级的瞬时故障,并分析各个故障对系统失效率的影响。

  2IFIMK故障研究

  对一个运行中计算机系统来说,故障的发生是随机的,但不同的故障发生的概率仍不尽相同。根据卡内基梅隆大学LANL实验室公布的一批高性能计算系统的故障统计0,在环境配置故障、硬件故障、人为故障、网络故障、软件故障、未确定故障等6类故障中,62%的故障是硬件故障,占主要比重,另外其他故障如软件异常等,也有一部分是由硬件导致的。而硬件故障注入技术能够访问到_些其他方法访问不到的位置,比如集成电路的内部,这对于其他方法是几乎不可能实现的。

  硬件故障注入技术可分为物理故障注入、仿真故障注入和模拟故障注入3类67-3。物理故障注入使用附加的硬件产生物理现象例如重离子辐射、电磁干扰等通过影响芯片内部电流和电压的变化,向目标系统引入故障。这种方法需要制定特殊的硬件,并很难控制和观察芯片内部的故障注入情况。仿真故障注入技术可控制故障注入时间、故障类型等,但这种技术精度不高,需要大量的开发工作,非常耗时。模拟故障注入以软件的方式模拟硬件故障,实现对系统硬件故障的注入,这种故障引入的方式工作量少、花费少也容易实现,同时可达到较高的故障覆盖率M。

  基于以上讨论,本文采用软件的方式向Linux内核注入硬件故障。

  3IFIMK方法描述

  IFIMK内核故障注入方法提供一种指令级的故障注入方法,其目标是将特定的故障模式注入到动态运行的Linux内核的特定指令及其运行环境中,分析不同故障模式对系统失效率的影响。

  3.1故障模式定义

  故障注入首先选择特定的故障模型,人为地向目标系统内核引入故障,以加速失效的发生,通过系统的反馈,得到有效性的系统测试结果。故障模式描述了_个系统故障的完整信息,合理的故障模式有助于测试人员对测试结果的分析。目前被广为接受的一种故障注入模型是FARM模型612,由故障集合、激活集合、读回集合和度量集合组成。IFIMK根据自己的需求将故障模式定为Fault(i_position,f_positon,f_type)形式,包括故障注入的目标指令地址、故障注入的位置以及故障类型。

  计算机上电初始化时,物理内存被设置成从地址0开始的连续区域。通过BIOS程序和自身引导程序的有序引导,内核映像文件被加载到内存的固定位置,其代码和内核栈分别位于内存的不同区域,保护模式开启后,系统通过线性地址对不同区域的内存数据进行访问。

  在IFIMK方法中,故障注入模块将依据i_position项指定插入断点的位置,故障注入位置取决于f_positon项提供的指令地址或寄存器名称,注入故障的类型由f_type项给出。

  3.2LKM支持

  为使故障注入模块具有和内核_致的访问权限,跨过Linux操作系统对内核的地址保护,IFIMK以动态可加载内核模块(LoadableKernelModule,LKM)的方式将其加载进内核。LKM支持内核模块的动态加载,装载后,故障注入模块作为内核的一部分运行在系统内核空间,具有内核级的访问权限,可直接访问操作系统内核数据结构和程序。

  在LKM的支持下,故障注入模块不再受限于CPU对指令的权限检查,进而对内核空间代码及数据进行读写操作,实现故障注入。同时,LKM的动态装载性允许内核模块的灵活加载,故障注入模块可独立编译,不需要重新编译内核和重新引导,提高了开发效率。

  3.3断点支持

  为能将故障精确地注入Linux内核,IFIMK将使用Linux内核提供的Kprobe113接口为故障注入模块提供断点支持。Kprobe提供了一个方法可以动态进入内核,并且不会影响到内核的正常执行。应用时首先注册_个Kprobe探测点,这个探测点指定了将要注入故障的内核指令的线性地址,并在其提供的自定义处理函数pre_handler中实现故障注入操作,Kprobe将探测点的指令用断点指令cc(int3指令的机器码)代替,int3是x86处理器定义的一种陷阱类异常,处理过程与中断相似。

  当内核再次执行到该探测点时,int3断点指令被执行,程序转入故障注入模块中执行,故障注入操作完成后,程序从异常中返回。

  3.4故障的注入及触发

  IFIMK作为一种指令级的故障注入方法,它以目标指令的地址作为切入点,涉及到目标指令及目标指令的运行环境等两方面故障的注入。对目标指令注入故障,可以监测系统对内存RAM故障引起的程序变异M做出的反馈。对运行环境注入故障,将有利于分析CPU各个寄存器故障对系统的影响。

  如上所述,故障注入操作在Kprobe自定义处理函数pre_handler中实现,其格式如下:


www.fabiaoba.com),是一个专门从事期刊推广期刊发表、投稿辅导、发表期刊的网站。
  本站提供如何投稿辅导、发表期刊,寻求论文刊登合作,快速投稿辅导,投稿辅导格式指导等解决方案:省级论文刊登/国家级论文刊登/ CSSCI核心/医学投稿辅导/职称投稿辅导。

投稿邮箱:fabiaoba365@126.com
 在线咨询: 投稿辅导275774677投稿辅导1003180928
 在线咨询: 投稿辅导610071587投稿辅导1003160816
 联系电话:18796993035

联系方式
李老师QQ:发表吧客服610071587 陈老师QQ:发表吧客服275774677 刘老师QQ:发表吧客服1003160816 张老师QQ:发表吧客服1003180928 联系电话:18796993035 投稿邮箱:fabiaoba365@126.com
期刊鉴别
  • 刊物名称:
  • 检索网站:
热门期刊
发表吧友情提醒

近来发现有些作者论文投稿存在大量剽窃、抄袭行为,“发表吧”对此类存在大量剽窃、抄袭的论文已经停止编辑、推荐。同时我们也提醒您,当您向“发表吧”投稿时请您一定要保证论文的原创性、唯一性,这既是对您自己负责,更是对他人的尊敬。

此类投稿的论文如果发表之后,对您今后的人生和事业将造成很大的麻烦,后果不堪设想,请您一定要慎重,三思而后行。

如因版权问题引起争议或任何其他原因,“发表吧”不承担任何法律责任,侵权法律责任概由剽窃、抄袭者本人承担。

 
QQ在线咨询
论文刊登热线:
137-7525-9981
微信号咨询:
fabiaoba-com

友情链接

申请链接