CN106155883B - 一种虚拟机可靠性测试方法及装置 - Google Patents
一种虚拟机可靠性测试方法及装置 Download PDFInfo
- Publication number
- CN106155883B CN106155883B CN201510143859.2A CN201510143859A CN106155883B CN 106155883 B CN106155883 B CN 106155883B CN 201510143859 A CN201510143859 A CN 201510143859A CN 106155883 B CN106155883 B CN 106155883B
- Authority
- CN
- China
- Prior art keywords
- command word
- virtual machine
- system function
- failure
- identification
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明公开了一种虚拟机可靠性测试方法及装置,属于计算机领域。该方法包括:接收故障注入指令,故障注入指令至少携带故障标识,故障标识用于标识宿主机中运行的虚拟机的虚拟硬件资源;根据故障标识,获取故障命令字,故障命令字为对虚拟硬件资源进行故障注入的故障参数;当监听到宿主机的系统函数被调用时,根据故障命令字,判断调用系统函数的虚拟机是否为占用虚拟硬件资源的测试虚拟机;如果是,则截获系统函数,将系统函数的返回值设置为指定错误值,并将指定错误值返回给测试虚拟机,使测试虚拟机进行可靠性测试。本发明无需测试人员定位以及在线修改宿主机的源码,只需测试人员输入故障标识,降低了对测试人员的技能要求,操作比较简单。
Description
技术领域
本发明涉及计算机领域,特别涉及一种虚拟机可靠性测试方法及装置。
背景技术
随着计算机技术的快速发展,在一台物理计算机上可以构造出多个虚拟机,得到一个虚拟化架构,且该物理计算机可以称为宿主机。而随着虚拟化架构的不断演进,通过模拟虚拟化架构中虚拟机处理资源故障的方法,来验证系统容错能力,以测试虚拟化架构的高可用性已成为客户明确的需求。
目前,虚拟机可靠性测试过程可以为:在宿主机上安装GDB(英文:GNU Debugger;中文:GNU调试器)调试工具,通过GDB调试工具,在宿主机的源码中定位出虚拟硬件处理函数,并在线对定位的虚拟硬件处理函数进行修改,以将资源故障注入虚拟机中。之后,当该虚拟机调用该虚拟硬件处理函数时,会返回错误值,从而通过该错误值,确定该虚拟机的资源出现故障。通过该虚拟机对出现的资源故障进行处理,来测试虚拟机的可靠性。
将资源故障注入虚拟机时,测试人员需要定位及在线修改虚拟硬件处理函数,对测试人员的技能要求较高。另外,在虚拟机上需要安装GDB调试工具,操作比较复杂。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种虚拟机可靠性测试方法及装置,从而降低了对测试人员的技能要求,且操作比较简单。所述技术方案如下:
第一方面,提供了一种虚拟机可靠性测试方法,所述方法包括:
接收故障注入指令,所述故障注入指令至少携带故障标识,所述故障标识用于标识宿主机中运行的虚拟机的虚拟硬件资源;
根据所述故障标识,获取故障命令字,所述故障命令字为对所述虚拟硬件资源进行故障注入的故障参数,且所述故障命令字与所述宿主机的系统函数指定位上的命令字存在关联关系,所述指定位上的命令字为所述虚拟硬件资源运行过程中所述系统函数需调用的参数;
当监听到所述宿主机的系统函数被调用时,根据所述故障命令字和所述指定位上的命令字,判断调用所述系统函数的虚拟机是否为占用所述虚拟硬件资源的测试虚拟机;
如果是,则截获所述系统函数,将所述系统函数的返回值设置为指定错误值,并将所述指定错误值返回给所述测试虚拟机,使所述测试虚拟机进行可靠性测试。
结合第一方面,在上述第一方面的第一种可能的实现方式中,所述根据所述故障标识,获取故障命令字,包括:
根据所述故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
将获取的KVM命令字确定为故障命令字。
结合第一方面,在上述第一方面的第二种可能的实现方式中,所述根据所述故障标识,获取故障命令字,包括:
根据所述故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
根据获取的KVM命令字,从存储的KVM命令字与系统命令字之间的对应关系中,获取对应的系统命令字;
将获取的系统命令字确定为故障命令字。
结合第一方面至第一方面的第二种可能的实现方式中的任一可能的实现方式,在上述第一方面的第三种可能的实现方式中,所述根据所述故障命令字和所述指定位上的命令字,判断调用所述系统函数的虚拟机是否为占用所述虚拟硬件资源的测试虚拟机之前,还包括:
对所述宿主机的系统函数设置挂钩函数;
通过所述挂钩函数,监听所述系统函数是否被调用;
如果所述系统函数被调用,则通过所述挂钩函数,获取所述系统函数待调用的指定位上的命令字。
结合第一方面至第一方面的第三种可能的实现方式中的任一可能的实现方式,在上述第一方面的第四种可能的实现方式中,所述根据所述故障命令字和所述指定位上的命令字,判断调用所述系统函数的虚拟机是否为占用所述虚拟硬件资源的测试虚拟机,包括:
判断所述指定位上的命令字与所述故障命令字是否相同;
如果所述指定位上的命令字与所述故障命令字相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
结合第一方面至第一方面的第三种可能的实现方式中的任一可能的实现方式,在上述第一方面的第五种可能的实现方式中,所述根据所述故障命令字和所述指定位上的命令字,判断调用所述系统函数的虚拟机是否为占用所述虚拟硬件资源的测试虚拟机,包括:
当所述故障注入指令还携带指定进程标识时,判断所述指定位上的命令字与所述故障命令字是否相同,以及判断调用所述系统函数的虚拟机进程标识是否与所述指定进程标识相同;
如果所述指定位上的命令字与所述故障命令字相同且调用所述系统函数的虚拟机进程标识与所述指定进程标识相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
结合第一方面至第一方面的第三种可能的实现方式中的任一可能的实现方式,在上述第一方面的第六种可能的实现方式中,所述根据所述故障命令字和所述指定位上的命令字,判断调用所述系统函数的虚拟机是否为占用所述虚拟硬件资源的测试虚拟机,包括:
当所述故障注入指令还携带指定进程标识和指定线程标识时,判断所述指定位上的命令字与所述故障命令字是否相同,判断调用所述系统函数的虚拟机进程标识是否与所述指定进程标识相同,以及判断调用所述系统函数的虚拟机线程标识是否与所述指定线程标识相同;
如果所述指定位上的命令字与所述故障命令字相同、调用所述系统函数的虚拟机进程标识与所述指定进程标识相同且调用所述系统函数的虚拟机线程标识与所述指定线程标识相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
结合第一方面至第一方面的第六种可能的实现方式中的任一可能的实现方式,在上述第一方面的第七种可能的实现方式中,所述截获所述系统函数,将所述系统函数的返回值设置为指定错误值,并将所述指定错误值返回给所述测试虚拟机,包括:
通过所述系统函数的挂钩函数,截获所述系统函数;
通过所述挂钩函数,将寄存器中存储的返回值替换为指定错误值,将所述寄存器中存储的所述指定错误值返回给所述测试虚拟机,所述寄存器用于存储所述系统函数的返回值。
第二方面,提供了一种虚拟机可靠性测试装置,所述装置包括:
接收模块,用于接收故障注入指令,所述故障注入指令至少携带故障标识,所述故障标识用于标识宿主机中运行的虚拟机的虚拟硬件资源;
第一获取模块,用于根据所述故障标识,获取故障命令字,所述故障命令字为对所述虚拟硬件资源进行故障注入的故障参数,且所述故障命令字与所述宿主机的系统函数指定位上的命令字存在关联关系,所述指定位上的命令字为所述虚拟硬件资源运行过程中所述系统函数需调用的参数;
判断模块,用于当监听到所述宿主机的系统函数被调用时,根据所述故障命令字和所述指定位上的命令字,判断调用所述系统函数的虚拟机是否为占用所述虚拟硬件资源的测试虚拟机;
截获模块,用于如果是,则截获所述系统函数,将所述系统函数的返回值设置为指定错误值,并将所述指定错误值返回给所述测试虚拟机,使所述测试虚拟机进行可靠性测试。
结合第二方面,在上述第二方面的第一种可能的实现方式中,所述第一获取模块包括:
第一获取单元,用于根据所述故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
第一确定单元,用于将获取的KVM命令字确定为故障命令字。
结合第二方面,在上述第二方面的第二种可能的实现方式中,所述第一获取模块包括:
第二获取单元,用于根据所述故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
第三获取单元,用于根据获取的KVM命令字,从存储的KVM命令字与系统命令字之间的对应关系中,获取对应的系统命令字;
第二确定单元,用于将获取的系统命令字确定为故障命令字。
结合第二方面至第二方面的第二种可能的实现方式中的任一可能的实现方式,在上述第二方面的第三种可能的实现方式中,所述装置还包括:
设置模块,用于对所述宿主机的系统函数设置挂钩函数;
监听模块,用于通过所述挂钩函数,监听所述系统函数是否被调用;
第二获取模块,用于如果所述系统函数被调用,则通过所述挂钩函数,获取所述系统函数待调用的指定位上的命令字。
结合第二方面至第二方面的第三种可能的实现方式中的任一可能的实现方式,在上述第二方面的第四种可能的实现方式中,所述判断模块包括:
第一判断单元,用于判断所述指定位上的命令字与所述故障命令字是否相同;
第三确定单元,用于如果所述指定位上的命令字与所述故障命令字相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
结合第二方面至第二方面的第三种可能的实现方式中的任一可能的实现方式,在上述第二方面的第五种可能的实现方式中,所述判断模块包括:
第二判断单元,用于当所述故障注入指令还携带指定进程标识时,判断所述指定位上的命令字与所述故障命令字是否相同,以及判断调用所述系统函数的虚拟机进程标识是否与所述指定进程标识相同;
第四确定单元,用于如果所述指定位上的命令字与所述故障命令字相同且调用所述系统函数的虚拟机进程标识与所述指定进程标识相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
结合第二方面至第二方面的第三种可能的实现方式中的任一可能的实现方式,在上述第二方面的第六种可能的实现方式中,所述判断模块包括:
第三判断单元,用于当所述故障注入指令还携带指定进程标识和指定线程标识时,判断所述指定位上的命令字与所述故障命令字是否相同,判断调用所述系统函数的虚拟机进程标识是否与所述指定进程标识相同,以及判断调用所述系统函数的虚拟机线程标识是否与所述指定线程标识相同;
第五确定单元,用于如果所述指定位上的命令字与所述故障命令字相同、调用所述系统函数的虚拟机进程标识与所述指定进程标识相同且调用所述系统函数的虚拟机线程标识与所述指定线程标识相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
结合第二方面至第二方面的第六种可能的实现方式中的任一可能的实现方式,在上述第二方面的第七种可能的实现方式中,所述截获模块包括:
截获单元,用于通过所述系统函数的挂钩函数,截获所述系统函数;
替换单元,用于通过所述挂钩函数,将寄存器中存储的返回值替换为指定错误值,将所述寄存器中存储的所述指定错误值返回给所述测试虚拟机,所述寄存器用于存储所述系统函数的返回值。
第三方面,提供了一种虚拟机可靠性测试装置,所述装置包括:
接收机,用于接收故障注入指令,所述故障注入指令至少携带故障标识,所述故障标识用于标识宿主机中运行的虚拟机的虚拟硬件资源;
处理器,用于根据所述故障标识,获取故障命令字,所述故障命令字为对所述虚拟硬件资源进行故障注入的故障参数,且所述故障命令字与所述宿主机的系统函数指定位上的命令字存在关联关系,所述指定位上的命令字为所述虚拟硬件资源运行过程中所述系统函数需调用的参数;
所述处理器,还用于当监听到所述宿主机的系统函数被调用时,根据所述故障命令字和所述指定位上的命令字,判断调用所述系统函数的虚拟机是否为占用所述虚拟硬件资源的测试虚拟机;
所述处理器,还用于如果是,则截获所述系统函数,将所述系统函数的返回值设置为指定错误值,并将所述指定错误值返回给所述测试虚拟机,使所述测试虚拟机进行可靠性测试。
结合第三方面,在上述第三方面的第一种可能的实现方式中,
所述处理器,具体用于:
根据所述故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
将获取的KVM命令字确定为故障命令字。
结合第三方面,在上述第三方面的第二种可能的实现方式中,
所述处理器,具体用于:
根据所述故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
根据获取的KVM命令字,从存储的KVM命令字与系统命令字之间的对应关系中,获取对应的系统命令字;
将获取的系统命令字确定为故障命令字。
结合第三方面至第三方面的第二种可能的实现方式中的任一可能的实现方式,在上述第三方面的第三种可能的实现方式中,
所述处理器,具体用于:
对所述宿主机的系统函数设置挂钩函数;
通过所述挂钩函数,监听所述系统函数是否被调用;
如果所述系统函数被调用,则通过所述挂钩函数,获取所述系统函数待调用的指定位上的命令字。
结合第三方面至第三方面的第三种可能的实现方式中的任一可能的实现方式,在上述第三方面的第四种可能的实现方式中,
所述处理器,具体用于:
判断所述指定位上的命令字与所述故障命令字是否相同;
如果所述指定位上的命令字与所述故障命令字相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
结合第三方面至第三方面的第三种可能的实现方式中的任一可能的实现方式,在上述第三方面的第五种可能的实现方式中,
所述处理器,具体用于:
当所述故障注入指令还携带指定进程标识时,判断所述指定位上的命令字与所述故障命令字是否相同,以及判断调用所述系统函数的虚拟机进程标识是否与所述指定进程标识相同;
如果所述指定位上的命令字与所述故障命令字相同且调用所述系统函数的虚拟机进程标识与所述指定进程标识相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
结合第三方面至第三方面的第三种可能的实现方式中的任一可能的实现方式,在上述第三方面的第六种可能的实现方式中,
所述处理器,具体用于:
当所述故障注入指令还携带指定进程标识和指定线程标识时,判断所述指定位上的命令字与所述故障命令字是否相同,判断调用所述系统函数的虚拟机进程标识是否与所述指定进程标识相同,以及判断调用所述系统函数的虚拟机线程标识是否与所述指定线程标识相同;
如果所述指定位上的命令字与所述故障命令字相同、调用所述系统函数的虚拟机进程标识与所述指定进程标识相同且调用所述系统函数的虚拟机线程标识与所述指定线程标识相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
结合第三方面至第三方面的第六种可能的实现方式中的任一可能的实现方式,在上述第三方面的第七种可能的实现方式中,
所述处理器,具体用于:
通过所述系统函数的挂钩函数,截获所述系统函数;
通过所述挂钩函数,将寄存器中存储的返回值替换为指定错误值,将所述寄存器中存储的所述指定错误值返回给所述测试虚拟机,所述寄存器用于存储所述系统函数的返回值。
在本发明实施例中,每个虚拟机访问宿主机的物理硬件资源时,都会调用宿主机的系统函数,因此,通过系统函数的挂钩函数,监听系统函数是否被调用,当系统函数被调用时,通过该挂钩函数,截获该系统函数,并将该系统函数的返回值替换为指定错误值,从而将故障注入虚拟机中。当虚拟机获取到该指定错误值时,确定虚拟机的虚拟硬件资源出现故障,进入故障处理过程,实现对虚拟机可靠性的测试。整个过程无需测试人员定位以及在线修改宿主机的源码,只需测试人员输入故障标识,降低了对测试人员的技能要求,并且也无需安装调试工具,操作比较简单。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种虚拟机可靠性测试方法流程图;
图2是本发明实施例提供的另一种虚拟机可靠性测试方法流程图;
图3是本发明实施例提供的一种虚拟机可靠性测试装置结构示意图;
图4是本发明实施例提供的一种判断模块的结构示意图;
图5是本发明实施例提供的另一种虚拟机可靠性测试装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
在对本发明实施例进行详细地解释说明之前,先对本发明实施例的应用场景予以介绍。在本发明实施例中,在一台物理计算机上构造出多个虚拟机,该物理计算机称为宿主机,该宿主机和该多个虚拟机构成一个虚拟化架构。在虚拟化架构中,运行在宿主机内核中的虚拟机监控器可以使用intel的VT-x(英文:Virtualization Technology-x;中文:虚拟化技术)、EPT(英文:Extented Page Table;中文:扩展页表)等硬件虚拟化技术,实现虚拟机的虚拟CPU(英文:Central Processing Unit;中文:中央处理单元)共享和分时使用宿主机的物理CPU,并且每个虚拟CPU会具有一定的特权级指令。当虚拟机通过该虚拟CPU向宿主机发送该特权级指令时,虚拟机主动进入虚拟机监控器的陷入模式,实现虚拟机从非根模式切换到根模式,也即是,将访问虚拟机的虚拟硬件资源的模式切换到访问宿主机物理硬件资源的模式,物理硬件资源可以包括CPU、内存、I/O(英文:Input/Output;中文:输入/输出)等。而在虚拟机运行之前,需要通过调用宿主机的系统函数来访问宿主机的物理硬件资源,实现对虚拟机的虚拟硬件资源进行配置。因此,本发明实施例提供了一种虚拟机可靠性测试方法,在虚拟机调用宿主机的系统函数时,通过截获该虚拟机对系统函数的调用,将该系统函数的返回值替换为指定错误值,从而将故障注入虚拟机中,实现对虚拟机的可靠性测试。
图1是本发明实施例提供的一种虚拟机可靠性测试方法流程图。参见图1,该方法包括:
步骤101:接收故障注入指令,该故障注入指令至少携带故障标识,该故障标识用于标识宿主机中运行的虚拟机的虚拟硬件资源。
步骤102:根据该故障标识,获取故障命令字,该故障命令字为对该虚拟硬件资源进行故障注入的故障参数,且该故障命令字与宿主机的系统函数指定位上的命令字存在关联关系,该指定位上的命令字为该虚拟硬件资源运行过程中该系统函数需调用的参数。
步骤103:当监听到宿主机的系统函数被调用时,根据该故障命令字和指定位上的命令字,判断调用该系统函数的虚拟机是否为占用该虚拟硬件资源的测试虚拟机。
步骤104:如果是,则截获该系统函数,将该系统函数的返回值设置为指定错误值,并将该指定错误值返回给测试虚拟机,使测试虚拟机进行可靠性测试。
其中,本发明实施例的执行主体可以为宿主机。
在本发明实施例中,每个虚拟机访问宿主机的物理硬件资源时,都会调用宿主机的系统函数,因此,通过系统函数的挂钩函数,监听系统函数是否被调用,当系统函数被调用时,通过该挂钩函数,截获该系统函数,并将该系统函数的返回值替换为指定错误值,从而将故障注入虚拟机中。当虚拟机接收到该指定错误值时,确定虚拟机的虚拟硬件资源出现故障,进入故障处理过程,实现对虚拟机可靠性的测试。整个过程无需测试人员定位以及在线修改宿主机的源码,只需测试人员输入故障标识,降低了对测试人员的技能要求,并且也无需安装调试工具,操作比较简单。
可选地,根据该故障标识,获取故障命令字,包括:
根据该故障标识,从存储的故障标识与KVM(英文:Kernel-based VirtualMachine;中文:基于内核的虚拟机)命令字之间的对应关系中,获取对应的KVM命令字;
将获取的KVM命令字确定为故障命令字。
可选地,根据该故障标识,获取故障命令字,包括:
根据该故障标识,从存储的故障标识与KVM命令字之间的对应关系中,获取对应的KVM命令字;
根据获取的KVM命令字,从存储的KVM命令字与系统命令字之间的对应关系中,获取对应的系统命令字;
将获取的系统命令字确定为故障命令字。
在不同的Linux内核版本中,KVM命令字生成的方式可能不同,因此,在不同版本的Linux内核中,可以对KVM命令字设置不同的系统命令字,也即是,存储KVM命令字与系统命令字之间的对应关系,降低了维护适配成本。
可选地,当监听到宿主机的系统函数被调用时,根据该故障命令字和指定位上的命令字,判断调用该系统函数的虚拟机是否为占用该虚拟硬件资源的测试虚拟机之前,还包括:
对该宿主机的系统函数设置挂钩函数;
通过该挂钩函数,监听该系统函数是否被调用;
如果该系统函数被调用,则通过该挂钩函数,获取该系统函数待调用的指定位上的命令字。
可选地,根据该故障命令字和指定位上的命令字,判断调用该系统函数的虚拟机是否为占用该虚拟硬件资源的测试虚拟机,包括:
判断获取的指定位上的命令字与该故障命令字是否相同;
如果获取的指定位上的命令字与该故障命令字相同,则确定调用该系统函数的虚拟机为占用该虚拟硬件资源的测试虚拟机。
为了对该虚拟机进行可靠性测试,可以向该虚拟机中的虚拟硬件资源注入故障,也即是,事先存储故障标识与故障命令字之间的对应关系,该故障命令字正是对该虚拟硬件资源进行故障注入的故障参数,之后通过故障注入指令进行故障注入。而该虚拟机中的虚拟硬件资源运行时所需的参数一般可以通过调用宿主机的系统函数获取,也即是,该系统函数待调用的指定位上的命令字为该虚拟机的虚拟硬件资源运行时所需的参数。因此,可以通过该系统函数待调用的指定位上的命令字和该故障命令字,从该宿主机中的多个虚拟机中,确定占用该虚拟硬件资源的测试虚拟机。
另外,当故障注入指令携带故障标识时,可以对该宿主机中所有占用该虚拟硬件资源的虚拟机进行可靠性测试,也即是,进行可靠性测试的测试虚拟机可能会包括多个,降低了多个虚拟机协同测试的难度。
可选地,根据该故障命令字和指定位上的命令字,判断调用该系统函数的虚拟机是否为占用该虚拟硬件资源的测试虚拟机,包括:
当该故障注入指令还携带指定进程标识时,判断获取的指定位上的命令字与该故障命令字是否相同,以及判断调用该系统函数的虚拟机进程标识是否与指定进程标识相同;
如果获取的指定位上的命令字与该故障命令字相同且调用该系统函数的虚拟机进程标识与指定进程标识相同,则确定调用该系统函数的虚拟机为占用该虚拟硬件资源的测试虚拟机。
由于虚拟机运行时,可以占用一个进程,也即是,一个虚拟机对应一个进程标识,所以,当故障注入指令中还携带指定进程标识时,可以对占用该虚拟硬件资源的指定虚拟机进行可靠性测试,测试方式比较灵活。
可选地,根据该故障命令字和指定位上的命令字,判断调用该系统函数的虚拟机是否为占用该虚拟硬件资源的测试虚拟机,包括:
当故障注入指令还携带指定进程标识和指定线程标识时,判断获取的指定位上的命令字与故障命令字是否相同,判断调用该系统函数的虚拟机进程标识是否与指定进程标识相同,以及判断调用该系统函数的虚拟机线程标识是否与指定线程标识相同;
如果获取的指定位上的命令字与故障命令字相同、调用该系统函数的虚拟机进程标识与指定进程标识相同且调用该系统函数的虚拟机线程标识与指定线程标识相同,则确定调用该系统函数的虚拟机为占用该虚拟硬件资源的测试虚拟机。
由于每个虚拟机中还可以包括多个资源,比如CPU资源、内存资源和I/O资源等,当虚拟机运行时会占用一个进程,而当虚拟机中的每个资源运行时,还会占用该进程中的一个线程,也即是,一个虚拟机对应一个进程标识,一个虚拟机中的资源对应一个线程标识,所以,当故障注入指令中还携带指定进程标识和指定线程标识时,可以对占用该虚拟硬件资源的指定虚拟机中的指定资源进行可靠性测试,测试方式更加灵活,且测试粒度更细。
可选地,截获该系统函数,将该系统函数的返回值设置为指定错误值,并将该指定错误值返回给测试虚拟机,包括:
通过该系统函数的挂钩函数,截获该系统函数;
通过该挂钩函数,将寄存器中存储的返回值替换为指定错误值,将该寄存器中存储的该指定错误值返回给测试虚拟机,该寄存器用于存储该系统函数的返回值。
上述所有可选技术方案,均可按照任意结合形成本发明的可选实施例,本发明实施例对此不再一一赘述。
图2是本发明实施例提供的一种虚拟机可靠性测试方法流程图。参见图2,该方法包括:
步骤201:接收故障注入指令,该故障注入指令至少携带故障标识,该故障标识用于标识宿主机中运行的虚拟机的虚拟硬件资源。
该故障注入指令可以是测试人员触发的,且该故障注入指令用于将故障注入待测试的虚拟机中,因此,当宿主机接收到该故障注入指令时,可以基于该故障注入指令将故障注入待测试的虚拟机中。另外,虚拟硬件资源是虚拟机为虚拟机操作系统模拟出的CPU、内存、I/O等硬件资源,换句话说,每个虚拟机会对应一套虚拟硬件资源。比如,虚拟机对应的虚拟硬件资源包括CPU资源、内存资源和I/O资源,CPU资源又包括虚拟CPU、虚拟CPU的ID(英文:Identity;中文:身份标识),虚拟CPU的寄存器、虚拟CPU设备属性、浮点运算单元等,内存资源又包括虚拟MEM(英文:Memory;中文:存贮器)、虚拟MMU(英文:Memory ManagementUnit;中文:内存管理单元)等,I/O资源又包括中断控制器、虚拟时钟、中断请求、中断信息等,虚拟硬件资源列表如下表1所示。
表1
故障标识用于标识宿主机中运行的虚拟机的虚拟硬件资源,也即是,每个虚拟硬件资源对应一个故障标识,且故障标识可以为数字、字符等等。比如,基于上述表1,每个虚拟硬件资源对应的故障标识如下表2所示的虚拟硬件资源与故障标识之间的对应关系。
表2
虚拟硬件资源 | 故障标识 |
虚拟CPU | 11 |
虚拟CPU的ID | 12 |
虚拟CPU的寄存器 | 13 |
虚拟CPU设备属性 | 14 |
浮点运算单元 | 15 |
虚拟MEM | 21 |
虚拟MMU | 22 |
中断控制器 | 31 |
虚拟时钟 | 32 |
中断请求 | 33 |
中断信息 | 34 |
需要说明的是,在本发明实施例中,仅以上述表1所述的虚拟硬件资源与故障标识之间的对应关系为例进行说明,实际应用中,还可以将表1所示的虚拟硬件资源划分的更细,比如,可以将虚拟CPU的寄存器划分为各种类型的寄存器,如此,每个寄存器会对应一个故障标识,从而可以对虚拟机中更细粒度的虚拟硬件资源进行可靠性测试。
需要说明的是,在本发明实施例中,该故障注入指令不仅可以携带故障标识,还可以携带指定进程标识、或者指定进程标识和指定线程标识。当该故障注入指令携带故障标识时,确定待测试的虚拟机为该虚拟化架构中的所有占用该虚拟硬件资源的虚拟机,也即是,对所有占用该虚拟硬件资源的虚拟机进行可靠性测试;当该故障注入指令不仅携带故障标识,还携带指定进程标识时,确定待测试的虚拟机为该指定进程标识对应的指定虚拟机,也即是,对占用该虚拟硬件资源的指定虚拟机进行可靠性测试。其中,指定进程标识为占用该虚拟硬件资源的指定虚拟机的进程标识。当该故障注入指令不仅携带故障标识,还携带指定进程标识和指定线程标识时,确定待测试的虚拟机为该指定进程标识对应的指定虚拟机中的指定线程标识对应的指定资源,也即是,对占用该虚拟硬件资源的指定虚拟机中的指定资源进行可靠性测试。其中,指定线程标识为占用该虚拟硬件资源的指定虚拟机中指定资源的线程标识。
步骤202:根据该故障标识,获取故障命令字,该故障命令字为对该虚拟硬件资源进行故障注入的故障参数,且该故障命令字与宿主机的系统函数指定位上的命令字存在关联关系,该指定位上的命令字为该虚拟硬件资源运行过程中该系统函数需调用的参数。
宿主机的系统函数中,通过命令字可以实现虚拟机的创建、虚拟机的虚拟CPU的配置等等,并且故障命令字为对该虚拟硬件资源进行故障注入的故障参数,该故障参数可以包括进行故障注入的虚拟硬件资源的编号等等,因此,当宿主机接收到故障标识时,需要获取该故障标识对应的故障命令字,具体为:宿主机根据该故障标识,从存储的故障标识与KVM命令字之间的对应关系中,获取对应的KVM命令字;将获取的KVM命令字确定为故障命令字。
比如,该故障标识为11,故障标识与KVM命令字之间的对应关系如下表3所示,此时,根据该故障标识11,从表3所示的对应关系中,获取对应的KVM命令字为命令字1,将获取的命令字1确定为故障命令字。
表3
故障标识 | KVM命令字 |
11 | 命令字1 |
12 | 命令字2 |
13 | 命令字3 |
…… | …… |
进一步地,在不同的Linux内核版本中,KVM命令字生成的方式可能不同,因此,在不同版本的Linux内核中,可以对KVM命令字设置不同的系统命令字,也即是,存储KVM命令字与系统命令字之间的对应关系,维护适配成本较低。此时,宿主机根据该故障标识,获取故障命令字,包括:根据获取的KVM命令字,从存储的KVM命令字与系统命令字之间的对应关系中,获取对应的系统命令字;将获取的系统命令字确定为故障命令字。
比如,存储的KVM命令字与系统命令字之间的对应关系如下表4所示,此时,根据获取的命令字1,从表4所示的对应关系中,获取对应的系统命令字为命令字11,将获取的命令字11确定为故障命令字。
表4
KVM命令字 | 系统命令字 |
命令字1 | 命令字11 |
命令字2 | 命令字21 |
命令字3 | 命令字31 |
…… | …… |
需要说明的是,在本发明实施例中,宿主机的系统函数可以为sys_ioctl函数,本发明实施例对此不做具体限定。
步骤203:对宿主机的系统函数设置挂钩函数,通过该挂钩函数,监听系统函数是否被调用。
为了截获系统函数,需要监听系统函数是否被调用,因此,本发明实施例中,宿主机可以对系统函数设置一个挂钩函数,该挂钩函数的触发地址为该系统函数的地址。通过该挂钩函数,实时监听该系统函数是否被调用。
通过该挂钩函数,实时监听该系统函数是否被调用的操作可以为:当虚拟机调用的函数地址为该挂钩函数的触发地址时,确定该系统函数被调用;当虚拟机调用的函数地址不为该挂钩函数的触发地址时,确定该系统函数未被调用。
步骤204:如果系统函数被调用,则通过该挂钩函数,获取系统函数待调用的指定位上的命令字。
系统函数待调用的命令字可能会包括多个,该多个命令字一般会按照指定的顺序进行排列,而系统函数指定位上的命令字一般为虚拟机中的虚拟硬件资源运行过程中所需的参数。比如,系统函数待调用的命令字包括5个,该5个命令字按照指定的顺序进行排列,假如,指定位为第3位,此时,该系统函数待调用的5个命令字中的第3位上的命令字为虚拟机中的虚拟硬件资源运行过程中所需的参数。因此,当挂钩函数监听到系统函数被调用时,可以获取系统函数待调用的指定位上的命令字,并基于获取的指定位上的命令字和故障命令字,判断调用该系统函数的虚拟机是否为占用该虚拟硬件资源的测试虚拟机。
需要说明的是,指定位可以为该系统函数待调用的多个命令字中的第一位、第二位、第三位等等,本发明实施例对此不做具体限定。
进一步地,如果系统函数未被调用,则该挂钩函数一直处于监听状态。
步骤205:基于获取的指定位上的命令字和故障命令字,判断调用该系统函数的虚拟机是否为占用该虚拟硬件资源的测试虚拟机,如果是,则执行步骤206,否则,结束操作。
为了对该虚拟机进行可靠性测试,可以向该虚拟机中的虚拟硬件资源注入故障,也即是,事先存储故障标识与故障命令字之间的对应关系,该故障命令字正是对该虚拟硬件资源进行故障注入的故障参数,之后通过故障注入指令进行故障注入。而该虚拟机中的虚拟硬件资源运行时所需的参数一般可以通过调用宿主机的系统函数获取,也即是,该系统函数待调用的指定位上的命令字为该虚拟机的虚拟硬件资源运行时所需的参数。因此,可以通过该系统函数待调用的指定位上的命令字和该故障命令字,从该宿主机中的多个虚拟机中,确定占用该虚拟硬件资源的测试虚拟机。
如果待测试的是所有占用该虚拟硬件资源的虚拟机,也即是,当故障注入指令携带故障标识时,宿主机只需判断获取的指定位上的命令字与故障命令字是否相同;如果获取的指定位上的命令字与故障命令字相同,则确定调用系统函数的虚拟机为占用该虚拟硬件资源的测试虚拟机。
进一步地,如果获取的指定位上的命令字与故障命令字不同,则确定调用系统函数的虚拟机不为占用该虚拟硬件资源的测试虚拟机。
如果待测试的是占用该虚拟硬件资源的指定虚拟机,也即是,当故障注入指令不仅携带故障标识,还携带指定进程标识时,宿主机判断获取的指定位上的命令字与故障命令字是否相同,以及判断调用系统函数的虚拟机进程标识是否与指定进程标识相同;如果获取的指定位上的命令字与故障命令字相同且调用该系统函数的虚拟机进程标识与指定进程标识相同,则确定调用该系统函数的虚拟机为占用该虚拟硬件资源的测试虚拟机,也即是,调用该系统函数的虚拟机为占用该虚拟硬件资源的指定虚拟机。
进一步地,如果获取的指定位上的命令字与故障命令字不同,或者调用该系统函数的虚拟机进程标识与指定进程标识不同,则确定调用该系统函数的虚拟机不为占用该虚拟硬件资源的测试虚拟机。
比如,该故障注入指令还携带指定进程标识为ID1,调用该系统函数的虚拟机进程标识为ID1,步骤204中获取的指定位上的命令字为命令字11,故障命令字也为命令字11,确定调用该系统函数的虚拟机为占用该虚拟硬件资源的测试虚拟机,也即是,调用该系统函数的虚拟机为占用该虚拟硬件资源的指定虚拟机。
如果待测试的是占用该虚拟硬件资源的指定虚拟机中的指定资源,也即是,故障注入指令不仅携带故障标识,还携带指定进程标识和指定线程标识时,宿主机判断获取的指定位上的命令字与故障命令字是否相同,判断调用该系统函数的虚拟机进程标识是否与指定进程标识相同,以及判断调用该系统函数的虚拟机线程标识是否与指定线程标识相同;如果获取的指定位上的命令字与故障命令字相同、调用该系统函数的虚拟机进程标识与指定进程标识相同且调用该系统函数的虚拟机线程标识与指定线程标识相同,则确定调用该系统函数的虚拟机为占用该虚拟硬件资源的测试虚拟机。
进一步地,如果获取的指定位上的命令字与故障命令字不同、调用该系统函数的虚拟机进程标识与指定进程标识不同、或者调用该系统函数的虚拟机线程标识与指定线程标识不同,则确定调用该系统函数的虚拟机不为占用该虚拟硬件资源的测试虚拟机。
需要说明的是,在本发明实施例中,通过上述方法不仅可以同时对占用该虚拟硬件资源的所有虚拟机进行可靠性测试,还可以对指定虚拟机和指定虚拟机中的指定资源进行可靠性测试,降低了多个虚拟机协同测试的难度。另外,在虚拟机调用宿主机系统函数的接口函数层进行统一的故障模拟,操作简单,有效减少了故障模拟进行可靠性测试的部署及实施工作量,且经实验表明,使用本发明实施例提供的方法进行虚拟机可靠性测试时,测试的工作量至少减少60%。
步骤206:截获该系统函数,将该系统函数的返回值设置为指定错误值,并将该指定错误值返回给测试虚拟机,使测试虚拟机进行可靠性测试。
具体地,宿主机通过该挂钩函数,截获该系统函数,并将寄存器中存储的返回值替换为指定错误值,该寄存器用于存储该系统函数的返回值;将该寄存器中存储的指定错误值返回给测试虚拟机。当测试虚拟机获取到该指定错误值时,确定该测试虚拟机的虚拟硬件资源出现故障,对该故障进行处理,实现该测试虚拟机的可靠性测试。
其中,该寄存器可以为EAX寄存器,本发明实施例对此不做具体限定。
可选地,如果调用该系统函数的虚拟机不为占用该虚拟硬件资源的测试虚拟机,则不截获该系统函数,该虚拟机继续调用该系统函数,获取到该系统函数的返回值。
需要说明的是,在本发明实施例中,当取消对虚拟机可靠性的测试时,可以不用输入故障注入指令,恢复虚拟机的运行,使虚拟机从测试状态切换到正常运行状态的成本较低,操作也较简单。另外,本发明实施例的执行主体可以为位于虚拟机与宿主机内核之间的故障注入模块,本发明实施例对此不做具体限定。
在本发明实施例中,每个虚拟机访问宿主机的物理硬件资源时,都会调用宿主机的系统函数,因此,通过系统函数的挂钩函数,监听系统函数是否被调用,当系统函数被调用时,通过该挂钩函数,截获该系统函数,并将该系统函数的返回值替换为指定错误值,从而将故障注入虚拟机中。当虚拟机获取到该指定错误值时,确定虚拟机的虚拟硬件资源出现故障,进入故障处理过程,实现对虚拟机可靠性的测试。整个过程无需测试人员定位以及在线修改宿主机的源码,只需测试人员输入故障标识,降低了对测试人员的技能要求,并且也无需安装调试工具,操作比较简单。
图3是本发明实施例提供的一种虚拟机可靠性测试装置结构示意图。参见图3,该装置包括:
接收模块301,用于接收故障注入指令,该故障注入指令至少携带故障标识,该故障标识用于标识宿主机中运行的虚拟机的虚拟硬件资源;
第一获取模块302,用于根据该故障标识,获取故障命令字,该故障命令字为对该虚拟硬件资源进行故障注入的故障参数,且该故障命令字与宿主机的系统函数指定位上的命令字存在关联关系,该指定位上的命令字为该虚拟硬件资源运行过程中该系统函数需调用的参数;
判断模块303,用于当监听到宿主机的系统函数被调用时,根据该故障命令字和指定位上的命令字,判断调用该系统函数的虚拟机是否为占用该虚拟硬件资源的测试虚拟机;
截获模块304,用于如果是,则截获该系统函数,将该系统函数的返回值设置为指定错误值,并将指定错误值返回给测试虚拟机,使测试虚拟机进行可靠性测试。
可选地,第一获取模块302包括:
第一获取单元,用于根据该故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
第一确定单元,用于将获取的KVM命令字确定为故障命令字。
可选地,第一获取模块302包括:
第二获取单元,用于根据该故障标识,从存储的故障标识与KVM命令字之间的对应关系中,获取对应的KVM命令字;
第三获取单元,用于根据获取的KVM命令字,从存储的KVM命令字与系统命令字之间的对应关系中,获取对应的系统命令字;
第二确定单元,用于将获取的系统命令字确定为故障命令字。
可选地,参见图4,该装置包括:
设置模块305,用于对宿主机的系统函数设置挂钩函数;
监听模块306,用于通过该挂钩函数,监听该系统函数是否被调用;
第二获取模块307,用于如果该系统函数被调用,则通过该挂钩函数,获取该系统函数待调用的指定位上的命令字。
可选地,判断模块303包括:
第一判断单元,用于判断获取的指定位上的命令字与该故障命令字是否相同;
第三确定单元,用于如果获取的指定位上的命令字与该故障命令字相同,则确定调用该系统函数的虚拟机为占用该虚拟硬件资源的测试虚拟机。
可选地,判断模块303包括:
第二判断单元,用于当故障注入指令还携带指定进程标识时,判断获取的指定位上的命令字与该故障命令字是否相同,以及判断调用该系统函数的虚拟机进程标识是否与指定进程标识相同;
第四确定单元,用于如果获取的指定位上的命令字与该故障命令字相同且调用该系统函数的虚拟机进程标识与该指定进程标识相同,则确定调用该系统函数的虚拟机为占用该虚拟硬件资源的测试虚拟机。
可选地,判断模块303包括:
第三判断单元,用于当该故障注入指令还携带指定进程标识和指定线程标识时,判断获取的指定位上的命令字与故障命令字是否相同,判断调用该系统函数的虚拟机进程标识是否与指定进程标识相同,以及判断调用该系统函数的虚拟机线程标识是否与指定线程标识相同;
第五确定单元,用于如果获取的指定位上的命令字与故障命令字相同、调用该系统函数的虚拟机进程标识与指定进程标识相同且调用该系统函数的虚拟机线程标识与指定线程标识相同,则确定调用该系统函数的虚拟机为占用该虚拟硬件资源的测试虚拟机。
可选地,截获模块304包括:
截获单元,用于通过该系统函数的挂钩函数,截获该系统函数;
替换单元,用于通过该挂钩函数,将寄存器中存储的返回值替换为指定错误值,将该寄存器中存储的该指定错误值返回给该测试虚拟机,该寄存器用于存储该系统函数的返回值。
在本发明实施例中,每个虚拟机访问宿主机的物理硬件资源时,都会调用宿主机的系统函数,因此,通过系统函数的挂钩函数,监听系统函数是否被调用,当系统函数被调用时,通过该挂钩函数,截获该系统函数,并将该系统函数的返回值替换为指定错误值,从而将故障注入虚拟机中。当虚拟机获取到该指定错误值时,确定虚拟机的虚拟硬件资源出现故障,进入故障处理过程,实现对虚拟机可靠性的测试。整个过程无需测试人员定位以及在线修改宿主机的源码,只需测试人员输入故障标识,降低了对测试人员的技能要求,并且也无需安装调试工具,操作比较简单。
需要说明的是:上述实施例提供的虚拟机可靠性测试装置在虚拟机可靠性测试时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的虚拟机可靠性测试装置与虚拟机可靠性测试方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图5是本发明实施例提供的一种虚拟机可靠性测试的装置结构示意图。参见图5,该装置包括:接收机501和处理器502;
接收机501,用于接收故障注入指令,该故障注入指令至少携带故障标识,该故障标识用于标识宿主机中运行的虚拟机的虚拟硬件资源;
处理器502,用于根据该故障标识,获取故障命令字,该故障命令字为对该虚拟硬件资源进行故障注入的故障参数,且该故障命令字与该宿主机的系统函数指定位上的命令字存在关联关系,该指定位上的命令字为该虚拟硬件资源运行过程中该系统函数需调用的参数;
处理器502,还用于当监听到宿主机的系统函数被调用时,根据该故障命令字和指定位上的命令字,判断调用该系统函数的虚拟机是否为占用该虚拟硬件资源的测试虚拟机;
处理器502,还用于如果是,则截获该系统函数,将该系统函数的返回值设置为指定错误值,并将指定错误值返回给测试虚拟机,使测试虚拟机进行可靠性测试。
可选地,处理器502具体用于:
根据该故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
将获取的KVM命令字确定为故障命令字。
可选地,处理器502具体用于:
根据该故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
根据获取的KVM命令字,从存储的KVM命令字与系统命令字之间的对应关系中,获取对应的系统命令字;
将获取的系统命令字确定为故障命令字。
可选地,处理器502具体用于:
对宿主机的系统函数设置挂钩函数;
通过该挂钩函数,监听该系统函数是否被调用;
如果该系统函数被调用,则通过该挂钩函数,获取该系统函数待调用的指定位上的命令字。
可选地,处理器502具体用于:
判断获取的指定位上的命令字与该故障命令字是否相同;
如果获取的指定位上的命令字与该故障命令字相同,则确定调用该系统函数的虚拟机为占用该虚拟硬件资源的测试虚拟机。
可选地,处理器502具体用于:
当故障注入指令还携带指定进程标识时,判断获取的指定位上的命令字与该故障命令字是否相同,以及判断调用该系统函数的虚拟机进程标识是否与指定进程标识相同;
如果获取的指定位上的命令字与该故障命令字相同且调用该系统函数的虚拟机进程标识与该指定进程标识相同,则确定调用该系统函数的虚拟机为占用该虚拟硬件资源的测试虚拟机。
可选地,处理器502具体用于:
当故障注入指令还携带指定进程标识和指定线程标识时,判断获取的指定位上的命令字与故障命令字是否相同,判断调用该系统函数的虚拟机进程标识是否与指定进程标识相同,以及判断调用该系统函数的虚拟机线程标识是否与指定线程标识相同;
如果获取的指定位上的命令字与故障命令字相同、调用该系统函数的虚拟机进程标识与指定进程标识相同且调用该系统函数的虚拟机线程标识与指定线程标识相同,则确定调用该系统函数的虚拟机为占用该虚拟硬件资源的测试虚拟机。
可选地,处理器502具体用于:
通过该系统函数的挂钩函数,截获该系统函数;
通过该挂钩函数,将寄存器中存储的返回值替换为指定错误值,将该寄存器中存储的该指定错误值返回给该测试虚拟机,该寄存器用于存储该系统函数的返回值。
在本发明实施例中,每个虚拟机访问宿主机的物理硬件资源时,都会调用宿主机的系统函数,因此,通过系统函数的挂钩函数,监听系统函数是否被调用,当系统函数被调用时,通过该挂钩函数,截获该系统函数,并将该系统函数的返回值替换为指定错误值,从而将故障注入虚拟机中。当虚拟机获取到该指定错误值时,确定虚拟机的虚拟硬件资源出现故障,进入故障处理过程,实现对虚拟机可靠性的测试。整个过程无需测试人员定位以及在线修改宿主机的源码,只需测试人员输入故障标识,降低了对测试人员的技能要求,并且也无需安装调试工具,操作比较简单。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (24)
1.一种虚拟机可靠性测试方法,其特征在于,所述方法包括:
接收故障注入指令,所述故障注入指令至少携带故障标识,所述故障标识用于标识宿主机中运行的虚拟机的虚拟硬件资源;
根据所述故障标识,获取故障命令字,所述故障命令字为对所述虚拟硬件资源进行故障注入的故障参数,且所述故障命令字与所述宿主机的系统函数指定位上的命令字存在关联关系,所述指定位上的命令字为所述虚拟硬件资源运行过程中所述系统函数需调用的参数;
当监听到所述宿主机的系统函数被调用时,根据所述故障命令字和所述指定位上的命令字,判断调用所述系统函数的虚拟机是否为占用所述虚拟硬件资源的测试虚拟机;
如果是,则截获所述系统函数,将所述系统函数的返回值设置为指定错误值,并将所述指定错误值返回给所述测试虚拟机,使所述测试虚拟机进行可靠性测试。
2.如权利要求1所述的方法,其特征在于,所述根据所述故障标识,获取故障命令字,包括:
根据所述故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
将获取的KVM命令字确定为故障命令字。
3.如权利要求1所述的方法,其特征在于,所述根据所述故障标识,获取故障命令字,包括:
根据所述故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
根据获取的KVM命令字,从存储的KVM命令字与系统命令字之间的对应关系中,获取对应的系统命令字;
将获取的系统命令字确定为故障命令字。
4.如权利要求1-3任一权利要求所述的方法,其特征在于,所述根据所述故障命令字和所述指定位上的命令字,判断调用所述系统函数的虚拟机是否为占用所述虚拟硬件资源的测试虚拟机之前,还包括:
对所述宿主机的系统函数设置挂钩函数;
通过所述挂钩函数,监听所述系统函数是否被调用;
如果所述系统函数被调用,则通过所述挂钩函数,获取所述系统函数待调用的指定位上的命令字。
5.如权利要求1-3任一权利要求所述的方法,其特征在于,所述根据所述故障命令字和所述指定位上的命令字,判断调用所述系统函数的虚拟机是否为占用所述虚拟硬件资源的测试虚拟机,包括:
判断所述指定位上的命令字与所述故障命令字是否相同;
如果所述指定位上的命令字与所述故障命令字相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
6.如权利要求1-3任一权利要求所述的方法,其特征在于,所述根据所述故障命令字和所述指定位上的命令字,判断调用所述系统函数的虚拟机是否为占用所述虚拟硬件资源的测试虚拟机,包括:
当所述故障注入指令还携带指定进程标识时,判断所述指定位上的命令字与所述故障命令字是否相同,以及判断调用所述系统函数的虚拟机进程标识是否与所述指定进程标识相同;
如果所述指定位上的命令字与所述故障命令字相同且调用所述系统函数的虚拟机进程标识与所述指定进程标识相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
7.如权利要求1-3任一权利要求所述的方法,其特征在于,所述根据所述故障命令字和所述指定位上的命令字,判断调用所述系统函数的虚拟机是否为占用所述虚拟硬件资源的测试虚拟机,包括:
当所述故障注入指令还携带指定进程标识和指定线程标识时,判断所述指定位上的命令字与所述故障命令字是否相同,判断调用所述系统函数的虚拟机进程标识是否与所述指定进程标识相同,以及判断调用所述系统函数的虚拟机线程标识是否与所述指定线程标识相同;
如果所述指定位上的命令字与所述故障命令字相同、调用所述系统函数的虚拟机进程标识与所述指定进程标识相同且调用所述系统函数的虚拟机线程标识与所述指定线程标识相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
8.如权利要求1-3任一权利要求所述的方法,其特征在于,所述截获所述系统函数,将所述系统函数的返回值设置为指定错误值,并将所述指定错误值返回给所述测试虚拟机,包括:
通过所述系统函数的挂钩函数,截获所述系统函数;
通过所述挂钩函数,将寄存器中存储的返回值替换为指定错误值,将所述寄存器中存储的所述指定错误值返回给所述测试虚拟机,所述寄存器用于存储所述系统函数的返回值。
9.一种虚拟机可靠性测试装置,其特征在于,所述装置包括:
接收模块,用于接收故障注入指令,所述故障注入指令至少携带故障标识,所述故障标识用于标识宿主机中运行的虚拟机的虚拟硬件资源;
第一获取模块,用于根据所述故障标识,获取故障命令字,所述故障命令字为对所述虚拟硬件资源进行故障注入的故障参数,且所述故障命令字与所述宿主机的系统函数指定位上的命令字存在关联关系,所述指定位上的命令字为所述虚拟硬件资源运行过程中所述系统函数需调用的参数;
判断模块,用于当监听到所述宿主机的系统函数被调用时,根据所述故障命令字和所述指定位上的命令字,判断调用所述系统函数的虚拟机是否为占用所述虚拟硬件资源的测试虚拟机;
截获模块,用于如果是,则截获所述系统函数,将所述系统函数的返回值设置为指定错误值,并将所述指定错误值返回给所述测试虚拟机,使所述测试虚拟机进行可靠性测试。
10.如权利要求9所述的装置,其特征在于,所述第一获取模块包括:
第一获取单元,用于根据所述故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
第一确定单元,用于将获取的KVM命令字确定为故障命令字。
11.如权利要求9所述的装置,其特征在于,所述第一获取模块包括:
第二获取单元,用于根据所述故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
第三获取单元,用于根据获取的KVM命令字,从存储的KVM命令字与系统命令字之间的对应关系中,获取对应的系统命令字;
第二确定单元,用于将获取的系统命令字确定为故障命令字。
12.如权利要求9-11任一权利要求所述的装置,其特征在于,所述装置还包括:
设置模块,用于对所述宿主机的系统函数设置挂钩函数;
监听模块,用于通过所述挂钩函数,监听所述系统函数是否被调用;
第二获取模块,用于如果所述系统函数被调用,则通过所述挂钩函数,获取所述系统函数待调用的指定位上的命令字。
13.如权利要求9-11任一权利要求所述的装置,其特征在于,所述判断模块包括:
第一判断单元,用于判断所述指定位上的命令字与所述故障命令字是否相同;
第三确定单元,用于如果所述指定位上的命令字与所述故障命令字相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
14.如权利要求9-11任一权利要求所述的装置,其特征在于,所述判断模块包括:
第二判断单元,用于当所述故障注入指令还携带指定进程标识时,判断所述指定位上的命令字与所述故障命令字是否相同,以及判断调用所述系统函数的虚拟机进程标识是否与所述指定进程标识相同;
第四确定单元,用于如果所述指定位上的命令字与所述故障命令字相同且调用所述系统函数的虚拟机进程标识与所述指定进程标识相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
15.如权利要求9-11任一权利要求所述的装置,其特征在于,所述判断模块包括:
第三判断单元,用于当所述故障注入指令还携带指定进程标识和指定线程标识时,判断所述指定位上的命令字与所述故障命令字是否相同,判断调用所述系统函数的虚拟机进程标识是否与所述指定进程标识相同,以及判断调用所述系统函数的虚拟机线程标识是否与所述指定线程标识相同;
第五确定单元,用于如果所述指定位上的命令字与所述故障命令字相同、调用所述系统函数的虚拟机进程标识与所述指定进程标识相同且调用所述系统函数的虚拟机线程标识与所述指定线程标识相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
16.如权利要求9-11任一权利要求所述的装置,其特征在于,所述截获模块包括:
截获单元,用于通过所述系统函数的挂钩函数,截获所述系统函数;
替换单元,用于通过所述挂钩函数,将寄存器中存储的返回值替换为指定错误值,将所述寄存器中存储的所述指定错误值返回给所述测试虚拟机,所述寄存器用于存储所述系统函数的返回值。
17.一种虚拟机可靠性测试装置,其特征在于,所述装置包括:
接收机,用于接收故障注入指令,所述故障注入指令至少携带故障标识,所述故障标识用于标识宿主机中运行的虚拟机的虚拟硬件资源;
处理器,用于根据所述故障标识,获取故障命令字,所述故障命令字为对所述虚拟硬件资源进行故障注入的故障参数,且所述故障命令字与所述宿主机的系统函数指定位上的命令字存在关联关系,所述指定位上的命令字为所述虚拟硬件资源运行过程中所述系统函数需调用的参数;
所述处理器,还用于当监听到所述宿主机的系统函数被调用时,根据所述故障命令字和所述指定位上的命令字,判断调用所述系统函数的虚拟机是否为占用所述虚拟硬件资源的测试虚拟机;
所述处理器,还用于如果是,则截获所述系统函数,将所述系统函数的返回值设置为指定错误值,并将所述指定错误值返回给所述测试虚拟机,使所述测试虚拟机进行可靠性测试。
18.如权利要求17所述的装置,其特征在于,
所述处理器,具体用于:
根据所述故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
将获取的KVM命令字确定为故障命令字。
19.如权利要求17所述的装置,其特征在于,
所述处理器,具体用于:
根据所述故障标识,从存储的故障标识与基于内核的虚拟机KVM命令字之间的对应关系中,获取对应的KVM命令字;
根据获取的KVM命令字,从存储的KVM命令字与系统命令字之间的对应关系中,获取对应的系统命令字;
将获取的系统命令字确定为故障命令字。
20.如权利要求17-19任一权利要求所述的装置,其特征在于,
所述处理器,具体用于:
对所述宿主机的系统函数设置挂钩函数;
通过所述挂钩函数,监听所述系统函数是否被调用;
如果所述系统函数被调用,则通过所述挂钩函数,获取所述系统函数待调用的指定位上的命令字。
21.如权利要求17-19任一权利要求所述的装置,其特征在于,
所述处理器,具体用于:
判断所述指定位上的命令字与所述故障命令字是否相同;
如果所述指定位上的命令字与所述故障命令字相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
22.如权利要求17-19任一权利要求所述的装置,其特征在于,
所述处理器,具体用于:
当所述故障注入指令还携带指定进程标识时,判断所述指定位上的命令字与所述故障命令字是否相同,以及判断调用所述系统函数的虚拟机进程标识是否与所述指定进程标识相同;
如果所述指定位上的命令字与所述故障命令字相同且调用所述系统函数的虚拟机进程标识与所述指定进程标识相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
23.如权利要求17-19任一权利要求所述的装置,其特征在于,
所述处理器,具体用于:
当所述故障注入指令还携带指定进程标识和指定线程标识时,判断所述指定位上的命令字与所述故障命令字是否相同,判断调用所述系统函数的虚拟机进程标识是否与所述指定进程标识相同,以及判断调用所述系统函数的虚拟机线程标识是否与所述指定线程标识相同;
如果所述指定位上的命令字与所述故障命令字相同、调用所述系统函数的虚拟机进程标识与所述指定进程标识相同且调用所述系统函数的虚拟机线程标识与所述指定线程标识相同,则确定调用所述系统函数的虚拟机为占用所述虚拟硬件资源的测试虚拟机。
24.如权利要求17-19任一权利要求所述的装置,其特征在于,
所述处理器,具体用于:
通过所述系统函数的挂钩函数,截获所述系统函数;
通过所述挂钩函数,将寄存器中存储的返回值替换为指定错误值,将所述寄存器中存储的所述指定错误值返回给所述测试虚拟机,所述寄存器用于存储所述系统函数的返回值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510143859.2A CN106155883B (zh) | 2015-03-30 | 2015-03-30 | 一种虚拟机可靠性测试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510143859.2A CN106155883B (zh) | 2015-03-30 | 2015-03-30 | 一种虚拟机可靠性测试方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106155883A CN106155883A (zh) | 2016-11-23 |
CN106155883B true CN106155883B (zh) | 2019-02-19 |
Family
ID=57340299
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510143859.2A Active CN106155883B (zh) | 2015-03-30 | 2015-03-30 | 一种虚拟机可靠性测试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106155883B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108268365B (zh) * | 2016-12-30 | 2020-12-18 | 腾讯科技(深圳)有限公司 | 异常任务注入方法、装置和系统 |
CN107025171A (zh) * | 2017-03-10 | 2017-08-08 | 深圳航天科技创新研究院 | 一种实现虚拟验证系统故障注入的方法 |
CN106656684B (zh) * | 2017-03-27 | 2020-07-24 | 苏州大学 | 一种网格资源可靠性监控方法及装置 |
CN107145411A (zh) * | 2017-05-02 | 2017-09-08 | 郑州云海信息技术有限公司 | 一种基于磁盘镜像软件drbd的坏盘模拟方法 |
CN109032825B (zh) * | 2018-06-06 | 2021-09-14 | 创新先进技术有限公司 | 一种故障注入方法、装置及设备 |
CN108958884B (zh) * | 2018-06-22 | 2022-02-18 | 郑州云海信息技术有限公司 | 一种虚拟机管理的方法及相关装置 |
CN110674028A (zh) * | 2019-08-20 | 2020-01-10 | 华为技术有限公司 | 故障注入方法及其装置、业务服务系统 |
CN110806922B (zh) * | 2019-10-14 | 2022-06-21 | 广州微算互联信息技术有限公司 | 一种执行脚本方法、装置、设备及存储介质 |
CN111400182B (zh) * | 2020-03-16 | 2021-08-17 | 腾讯科技(深圳)有限公司 | 故障注入方法、装置、服务器及计算机可读存储介质 |
CN111966599B (zh) * | 2020-08-20 | 2022-10-18 | 苏州浪潮智能科技有限公司 | 一种虚拟化平台可靠性测试方法、系统、终端及存储介质 |
CN112527635B (zh) * | 2020-11-30 | 2023-08-11 | 北京百度网讯科技有限公司 | 一种故障注入方法、装置、电子设备以及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101872323A (zh) * | 2009-04-22 | 2010-10-27 | 曾凡平 | 一种基于虚拟机的故障注入测试方法 |
CN102495802A (zh) * | 2011-12-26 | 2012-06-13 | 华为技术有限公司 | 测试软件系统的方法和装置以及计算机系统 |
CN103020525A (zh) * | 2012-12-20 | 2013-04-03 | 北京奇虎科技有限公司 | 虚拟机系统的反检测方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9015234B2 (en) * | 2012-07-25 | 2015-04-21 | Lg Cns Co., Ltd. | Automated distributed testing administration environment |
-
2015
- 2015-03-30 CN CN201510143859.2A patent/CN106155883B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101872323A (zh) * | 2009-04-22 | 2010-10-27 | 曾凡平 | 一种基于虚拟机的故障注入测试方法 |
CN102495802A (zh) * | 2011-12-26 | 2012-06-13 | 华为技术有限公司 | 测试软件系统的方法和装置以及计算机系统 |
CN103020525A (zh) * | 2012-12-20 | 2013-04-03 | 北京奇虎科技有限公司 | 虚拟机系统的反检测方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106155883A (zh) | 2016-11-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106155883B (zh) | 一种虚拟机可靠性测试方法及装置 | |
US9483383B2 (en) | Injecting faults at select execution points of distributed applications | |
Xu et al. | POD-Diagnosis: Error diagnosis of sporadic operations on cloud applications | |
Rodríguez et al. | MAFALDA: Microkernel assessment by fault injection and design aid | |
Dean et al. | Perfcompass: Online performance anomaly fault localization and inference in infrastructure-as-a-service clouds | |
US20140181794A1 (en) | System and method for correct execution of software | |
CN105988798B (zh) | 补丁处理方法及装置 | |
US20070079288A1 (en) | System and method for capturing filtered execution history of executable program code | |
CN101872323A (zh) | 一种基于虚拟机的故障注入测试方法 | |
CN103488563A (zh) | 并行程序的数据竞争检测方法、装置及多核处理系统 | |
US10725889B2 (en) | Testing multi-threaded applications | |
CN106919462B (zh) | 一种生成处理器故障记录的方法及装置 | |
CN109947535A (zh) | 面向虚拟机的故障注入套件 | |
CN107070747A (zh) | 一种在网卡绑定模式下自动化测试网卡网络连接稳定性的方法 | |
US9514028B2 (en) | System and method for determining correct execution of software based on baseline and real time trace events | |
CN109240847A (zh) | 一种post过程中内存错误上报方法、装置、终端及存储介质 | |
CN107145426A (zh) | 一种bmc 测试me状态异常的方法 | |
Xu et al. | DualVisor: Redundant hypervisor execution for achieving hardware error resilience in datacenters | |
CN113127331B (zh) | 一种基于故障注入的测试方法、装置及计算机设备 | |
CN111176986B (zh) | 线程脚本调试方法、装置、计算机设备和存储介质 | |
US9003236B2 (en) | System and method for correct execution of software based on baseline and real time information | |
CN105912417A (zh) | 虚拟系统的检测方法和相关软件运行方法以及相关装置 | |
CN104615521A (zh) | 一种测试bmc蓝屏捕获功能的方法 | |
Seo et al. | Automating embedded software testing on an emulated target board | |
CN108763039B (zh) | 一种业务故障模拟方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |