[发明专利]一种面向KVM的虚拟化层故障注入方法有效
申请号: | 201910156834.4 | 申请日: | 2019-03-01 |
公开(公告)号: | CN109857522B | 公开(公告)日: | 2021-03-02 |
发明(设计)人: | 张展;左德承;陈思远;封威;冯懿;董剑;刘宏伟;李文浩;舒燕君;罗丹彦;温东新;尚江卫;薛利兴 | 申请(专利权)人: | 哈尔滨工业大学 |
主分类号: | G06F9/455 | 分类号: | G06F9/455 |
代理公司: | 哈尔滨市松花江专利商标事务所 23109 | 代理人: | 刘冰 |
地址: | 150001 黑龙*** | 国省代码: | 黑龙江;23 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 面向 kvm 虚拟 故障 注入 方法 | ||
1.一种面向KVM的虚拟化层故障注入方法,其特征在于,所述面向KVM的虚拟化层故障注入包括虚拟化底层故障注入和虚拟化管理层故障注入;
所述虚拟化底层故障注入包括底层的CPU故障注入、底层的内存故障注入和底层的文件系统故障注入;
所述底层的CPU故障注入是通过kprobe技术对目标函数do_fork进行故障注入来实现的;
所述底层的内存故障注入是通过jprobe技术拦截函数copy_page_range来实现的;
所述底层的文件系统故障注入是通过jprobe技术和kprobe技术配合输出的形式来实现的;
所述虚拟化管理层故障注入包括管理层的虚拟机迁移故障注入、管理层的访问控制故障注入、管理层的内存管理故障注入和管理层的状态查询故障注入;
所述管理层的虚拟机迁移故障注入是通过环境变量LD_PRELOAD运行迁移过程提供注入函数来实现的;
所述管理层的访问控制故障注入是通过内存资源负载工具产生大量的内存负载来实现的;
所述管理层的内存管理故障注入是通过jprobe技术和kprobe技术对目标函数kvm_set_memory_region()进行探测来实现的;
所述管理层的状态查询故障注入是通过采用打桩技术,并拦截替换库函数virDomainGetState来实现的;
所述底层的CPU故障注入的具体过程为:
步骤A1、在待测目标主机上加载CPU故障注入工具的内核模块,其中:内核模块内部设置有目标函数do_fork的探针;
步骤A2、创建proc文件,proc文件用于传递用户态的输入参数;
步骤A3、输入对底层的CPU进行故障注入的参数,包括故障位置参数、故障类型参数和故障方式参数;
步骤A4、触发探测函数来判断对底层的CPU进行故障注入的结束条件是否满足;
若满足,则输出对底层的CPU进行故障注入后的结果信息;
若不满足,则按照输入的参数来注入故障,并等待下一次触发探测函数,直至满足对底层的CPU进行故障注入的结束条件,再输出对底层的CPU进行故障注入后的结果信息;
步骤A5、收集故障注入后的结果信息,并统计输出;同时输出系统日志信息;
步骤A6、卸载CPU故障注入工具的内核模块,移除创建的proc文件,并卸载探测函数的kprobe探针;
所述底层的内存故障注入的具体过程为:
步骤B1、在待测目标主机上加载内存故障注入工具的内核模块,其中:内核模块内部设置有copy_page_range函数的探针;
步骤B2、创建proc文件,proc文件用于传递用户态的输入参数;
步骤B3、输入对底层的内存进行故障注入的参数,包括故障位置参数、故障类型参数和故障方式参数;
步骤B4、触发探测函数来判断对底层的内存进行故障注入的结束条件是否满足;
若满足,则输出对底层的内存进行故障注入后的结果信息;
若不满足,则按照输入的参数来注入故障,并等待下一次触发探测函数,直至满足对底层的内存进行故障注入的结束条件,再输出对底层的内存进行故障注入后的结果信息;
步骤B5、收集故障注入后的结果信息,并统计输出;同时输出系统日志信息;
步骤B6、卸载内存故障注入工具的内核模块,移除创建的proc文件,并卸载探测函数的jprobe探针;
所述底层的文件系统故障注入的具体过程为:
步骤C1、在待测目标主机上加载文件系统故障注入工具的内核模块,其中:内核模块内部设置有sys_open、sys_unlink、sys_read和sys_write函数的探针;
步骤C2、创建proc文件,proc文件用于传递用户态的输入参数;
步骤C3、输入对底层的文件系统进行故障注入的参数,包括故障位置参数、故障类型参数和故障方式参数;
步骤C4、触发探测函数来判断对底层的文件系统进行故障注入的结束条件是否满足;
若满足,则输出对底层的文件系统进行故障注入后的结果信息;
若不满足,则按照输入的参数来注入故障,并等待下一次触发探测函数,直至满足对底层的文件系统进行故障注入的结束条件,再输出对底层的文件系统进行故障注入后的结果信息;
步骤C5、故障注入结束后,收集故障注入结果并进行统计输出,同时也输出系统日志信息;
步骤C6、卸载文件系统故障注入工具的内核模块,移除创建的proc文件,并卸载探测函数的jprobe和kprobe探针;
所述管理层的虚拟机迁移故障注入的具体过程为:
步骤D1、通过环境变量LD_PRELOAD加载动态链接库对virDomainSave函数进行替换;
步骤D2、创建信息参数文件,信息参数文件用于传递用户态的输入参数;
步骤D3、输入对管理层的虚拟机迁移进行故障注入的参数,包括故障位置参数、故障类型参数和故障方式参数;
步骤D4、触发探测函数来判断对管理层的虚拟机迁移进行故障注入的结束条件是否满足;
若满足,则输出对管理层的虚拟机迁移进行故障注入后的结果信息;
若不满足,则按照输入的参数来注入故障,并等待下一次触发探测函数,直至满足对管理层的虚拟机迁移进行故障注入的结束条件,再输出对管理层的虚拟机迁移进行故障注入后的结果信息;
步骤D5、收集故障注入后的结果信息,并统计输出;同时输出系统日志信息;
步骤D6、移除环境变量LD_PRELOAD;
所述管理层的访问控制故障注入的具体过程为:
步骤E1、根据当前宿主机的资源情况创建两台虚拟机;
步骤E2、通过SSH远程执行内存负载程序,设置两台虚拟机的内存占用率均为0.9;
步骤E3、判断两台虚拟机的内存是否均达到设置的内存占用率;
若两台虚拟机的内存均达到设置的内存占用率,则收集并显示故障注入后的结果信息;否则增加内存负载,直至两台虚拟机的内存均达到设置的内存占用率时,再收集并显示故障注入后的结果信息;
所述管理层的内存管理故障注入的具体过程为:
步骤F1、在待测目标主机上加载内存管理故障注入工具的内核模块,在内核模块的初始化函数中设置kprobe和jprobe探针并绑定kvm_set_memory_region()函数;
步骤F2、创建proc文件,创建proc文件用来传递用户态参数到内核态参数的转化;
步骤F3、输入对管理层的内存管理进行故障注入的参数,包括故障注入的故障位置参数、故障类型参数和故障方式参数;
步骤F4、触发探测函数来判断对管理层的内存管理进行故障注入的结束条件是否满足;
若满足,则输出对管理层的内存管理进行故障注入后的结果信息;
若不满足,则按照输入的参数来注入故障,并等待下一次触发探测函数,直至满足对管理层的内存管理进行故障注入的结束条件,再输出对管理层的内存管理进行故障注入后的结果信息;
步骤F5、卸载内存管理故障注入工具的内核模块,移除proc文件、kprobe和jprobe探针;
所述管理层的状态查询故障注入的具体过程为:
步骤G1、在待测目标主机上加载虚拟机状态查询故障注入工具的内核模块,在/etc/profile文件中加入LD_PRELOAD环境变量,指向工具提供的替换脚本为libdetour.so;
步骤G2、创建用户空间lasting_file、msg_file和times_file文件,lasting_file、msg_file和times_file文件用于传递用户态的输入参数;
步骤G3、输入对管理层的状态查询进行故障注入的参数,包括故障位置参数、故障类型参数和故障方式参数;
步骤G4、触发探测函数来判断对管理层的状态查询进行故障注入的结束条件是否满足,
若满足,则输出对管理层的状态查询进行故障注入后的结果信息;
若不满足,则按照输入的参数来注入故障,并等待下一次触发探测函数,直至满足对管理层的状态查询进行故障注入的结束条件,再输出对管理层的状态查询进行故障注入后的结果信息;
步骤G5、收集故障注入后的结果信息并统计输出,并输出系统日志信息;
步骤G6、卸载虚拟机状态查询故障注入工具的内核模块,移除LD_PRELOAD环境变量。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于哈尔滨工业大学,未经哈尔滨工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910156834.4/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种主机搬迁方法及装置
- 下一篇:一种用于实现数据库高可用性的方法及装置