本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,特別涉及一種虛擬機(jī)可靠性測(cè)試方法及裝置。
背景技術(shù):
:隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,在一臺(tái)物理計(jì)算機(jī)上可以構(gòu)造出多個(gè)虛擬機(jī),得到一個(gè)虛擬化架構(gòu),且該物理計(jì)算機(jī)可以稱為宿主機(jī)。而隨著虛擬化架構(gòu)的不斷演進(jìn),通過(guò)模擬虛擬化架構(gòu)中虛擬機(jī)處理資源故障的方法,來(lái)驗(yàn)證系統(tǒng)容錯(cuò)能力,以測(cè)試虛擬化架構(gòu)的高可用性已成為客戶明確的需求。目前,虛擬機(jī)可靠性測(cè)試過(guò)程可以為:在宿主機(jī)上安裝GDB(英文:GNUDebugger;中文:GNU調(diào)試器)調(diào)試工具,通過(guò)GDB調(diào)試工具,在宿主機(jī)的源碼中定位出虛擬硬件處理函數(shù),并在線對(duì)定位的虛擬硬件處理函數(shù)進(jìn)行修改,以將資源故障注入虛擬機(jī)中。之后,當(dāng)該虛擬機(jī)調(diào)用該虛擬硬件處理函數(shù)時(shí),會(huì)返回錯(cuò)誤值,從而通過(guò)該錯(cuò)誤值,確定該虛擬機(jī)的資源出現(xiàn)故障。通過(guò)該虛擬機(jī)對(duì)出現(xiàn)的資源故障進(jìn)行處理,來(lái)測(cè)試虛擬機(jī)的可靠性。將資源故障注入虛擬機(jī)時(shí),測(cè)試人員需要定位及在線修改虛擬硬件處理函數(shù),對(duì)測(cè)試人員的技能要求較高。另外,在虛擬機(jī)上需要安裝GDB調(diào)試工具,操作比較復(fù)雜。技術(shù)實(shí)現(xiàn)要素:為了解決現(xiàn)有技術(shù)的問(wèn)題,本發(fā)明實(shí)施例提供了一種虛擬機(jī)可靠性測(cè)試方法及裝置,從而降低了對(duì)測(cè)試人員的技能要求,且操作比較簡(jiǎn)單。所述技術(shù)方案如下:第一方面,提供了一種虛擬機(jī)可靠性測(cè)試方法,所述方法包括:接收故障注入指令,所述故障注入指令至少攜帶故障標(biāo)識(shí),所述故障標(biāo)識(shí)用于標(biāo)識(shí)宿主機(jī)中運(yùn)行的虛擬機(jī)的虛擬硬件資源;根據(jù)所述故障標(biāo)識(shí),獲取故障命令字,所述故障命令字為對(duì)所述虛擬硬件資源進(jìn)行故障注入的故障參數(shù),且所述故障命令字與所述宿主機(jī)的系統(tǒng)函數(shù)指定位上的命令字存在關(guān)聯(lián)關(guān)系,所述指定位上的命令字為所述虛擬硬件資源運(yùn)行過(guò)程中所述系統(tǒng)函數(shù)需調(diào)用的參數(shù);當(dāng)監(jiān)聽(tīng)到所述宿主機(jī)的系統(tǒng)函數(shù)被調(diào)用時(shí),根據(jù)所述故障命令字和所述指定位上的命令字,判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)是否為占用所述虛擬硬件資源的測(cè)試虛擬機(jī);如果是,則截獲所述系統(tǒng)函數(shù),將所述系統(tǒng)函數(shù)的返回值設(shè)置為指定錯(cuò)誤值,并將所述指定錯(cuò)誤值返回給所述測(cè)試虛擬機(jī),使所述測(cè)試虛擬機(jī)進(jìn)行可靠性測(cè)試。結(jié)合第一方面,在上述第一方面的第一種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述故障標(biāo)識(shí),獲取故障命令字,包括:根據(jù)所述故障標(biāo)識(shí),從存儲(chǔ)的故障標(biāo)識(shí)與基于內(nèi)核的虛擬機(jī)KVM命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的KVM命令字;將獲取的KVM命令字確定為故障命令字。結(jié)合第一方面,在上述第一方面的第二種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述故障標(biāo)識(shí),獲取故障命令字,包括:根據(jù)所述故障標(biāo)識(shí),從存儲(chǔ)的故障標(biāo)識(shí)與基于內(nèi)核的虛擬機(jī)KVM命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的KVM命令字;根據(jù)獲取的KVM命令字,從存儲(chǔ)的KVM命令字與系統(tǒng)命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的系統(tǒng)命令字;將獲取的系統(tǒng)命令字確定為故障命令字。結(jié)合第一方面至第一方面的第二種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方 式,在上述第一方面的第三種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述故障命令字和所述指定位上的命令字,判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)是否為占用所述虛擬硬件資源的測(cè)試虛擬機(jī)之前,還包括:對(duì)所述宿主機(jī)的系統(tǒng)函數(shù)設(shè)置掛鉤函數(shù);通過(guò)所述掛鉤函數(shù),監(jiān)聽(tīng)所述系統(tǒng)函數(shù)是否被調(diào)用;如果所述系統(tǒng)函數(shù)被調(diào)用,則通過(guò)所述掛鉤函數(shù),獲取所述系統(tǒng)函數(shù)待調(diào)用的指定位上的命令字。結(jié)合第一方面至第一方面的第三種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方式,在上述第一方面的第四種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述故障命令字和所述指定位上的命令字,判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)是否為占用所述虛擬硬件資源的測(cè)試虛擬機(jī),包括:判斷所述指定位上的命令字與所述故障命令字是否相同;如果所述指定位上的命令字與所述故障命令字相同,則確定調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)為占用所述虛擬硬件資源的測(cè)試虛擬機(jī)。結(jié)合第一方面至第一方面的第三種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方式,在上述第一方面的第五種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述故障命令字和所述指定位上的命令字,判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)是否為占用所述虛擬硬件資源的測(cè)試虛擬機(jī),包括:當(dāng)所述故障注入指令還攜帶指定進(jìn)程標(biāo)識(shí)時(shí),判斷所述指定位上的命令字與所述故障命令字是否相同,以及判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)是否與所述指定進(jìn)程標(biāo)識(shí)相同;如果所述指定位上的命令字與所述故障命令字相同且調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與所述指定進(jìn)程標(biāo)識(shí)相同,則確定調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)為占用所述虛擬硬件資源的測(cè)試虛擬機(jī)。結(jié)合第一方面至第一方面的第三種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方式,在上述第一方面的第六種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述故障命令字和 所述指定位上的命令字,判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)是否為占用所述虛擬硬件資源的測(cè)試虛擬機(jī),包括:當(dāng)所述故障注入指令還攜帶指定進(jìn)程標(biāo)識(shí)和指定線程標(biāo)識(shí)時(shí),判斷所述指定位上的命令字與所述故障命令字是否相同,判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)是否與所述指定進(jìn)程標(biāo)識(shí)相同,以及判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)是否與所述指定線程標(biāo)識(shí)相同;如果所述指定位上的命令字與所述故障命令字相同、調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與所述指定進(jìn)程標(biāo)識(shí)相同且調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)與所述指定線程標(biāo)識(shí)相同,則確定調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)為占用所述虛擬硬件資源的測(cè)試虛擬機(jī)。結(jié)合第一方面至第一方面的第六種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方式,在上述第一方面的第七種可能的實(shí)現(xiàn)方式中,所述截獲所述系統(tǒng)函數(shù),將所述系統(tǒng)函數(shù)的返回值設(shè)置為指定錯(cuò)誤值,并將所述指定錯(cuò)誤值返回給所述測(cè)試虛擬機(jī),包括:通過(guò)所述系統(tǒng)函數(shù)的掛鉤函數(shù),截獲所述系統(tǒng)函數(shù);通過(guò)所述掛鉤函數(shù),將寄存器中存儲(chǔ)的返回值替換為指定錯(cuò)誤值,將所述寄存器中存儲(chǔ)的所述指定錯(cuò)誤值返回給所述測(cè)試虛擬機(jī),所述寄存器用于存儲(chǔ)所述系統(tǒng)函數(shù)的返回值。第二方面,提供了一種虛擬機(jī)可靠性測(cè)試裝置,所述裝置包括:接收模塊,用于接收故障注入指令,所述故障注入指令至少攜帶故障標(biāo)識(shí),所述故障標(biāo)識(shí)用于標(biāo)識(shí)宿主機(jī)中運(yùn)行的虛擬機(jī)的虛擬硬件資源;第一獲取模塊,用于根據(jù)所述故障標(biāo)識(shí),獲取故障命令字,所述故障命令字為對(duì)所述虛擬硬件資源進(jìn)行故障注入的故障參數(shù),且所述故障命令字與所述宿主機(jī)的系統(tǒng)函數(shù)指定位上的命令字存在關(guān)聯(lián)關(guān)系,所述指定位上的命令字為所述虛擬硬件資源運(yùn)行過(guò)程中所述系統(tǒng)函數(shù)需調(diào)用的參數(shù);判斷模塊,用于當(dāng)監(jiān)聽(tīng)到所述宿主機(jī)的系統(tǒng)函數(shù)被調(diào)用時(shí),根據(jù)所述故障命令字和所述指定位上的命令字,判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)是否為占用所述虛擬硬件資源的測(cè)試虛擬機(jī);截獲模塊,用于如果是,則截獲所述系統(tǒng)函數(shù),將所述系統(tǒng)函數(shù)的返回值設(shè)置為指定錯(cuò)誤值,并將所述指定錯(cuò)誤值返回給所述測(cè)試虛擬機(jī),使所述測(cè)試虛擬機(jī)進(jìn)行可靠性測(cè)試。結(jié)合第二方面,在上述第二方面的第一種可能的實(shí)現(xiàn)方式中,所述第一獲取模塊包括:第一獲取單元,用于根據(jù)所述故障標(biāo)識(shí),從存儲(chǔ)的故障標(biāo)識(shí)與基于內(nèi)核的虛擬機(jī)KVM命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的KVM命令字;第一確定單元,用于將獲取的KVM命令字確定為故障命令字。結(jié)合第二方面,在上述第二方面的第二種可能的實(shí)現(xiàn)方式中,所述第一獲取模塊包括:第二獲取單元,用于根據(jù)所述故障標(biāo)識(shí),從存儲(chǔ)的故障標(biāo)識(shí)與基于內(nèi)核的虛擬機(jī)KVM命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的KVM命令字;第三獲取單元,用于根據(jù)獲取的KVM命令字,從存儲(chǔ)的KVM命令字與系統(tǒng)命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的系統(tǒng)命令字;第二確定單元,用于將獲取的系統(tǒng)命令字確定為故障命令字。結(jié)合第二方面至第二方面的第二種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方式,在上述第二方面的第三種可能的實(shí)現(xiàn)方式中,所述裝置還包括:設(shè)置模塊,用于對(duì)所述宿主機(jī)的系統(tǒng)函數(shù)設(shè)置掛鉤函數(shù);監(jiān)聽(tīng)模塊,用于通過(guò)所述掛鉤函數(shù),監(jiān)聽(tīng)所述系統(tǒng)函數(shù)是否被調(diào)用;第二獲取模塊,用于如果所述系統(tǒng)函數(shù)被調(diào)用,則通過(guò)所述掛鉤函數(shù),獲取所述系統(tǒng)函數(shù)待調(diào)用的指定位上的命令字。結(jié)合第二方面至第二方面的第三種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方式,在上述第二方面的第四種可能的實(shí)現(xiàn)方式中,所述判斷模塊包括:第一判斷單元,用于判斷所述指定位上的命令字與所述故障命令字是否相同;第三確定單元,用于如果所述指定位上的命令字與所述故障命令字相同,則確定調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)為占用所述虛擬硬件資源的測(cè)試虛擬機(jī)。結(jié)合第二方面至第二方面的第三種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方式,在上述第二方面的第五種可能的實(shí)現(xiàn)方式中,所述判斷模塊包括:第二判斷單元,用于當(dāng)所述故障注入指令還攜帶指定進(jìn)程標(biāo)識(shí)時(shí),判斷所述指定位上的命令字與所述故障命令字是否相同,以及判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)是否與所述指定進(jìn)程標(biāo)識(shí)相同;第四確定單元,用于如果所述指定位上的命令字與所述故障命令字相同且調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與所述指定進(jìn)程標(biāo)識(shí)相同,則確定調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)為占用所述虛擬硬件資源的測(cè)試虛擬機(jī)。結(jié)合第二方面至第二方面的第三種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方式,在上述第二方面的第六種可能的實(shí)現(xiàn)方式中,所述判斷模塊包括:第三判斷單元,用于當(dāng)所述故障注入指令還攜帶指定進(jìn)程標(biāo)識(shí)和指定線程標(biāo)識(shí)時(shí),判斷所述指定位上的命令字與所述故障命令字是否相同,判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)是否與所述指定進(jìn)程標(biāo)識(shí)相同,以及判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)是否與所述指定線程標(biāo)識(shí)相同;第五確定單元,用于如果所述指定位上的命令字與所述故障命令字相同、調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與所述指定進(jìn)程標(biāo)識(shí)相同且調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)與所述指定線程標(biāo)識(shí)相同,則確定調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)為占用所述虛擬硬件資源的測(cè)試虛擬機(jī)。結(jié)合第二方面至第二方面的第六種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方式,在上述第二方面的第七種可能的實(shí)現(xiàn)方式中,所述截獲模塊包括:截獲單元,用于通過(guò)所述系統(tǒng)函數(shù)的掛鉤函數(shù),截獲所述系統(tǒng)函數(shù);替換單元,用于通過(guò)所述掛鉤函數(shù),將寄存器中存儲(chǔ)的返回值替換為指定 錯(cuò)誤值,將所述寄存器中存儲(chǔ)的所述指定錯(cuò)誤值返回給所述測(cè)試虛擬機(jī),所述寄存器用于存儲(chǔ)所述系統(tǒng)函數(shù)的返回值。第三方面,提供了一種虛擬機(jī)可靠性測(cè)試裝置,所述裝置包括:接收機(jī),用于接收故障注入指令,所述故障注入指令至少攜帶故障標(biāo)識(shí),所述故障標(biāo)識(shí)用于標(biāo)識(shí)宿主機(jī)中運(yùn)行的虛擬機(jī)的虛擬硬件資源;處理器,用于根據(jù)所述故障標(biāo)識(shí),獲取故障命令字,所述故障命令字為對(duì)所述虛擬硬件資源進(jìn)行故障注入的故障參數(shù),且所述故障命令字與所述宿主機(jī)的系統(tǒng)函數(shù)指定位上的命令字存在關(guān)聯(lián)關(guān)系,所述指定位上的命令字為所述虛擬硬件資源運(yùn)行過(guò)程中所述系統(tǒng)函數(shù)需調(diào)用的參數(shù);所述處理器,還用于當(dāng)監(jiān)聽(tīng)到所述宿主機(jī)的系統(tǒng)函數(shù)被調(diào)用時(shí),根據(jù)所述故障命令字和所述指定位上的命令字,判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)是否為占用所述虛擬硬件資源的測(cè)試虛擬機(jī);所述處理器,還用于如果是,則截獲所述系統(tǒng)函數(shù),將所述系統(tǒng)函數(shù)的返回值設(shè)置為指定錯(cuò)誤值,并將所述指定錯(cuò)誤值返回給所述測(cè)試虛擬機(jī),使所述測(cè)試虛擬機(jī)進(jìn)行可靠性測(cè)試。結(jié)合第三方面,在上述第三方面的第一種可能的實(shí)現(xiàn)方式中,所述處理器,具體用于:根據(jù)所述故障標(biāo)識(shí),從存儲(chǔ)的故障標(biāo)識(shí)與基于內(nèi)核的虛擬機(jī)KVM命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的KVM命令字;將獲取的KVM命令字確定為故障命令字。結(jié)合第三方面,在上述第三方面的第二種可能的實(shí)現(xiàn)方式中,所述處理器,具體用于:根據(jù)所述故障標(biāo)識(shí),從存儲(chǔ)的故障標(biāo)識(shí)與基于內(nèi)核的虛擬機(jī)KVM命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的KVM命令字;根據(jù)獲取的KVM命令字,從存儲(chǔ)的KVM命令字與系統(tǒng)命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的系統(tǒng)命令字;將獲取的系統(tǒng)命令字確定為故障命令字。結(jié)合第三方面至第三方面的第二種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方式,在上述第三方面的第三種可能的實(shí)現(xiàn)方式中,所述處理器,具體用于:對(duì)所述宿主機(jī)的系統(tǒng)函數(shù)設(shè)置掛鉤函數(shù);通過(guò)所述掛鉤函數(shù),監(jiān)聽(tīng)所述系統(tǒng)函數(shù)是否被調(diào)用;如果所述系統(tǒng)函數(shù)被調(diào)用,則通過(guò)所述掛鉤函數(shù),獲取所述系統(tǒng)函數(shù)待調(diào)用的指定位上的命令字。結(jié)合第三方面至第三方面的第三種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方式,在上述第三方面的第四種可能的實(shí)現(xiàn)方式中,所述處理器,具體用于:判斷所述指定位上的命令字與所述故障命令字是否相同;如果所述指定位上的命令字與所述故障命令字相同,則確定調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)為占用所述虛擬硬件資源的測(cè)試虛擬機(jī)。結(jié)合第三方面至第三方面的第三種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方式,在上述第三方面的第五種可能的實(shí)現(xiàn)方式中,所述處理器,具體用于:當(dāng)所述故障注入指令還攜帶指定進(jìn)程標(biāo)識(shí)時(shí),判斷所述指定位上的命令字與所述故障命令字是否相同,以及判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)是否與所述指定進(jìn)程標(biāo)識(shí)相同;如果所述指定位上的命令字與所述故障命令字相同且調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與所述指定進(jìn)程標(biāo)識(shí)相同,則確定調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)為占用所述虛擬硬件資源的測(cè)試虛擬機(jī)。結(jié)合第三方面至第三方面的第三種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方式,在上述第三方面的第六種可能的實(shí)現(xiàn)方式中,所述處理器,具體用于:當(dāng)所述故障注入指令還攜帶指定進(jìn)程標(biāo)識(shí)和指定線程標(biāo)識(shí)時(shí),判斷所述指定位上的命令字與所述故障命令字是否相同,判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)是否與所述指定進(jìn)程標(biāo)識(shí)相同,以及判斷調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)是否與所述指定線程標(biāo)識(shí)相同;如果所述指定位上的命令字與所述故障命令字相同、調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與所述指定進(jìn)程標(biāo)識(shí)相同且調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)與所述指定線程標(biāo)識(shí)相同,則確定調(diào)用所述系統(tǒng)函數(shù)的虛擬機(jī)為占用所述虛擬硬件資源的測(cè)試虛擬機(jī)。結(jié)合第三方面至第三方面的第六種可能的實(shí)現(xiàn)方式中的任一可能的實(shí)現(xiàn)方式,在上述第三方面的第七種可能的實(shí)現(xiàn)方式中,所述處理器,具體用于:通過(guò)所述系統(tǒng)函數(shù)的掛鉤函數(shù),截獲所述系統(tǒng)函數(shù);通過(guò)所述掛鉤函數(shù),將寄存器中存儲(chǔ)的返回值替換為指定錯(cuò)誤值,將所述寄存器中存儲(chǔ)的所述指定錯(cuò)誤值返回給所述測(cè)試虛擬機(jī),所述寄存器用于存儲(chǔ)所述系統(tǒng)函數(shù)的返回值。在本發(fā)明實(shí)施例中,每個(gè)虛擬機(jī)訪問(wèn)宿主機(jī)的物理硬件資源時(shí),都會(huì)調(diào)用宿主機(jī)的系統(tǒng)函數(shù),因此,通過(guò)系統(tǒng)函數(shù)的掛鉤函數(shù),監(jiān)聽(tīng)系統(tǒng)函數(shù)是否被調(diào)用,當(dāng)系統(tǒng)函數(shù)被調(diào)用時(shí),通過(guò)該掛鉤函數(shù),截獲該系統(tǒng)函數(shù),并將該系統(tǒng)函數(shù)的返回值替換為指定錯(cuò)誤值,從而將故障注入虛擬機(jī)中。當(dāng)虛擬機(jī)獲取到該指定錯(cuò)誤值時(shí),確定虛擬機(jī)的虛擬硬件資源出現(xiàn)故障,進(jìn)入故障處理過(guò)程,實(shí)現(xiàn)對(duì)虛擬機(jī)可靠性的測(cè)試。整個(gè)過(guò)程無(wú)需測(cè)試人員定位以及在線修改宿主機(jī)的源碼,只需測(cè)試人員輸入故障標(biāo)識(shí),降低了對(duì)測(cè)試人員的技能要求,并且也無(wú)需安裝調(diào)試工具,操作比較簡(jiǎn)單。附圖說(shuō)明為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所 需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明實(shí)施例提供的一種虛擬機(jī)可靠性測(cè)試方法流程圖;圖2是本發(fā)明實(shí)施例提供的另一種虛擬機(jī)可靠性測(cè)試方法流程圖;圖3是本發(fā)明實(shí)施例提供的一種虛擬機(jī)可靠性測(cè)試裝置結(jié)構(gòu)示意圖;圖4是本發(fā)明實(shí)施例提供的一種判斷模塊的結(jié)構(gòu)示意圖;圖5是本發(fā)明實(shí)施例提供的另一種虛擬機(jī)可靠性測(cè)試裝置結(jié)構(gòu)示意圖。具體實(shí)施方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。在對(duì)本發(fā)明實(shí)施例進(jìn)行詳細(xì)地解釋說(shuō)明之前,先對(duì)本發(fā)明實(shí)施例的應(yīng)用場(chǎng)景予以介紹。在本發(fā)明實(shí)施例中,在一臺(tái)物理計(jì)算機(jī)上構(gòu)造出多個(gè)虛擬機(jī),該物理計(jì)算機(jī)稱為宿主機(jī),該宿主機(jī)和該多個(gè)虛擬機(jī)構(gòu)成一個(gè)虛擬化架構(gòu)。在虛擬化架構(gòu)中,運(yùn)行在宿主機(jī)內(nèi)核中的虛擬機(jī)監(jiān)控器可以使用intel的VT-x(英文:VirtualizationTechnology-x;中文:虛擬化技術(shù))、EPT(英文:ExtentedPageTable;中文:擴(kuò)展頁(yè)表)等硬件虛擬化技術(shù),實(shí)現(xiàn)虛擬機(jī)的虛擬CPU(英文:CentralProcessingUnit;中文:中央處理單元)共享和分時(shí)使用宿主機(jī)的物理CPU,并且每個(gè)虛擬CPU會(huì)具有一定的特權(quán)級(jí)指令。當(dāng)虛擬機(jī)通過(guò)該虛擬CPU向宿主機(jī)發(fā)送該特權(quán)級(jí)指令時(shí),虛擬機(jī)主動(dòng)進(jìn)入虛擬機(jī)監(jiān)控器的陷入模式,實(shí)現(xiàn)虛擬機(jī)從非根模式切換到根模式,也即是,將訪問(wèn)虛擬機(jī)的虛擬硬件資源的模式切換到訪問(wèn)宿主機(jī)物理硬件資源的模式,物理硬件資源可以包括CPU、內(nèi)存、I/O(英文:Input/Output;中文:輸入/輸出)等。而在虛擬機(jī)運(yùn)行之前,需要通過(guò)調(diào)用宿主機(jī)的系統(tǒng)函數(shù)來(lái)訪問(wèn)宿主機(jī)的物理硬件資源,實(shí)現(xiàn)對(duì)虛擬機(jī)的虛擬硬件資源進(jìn)行配置。因此,本發(fā)明實(shí)施例提供了一種虛擬機(jī)可靠性測(cè)試方法,在虛擬 機(jī)調(diào)用宿主機(jī)的系統(tǒng)函數(shù)時(shí),通過(guò)截獲該虛擬機(jī)對(duì)系統(tǒng)函數(shù)的調(diào)用,將該系統(tǒng)函數(shù)的返回值替換為指定錯(cuò)誤值,從而將故障注入虛擬機(jī)中,實(shí)現(xiàn)對(duì)虛擬機(jī)的可靠性測(cè)試。圖1是本發(fā)明實(shí)施例提供的一種虛擬機(jī)可靠性測(cè)試方法流程圖。參見(jiàn)圖1,該方法包括:步驟101:接收故障注入指令,該故障注入指令至少攜帶故障標(biāo)識(shí),該故障標(biāo)識(shí)用于標(biāo)識(shí)宿主機(jī)中運(yùn)行的虛擬機(jī)的虛擬硬件資源。步驟102:根據(jù)該故障標(biāo)識(shí),獲取故障命令字,該故障命令字為對(duì)該虛擬硬件資源進(jìn)行故障注入的故障參數(shù),且該故障命令字與宿主機(jī)的系統(tǒng)函數(shù)指定位上的命令字存在關(guān)聯(lián)關(guān)系,該指定位上的命令字為該虛擬硬件資源運(yùn)行過(guò)程中該系統(tǒng)函數(shù)需調(diào)用的參數(shù)。步驟103:當(dāng)監(jiān)聽(tīng)到宿主機(jī)的系統(tǒng)函數(shù)被調(diào)用時(shí),根據(jù)該故障命令字和指定位上的命令字,判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)是否為占用該虛擬硬件資源的測(cè)試虛擬機(jī)。步驟104:如果是,則截獲該系統(tǒng)函數(shù),將該系統(tǒng)函數(shù)的返回值設(shè)置為指定錯(cuò)誤值,并將該指定錯(cuò)誤值返回給測(cè)試虛擬機(jī),使測(cè)試虛擬機(jī)進(jìn)行可靠性測(cè)試。其中,本發(fā)明實(shí)施例的執(zhí)行主體可以為宿主機(jī)。在本發(fā)明實(shí)施例中,每個(gè)虛擬機(jī)訪問(wèn)宿主機(jī)的物理硬件資源時(shí),都會(huì)調(diào)用宿主機(jī)的系統(tǒng)函數(shù),因此,通過(guò)系統(tǒng)函數(shù)的掛鉤函數(shù),監(jiān)聽(tīng)系統(tǒng)函數(shù)是否被調(diào)用,當(dāng)系統(tǒng)函數(shù)被調(diào)用時(shí),通過(guò)該掛鉤函數(shù),截獲該系統(tǒng)函數(shù),并將該系統(tǒng)函數(shù)的返回值替換為指定錯(cuò)誤值,從而將故障注入虛擬機(jī)中。當(dāng)虛擬機(jī)接收到該指定錯(cuò)誤值時(shí),確定虛擬機(jī)的虛擬硬件資源出現(xiàn)故障,進(jìn)入故障處理過(guò)程,實(shí)現(xiàn)對(duì)虛擬機(jī)可靠性的測(cè)試。整個(gè)過(guò)程無(wú)需測(cè)試人員定位以及在線修改宿主機(jī)的源碼,只需測(cè)試人員輸入故障標(biāo)識(shí),降低了對(duì)測(cè)試人員的技能要求,并且也無(wú)需安裝調(diào)試工具,操作比較簡(jiǎn)單??蛇x地,根據(jù)該故障標(biāo)識(shí),獲取故障命令字,包括:根據(jù)該故障標(biāo)識(shí),從存儲(chǔ)的故障標(biāo)識(shí)與KVM(英文:Kernel-basedVirtualMachine;中文:基于內(nèi)核的虛擬機(jī))命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的KVM命令字;將獲取的KVM命令字確定為故障命令字??蛇x地,根據(jù)該故障標(biāo)識(shí),獲取故障命令字,包括:根據(jù)該故障標(biāo)識(shí),從存儲(chǔ)的故障標(biāo)識(shí)與KVM命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的KVM命令字;根據(jù)獲取的KVM命令字,從存儲(chǔ)的KVM命令字與系統(tǒng)命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的系統(tǒng)命令字;將獲取的系統(tǒng)命令字確定為故障命令字。在不同的Linux內(nèi)核版本中,KVM命令字生成的方式可能不同,因此,在不同版本的Linux內(nèi)核中,可以對(duì)KVM命令字設(shè)置不同的系統(tǒng)命令字,也即是,存儲(chǔ)KVM命令字與系統(tǒng)命令字之間的對(duì)應(yīng)關(guān)系,降低了維護(hù)適配成本??蛇x地,當(dāng)監(jiān)聽(tīng)到宿主機(jī)的系統(tǒng)函數(shù)被調(diào)用時(shí),根據(jù)該故障命令字和指定位上的命令字,判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)是否為占用該虛擬硬件資源的測(cè)試虛擬機(jī)之前,還包括:對(duì)該宿主機(jī)的系統(tǒng)函數(shù)設(shè)置掛鉤函數(shù);通過(guò)該掛鉤函數(shù),監(jiān)聽(tīng)該系統(tǒng)函數(shù)是否被調(diào)用;如果該系統(tǒng)函數(shù)被調(diào)用,則通過(guò)該掛鉤函數(shù),獲取該系統(tǒng)函數(shù)待調(diào)用的指定位上的命令字。可選地,根據(jù)該故障命令字和指定位上的命令字,判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)是否為占用該虛擬硬件資源的測(cè)試虛擬機(jī),包括:判斷獲取的指定位上的命令字與該故障命令字是否相同;如果獲取的指定位上的命令字與該故障命令字相同,則確定調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的測(cè)試虛擬機(jī)。為了對(duì)該虛擬機(jī)進(jìn)行可靠性測(cè)試,可以向該虛擬機(jī)中的虛擬硬件資源注入 故障,也即是,事先存儲(chǔ)故障標(biāo)識(shí)與故障命令字之間的對(duì)應(yīng)關(guān)系,該故障命令字正是對(duì)該虛擬硬件資源進(jìn)行故障注入的故障參數(shù),之后通過(guò)故障注入指令進(jìn)行故障注入。而該虛擬機(jī)中的虛擬硬件資源運(yùn)行時(shí)所需的參數(shù)一般可以通過(guò)調(diào)用宿主機(jī)的系統(tǒng)函數(shù)獲取,也即是,該系統(tǒng)函數(shù)待調(diào)用的指定位上的命令字為該虛擬機(jī)的虛擬硬件資源運(yùn)行時(shí)所需的參數(shù)。因此,可以通過(guò)該系統(tǒng)函數(shù)待調(diào)用的指定位上的命令字和該故障命令字,從該宿主機(jī)中的多個(gè)虛擬機(jī)中,確定占用該虛擬硬件資源的測(cè)試虛擬機(jī)。另外,當(dāng)故障注入指令攜帶故障標(biāo)識(shí)時(shí),可以對(duì)該宿主機(jī)中所有占用該虛擬硬件資源的虛擬機(jī)進(jìn)行可靠性測(cè)試,也即是,進(jìn)行可靠性測(cè)試的測(cè)試虛擬機(jī)可能會(huì)包括多個(gè),降低了多個(gè)虛擬機(jī)協(xié)同測(cè)試的難度??蛇x地,根據(jù)該故障命令字和指定位上的命令字,判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)是否為占用該虛擬硬件資源的測(cè)試虛擬機(jī),包括:當(dāng)該故障注入指令還攜帶指定進(jìn)程標(biāo)識(shí)時(shí),判斷獲取的指定位上的命令字與該故障命令字是否相同,以及判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)是否與指定進(jìn)程標(biāo)識(shí)相同;如果獲取的指定位上的命令字與該故障命令字相同且調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與指定進(jìn)程標(biāo)識(shí)相同,則確定調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的測(cè)試虛擬機(jī)。由于虛擬機(jī)運(yùn)行時(shí),可以占用一個(gè)進(jìn)程,也即是,一個(gè)虛擬機(jī)對(duì)應(yīng)一個(gè)進(jìn)程標(biāo)識(shí),所以,當(dāng)故障注入指令中還攜帶指定進(jìn)程標(biāo)識(shí)時(shí),可以對(duì)占用該虛擬硬件資源的指定虛擬機(jī)進(jìn)行可靠性測(cè)試,測(cè)試方式比較靈活。可選地,根據(jù)該故障命令字和指定位上的命令字,判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)是否為占用該虛擬硬件資源的測(cè)試虛擬機(jī),包括:當(dāng)故障注入指令還攜帶指定進(jìn)程標(biāo)識(shí)和指定線程標(biāo)識(shí)時(shí),判斷獲取的指定位上的命令字與故障命令字是否相同,判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)是否與指定進(jìn)程標(biāo)識(shí)相同,以及判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)是否與 指定線程標(biāo)識(shí)相同;如果獲取的指定位上的命令字與故障命令字相同、調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與指定進(jìn)程標(biāo)識(shí)相同且調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)與指定線程標(biāo)識(shí)相同,則確定調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的測(cè)試虛擬機(jī)。由于每個(gè)虛擬機(jī)中還可以包括多個(gè)資源,比如CPU資源、內(nèi)存資源和I/O資源等,當(dāng)虛擬機(jī)運(yùn)行時(shí)會(huì)占用一個(gè)進(jìn)程,而當(dāng)虛擬機(jī)中的每個(gè)資源運(yùn)行時(shí),還會(huì)占用該進(jìn)程中的一個(gè)線程,也即是,一個(gè)虛擬機(jī)對(duì)應(yīng)一個(gè)進(jìn)程標(biāo)識(shí),一個(gè)虛擬機(jī)中的資源對(duì)應(yīng)一個(gè)線程標(biāo)識(shí),所以,當(dāng)故障注入指令中還攜帶指定進(jìn)程標(biāo)識(shí)和指定線程標(biāo)識(shí)時(shí),可以對(duì)占用該虛擬硬件資源的指定虛擬機(jī)中的指定資源進(jìn)行可靠性測(cè)試,測(cè)試方式更加靈活,且測(cè)試粒度更細(xì)??蛇x地,截獲該系統(tǒng)函數(shù),將該系統(tǒng)函數(shù)的返回值設(shè)置為指定錯(cuò)誤值,并將該指定錯(cuò)誤值返回給測(cè)試虛擬機(jī),包括:通過(guò)該系統(tǒng)函數(shù)的掛鉤函數(shù),截獲該系統(tǒng)函數(shù);通過(guò)該掛鉤函數(shù),將寄存器中存儲(chǔ)的返回值替換為指定錯(cuò)誤值,將該寄存器中存儲(chǔ)的該指定錯(cuò)誤值返回給測(cè)試虛擬機(jī),該寄存器用于存儲(chǔ)該系統(tǒng)函數(shù)的返回值。上述所有可選技術(shù)方案,均可按照任意結(jié)合形成本發(fā)明的可選實(shí)施例,本發(fā)明實(shí)施例對(duì)此不再一一贅述。圖2是本發(fā)明實(shí)施例提供的一種虛擬機(jī)可靠性測(cè)試方法流程圖。參見(jiàn)圖2,該方法包括:步驟201:接收故障注入指令,該故障注入指令至少攜帶故障標(biāo)識(shí),該故障標(biāo)識(shí)用于標(biāo)識(shí)宿主機(jī)中運(yùn)行的虛擬機(jī)的虛擬硬件資源。該故障注入指令可以是測(cè)試人員觸發(fā)的,且該故障注入指令用于將故障注入待測(cè)試的虛擬機(jī)中,因此,當(dāng)宿主機(jī)接收到該故障注入指令時(shí),可以基于該 故障注入指令將故障注入待測(cè)試的虛擬機(jī)中。另外,虛擬硬件資源是虛擬機(jī)為虛擬機(jī)操作系統(tǒng)模擬出的CPU、內(nèi)存、I/O等硬件資源,換句話說(shuō),每個(gè)虛擬機(jī)會(huì)對(duì)應(yīng)一套虛擬硬件資源。比如,虛擬機(jī)對(duì)應(yīng)的虛擬硬件資源包括CPU資源、內(nèi)存資源和I/O資源,CPU資源又包括虛擬CPU、虛擬CPU的ID(英文:Identity;中文:身份標(biāo)識(shí)),虛擬CPU的寄存器、虛擬CPU設(shè)備屬性、浮點(diǎn)運(yùn)算單元等,內(nèi)存資源又包括虛擬MEM(英文:Memory;中文:存貯器)、虛擬MMU(英文:MemoryManagementUnit;中文:內(nèi)存管理單元)等,I/O資源又包括中斷控制器、虛擬時(shí)鐘、中斷請(qǐng)求、中斷信息等,虛擬硬件資源列表如下表1所示。表1故障標(biāo)識(shí)用于標(biāo)識(shí)宿主機(jī)中運(yùn)行的虛擬機(jī)的虛擬硬件資源,也即是,每個(gè)虛擬硬件資源對(duì)應(yīng)一個(gè)故障標(biāo)識(shí),且故障標(biāo)識(shí)可以為數(shù)字、字符等等。比如,基于上述表1,每個(gè)虛擬硬件資源對(duì)應(yīng)的故障標(biāo)識(shí)如下表2所示的虛擬硬件資源與故障標(biāo)識(shí)之間的對(duì)應(yīng)關(guān)系。表2虛擬硬件資源故障標(biāo)識(shí)虛擬CPU11虛擬CPU的ID12虛擬CPU的寄存器13虛擬CPU設(shè)備屬性14浮點(diǎn)運(yùn)算單元15虛擬MEM21虛擬MMU22中斷控制器31虛擬時(shí)鐘32中斷請(qǐng)求33中斷信息34需要說(shuō)明的是,在本發(fā)明實(shí)施例中,僅以上述表1所述的虛擬硬件資源與故障標(biāo)識(shí)之間的對(duì)應(yīng)關(guān)系為例進(jìn)行說(shuō)明,實(shí)際應(yīng)用中,還可以將表1所示的虛擬硬件資源劃分的更細(xì),比如,可以將虛擬CPU的寄存器劃分為各種類型的寄存器,如此,每個(gè)寄存器會(huì)對(duì)應(yīng)一個(gè)故障標(biāo)識(shí),從而可以對(duì)虛擬機(jī)中更細(xì)粒度的虛擬硬件資源進(jìn)行可靠性測(cè)試。需要說(shuō)明的是,在本發(fā)明實(shí)施例中,該故障注入指令不僅可以攜帶故障標(biāo)識(shí),還可以攜帶指定進(jìn)程標(biāo)識(shí)、或者指定進(jìn)程標(biāo)識(shí)和指定線程標(biāo)識(shí)。當(dāng)該故障注入指令攜帶故障標(biāo)識(shí)時(shí),確定待測(cè)試的虛擬機(jī)為該虛擬化架構(gòu)中的所有占用該虛擬硬件資源的虛擬機(jī),也即是,對(duì)所有占用該虛擬硬件資源的虛擬機(jī)進(jìn)行可靠性測(cè)試;當(dāng)該故障注入指令不僅攜帶故障標(biāo)識(shí),還攜帶指定進(jìn)程標(biāo)識(shí)時(shí),確定待測(cè)試的虛擬機(jī)為該指定進(jìn)程標(biāo)識(shí)對(duì)應(yīng)的指定虛擬機(jī),也即是,對(duì)占用該虛擬硬件資源的指定虛擬機(jī)進(jìn)行可靠性測(cè)試。其中,指定進(jìn)程標(biāo)識(shí)為占用該虛 擬硬件資源的指定虛擬機(jī)的進(jìn)程標(biāo)識(shí)。當(dāng)該故障注入指令不僅攜帶故障標(biāo)識(shí),還攜帶指定進(jìn)程標(biāo)識(shí)和指定線程標(biāo)識(shí)時(shí),確定待測(cè)試的虛擬機(jī)為該指定進(jìn)程標(biāo)識(shí)對(duì)應(yīng)的指定虛擬機(jī)中的指定線程標(biāo)識(shí)對(duì)應(yīng)的指定資源,也即是,對(duì)占用該虛擬硬件資源的指定虛擬機(jī)中的指定資源進(jìn)行可靠性測(cè)試。其中,指定線程標(biāo)識(shí)為占用該虛擬硬件資源的指定虛擬機(jī)中指定資源的線程標(biāo)識(shí)。步驟202:根據(jù)該故障標(biāo)識(shí),獲取故障命令字,該故障命令字為對(duì)該虛擬硬件資源進(jìn)行故障注入的故障參數(shù),且該故障命令字與宿主機(jī)的系統(tǒng)函數(shù)指定位上的命令字存在關(guān)聯(lián)關(guān)系,該指定位上的命令字為該虛擬硬件資源運(yùn)行過(guò)程中該系統(tǒng)函數(shù)需調(diào)用的參數(shù)。宿主機(jī)的系統(tǒng)函數(shù)中,通過(guò)命令字可以實(shí)現(xiàn)虛擬機(jī)的創(chuàng)建、虛擬機(jī)的虛擬CPU的配置等等,并且故障命令字為對(duì)該虛擬硬件資源進(jìn)行故障注入的故障參數(shù),該故障參數(shù)可以包括進(jìn)行故障注入的虛擬硬件資源的編號(hào)等等,因此,當(dāng)宿主機(jī)接收到故障標(biāo)識(shí)時(shí),需要獲取該故障標(biāo)識(shí)對(duì)應(yīng)的故障命令字,具體為:宿主機(jī)根據(jù)該故障標(biāo)識(shí),從存儲(chǔ)的故障標(biāo)識(shí)與KVM命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的KVM命令字;將獲取的KVM命令字確定為故障命令字。比如,該故障標(biāo)識(shí)為11,故障標(biāo)識(shí)與KVM命令字之間的對(duì)應(yīng)關(guān)系如下表3所示,此時(shí),根據(jù)該故障標(biāo)識(shí)11,從表3所示的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的KVM命令字為命令字1,將獲取的命令字1確定為故障命令字。表3故障標(biāo)識(shí)KVM命令字11命令字112命令字213命令字3…………進(jìn)一步地,在不同的Linux內(nèi)核版本中,KVM命令字生成的方式可能不同, 因此,在不同版本的Linux內(nèi)核中,可以對(duì)KVM命令字設(shè)置不同的系統(tǒng)命令字,也即是,存儲(chǔ)KVM命令字與系統(tǒng)命令字之間的對(duì)應(yīng)關(guān)系,維護(hù)適配成本較低。此時(shí),宿主機(jī)根據(jù)該故障標(biāo)識(shí),獲取故障命令字,包括:根據(jù)獲取的KVM命令字,從存儲(chǔ)的KVM命令字與系統(tǒng)命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的系統(tǒng)命令字;將獲取的系統(tǒng)命令字確定為故障命令字。比如,存儲(chǔ)的KVM命令字與系統(tǒng)命令字之間的對(duì)應(yīng)關(guān)系如下表4所示,此時(shí),根據(jù)獲取的命令字1,從表4所示的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的系統(tǒng)命令字為命令字11,將獲取的命令字11確定為故障命令字。表4KVM命令字系統(tǒng)命令字命令字1命令字11命令字2命令字21命令字3命令字31…………需要說(shuō)明的是,在本發(fā)明實(shí)施例中,宿主機(jī)的系統(tǒng)函數(shù)可以為sys_ioctl函數(shù),本發(fā)明實(shí)施例對(duì)此不做具體限定。步驟203:對(duì)宿主機(jī)的系統(tǒng)函數(shù)設(shè)置掛鉤函數(shù),通過(guò)該掛鉤函數(shù),監(jiān)聽(tīng)系統(tǒng)函數(shù)是否被調(diào)用。為了截獲系統(tǒng)函數(shù),需要監(jiān)聽(tīng)系統(tǒng)函數(shù)是否被調(diào)用,因此,本發(fā)明實(shí)施例中,宿主機(jī)可以對(duì)系統(tǒng)函數(shù)設(shè)置一個(gè)掛鉤函數(shù),該掛鉤函數(shù)的觸發(fā)地址為該系統(tǒng)函數(shù)的地址。通過(guò)該掛鉤函數(shù),實(shí)時(shí)監(jiān)聽(tīng)該系統(tǒng)函數(shù)是否被調(diào)用。通過(guò)該掛鉤函數(shù),實(shí)時(shí)監(jiān)聽(tīng)該系統(tǒng)函數(shù)是否被調(diào)用的操作可以為:當(dāng)虛擬機(jī)調(diào)用的函數(shù)地址為該掛鉤函數(shù)的觸發(fā)地址時(shí),確定該系統(tǒng)函數(shù)被調(diào)用;當(dāng)虛擬機(jī)調(diào)用的函數(shù)地址不為該掛鉤函數(shù)的觸發(fā)地址時(shí),確定該系統(tǒng)函數(shù)未被調(diào)用。步驟204:如果系統(tǒng)函數(shù)被調(diào)用,則通過(guò)該掛鉤函數(shù),獲取系統(tǒng)函數(shù)待調(diào)用 的指定位上的命令字。系統(tǒng)函數(shù)待調(diào)用的命令字可能會(huì)包括多個(gè),該多個(gè)命令字一般會(huì)按照指定的順序進(jìn)行排列,而系統(tǒng)函數(shù)指定位上的命令字一般為虛擬機(jī)中的虛擬硬件資源運(yùn)行過(guò)程中所需的參數(shù)。比如,系統(tǒng)函數(shù)待調(diào)用的命令字包括5個(gè),該5個(gè)命令字按照指定的順序進(jìn)行排列,假如,指定位為第3位,此時(shí),該系統(tǒng)函數(shù)待調(diào)用的5個(gè)命令字中的第3位上的命令字為虛擬機(jī)中的虛擬硬件資源運(yùn)行過(guò)程中所需的參數(shù)。因此,當(dāng)掛鉤函數(shù)監(jiān)聽(tīng)到系統(tǒng)函數(shù)被調(diào)用時(shí),可以獲取系統(tǒng)函數(shù)待調(diào)用的指定位上的命令字,并基于獲取的指定位上的命令字和故障命令字,判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)是否為占用該虛擬硬件資源的測(cè)試虛擬機(jī)。需要說(shuō)明的是,指定位可以為該系統(tǒng)函數(shù)待調(diào)用的多個(gè)命令字中的第一位、第二位、第三位等等,本發(fā)明實(shí)施例對(duì)此不做具體限定。進(jìn)一步地,如果系統(tǒng)函數(shù)未被調(diào)用,則該掛鉤函數(shù)一直處于監(jiān)聽(tīng)狀態(tài)。步驟205:基于獲取的指定位上的命令字和故障命令字,判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)是否為占用該虛擬硬件資源的測(cè)試虛擬機(jī),如果是,則執(zhí)行步驟206,否則,結(jié)束操作。為了對(duì)該虛擬機(jī)進(jìn)行可靠性測(cè)試,可以向該虛擬機(jī)中的虛擬硬件資源注入故障,也即是,事先存儲(chǔ)故障標(biāo)識(shí)與故障命令字之間的對(duì)應(yīng)關(guān)系,該故障命令字正是對(duì)該虛擬硬件資源進(jìn)行故障注入的故障參數(shù),之后通過(guò)故障注入指令進(jìn)行故障注入。而該虛擬機(jī)中的虛擬硬件資源運(yùn)行時(shí)所需的參數(shù)一般可以通過(guò)調(diào)用宿主機(jī)的系統(tǒng)函數(shù)獲取,也即是,該系統(tǒng)函數(shù)待調(diào)用的指定位上的命令字為該虛擬機(jī)的虛擬硬件資源運(yùn)行時(shí)所需的參數(shù)。因此,可以通過(guò)該系統(tǒng)函數(shù)待調(diào)用的指定位上的命令字和該故障命令字,從該宿主機(jī)中的多個(gè)虛擬機(jī)中,確定占用該虛擬硬件資源的測(cè)試虛擬機(jī)。如果待測(cè)試的是所有占用該虛擬硬件資源的虛擬機(jī),也即是,當(dāng)故障注入指令攜帶故障標(biāo)識(shí)時(shí),宿主機(jī)只需判斷獲取的指定位上的命令字與故障命令字是否相同;如果獲取的指定位上的命令字與故障命令字相同,則確定調(diào)用系統(tǒng) 函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的測(cè)試虛擬機(jī)。進(jìn)一步地,如果獲取的指定位上的命令字與故障命令字不同,則確定調(diào)用系統(tǒng)函數(shù)的虛擬機(jī)不為占用該虛擬硬件資源的測(cè)試虛擬機(jī)。如果待測(cè)試的是占用該虛擬硬件資源的指定虛擬機(jī),也即是,當(dāng)故障注入指令不僅攜帶故障標(biāo)識(shí),還攜帶指定進(jìn)程標(biāo)識(shí)時(shí),宿主機(jī)判斷獲取的指定位上的命令字與故障命令字是否相同,以及判斷調(diào)用系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)是否與指定進(jìn)程標(biāo)識(shí)相同;如果獲取的指定位上的命令字與故障命令字相同且調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與指定進(jìn)程標(biāo)識(shí)相同,則確定調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的測(cè)試虛擬機(jī),也即是,調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的指定虛擬機(jī)。進(jìn)一步地,如果獲取的指定位上的命令字與故障命令字不同,或者調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與指定進(jìn)程標(biāo)識(shí)不同,則確定調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)不為占用該虛擬硬件資源的測(cè)試虛擬機(jī)。比如,該故障注入指令還攜帶指定進(jìn)程標(biāo)識(shí)為ID1,調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)為ID1,步驟204中獲取的指定位上的命令字為命令字11,故障命令字也為命令字11,確定調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的測(cè)試虛擬機(jī),也即是,調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的指定虛擬機(jī)。如果待測(cè)試的是占用該虛擬硬件資源的指定虛擬機(jī)中的指定資源,也即是,故障注入指令不僅攜帶故障標(biāo)識(shí),還攜帶指定進(jìn)程標(biāo)識(shí)和指定線程標(biāo)識(shí)時(shí),宿主機(jī)判斷獲取的指定位上的命令字與故障命令字是否相同,判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)是否與指定進(jìn)程標(biāo)識(shí)相同,以及判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)是否與指定線程標(biāo)識(shí)相同;如果獲取的指定位上的命令字與故障命令字相同、調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與指定進(jìn)程標(biāo)識(shí)相同且調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)與指定線程標(biāo)識(shí)相同,則確定調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的測(cè)試虛擬機(jī)。進(jìn)一步地,如果獲取的指定位上的命令字與故障命令字不同、調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與指定進(jìn)程標(biāo)識(shí)不同、或者調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)與指定線程標(biāo)識(shí)不同,則確定調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)不為占用該虛擬硬件資源的測(cè)試虛擬機(jī)。需要說(shuō)明的是,在本發(fā)明實(shí)施例中,通過(guò)上述方法不僅可以同時(shí)對(duì)占用該虛擬硬件資源的所有虛擬機(jī)進(jìn)行可靠性測(cè)試,還可以對(duì)指定虛擬機(jī)和指定虛擬機(jī)中的指定資源進(jìn)行可靠性測(cè)試,降低了多個(gè)虛擬機(jī)協(xié)同測(cè)試的難度。另外,在虛擬機(jī)調(diào)用宿主機(jī)系統(tǒng)函數(shù)的接口函數(shù)層進(jìn)行統(tǒng)一的故障模擬,操作簡(jiǎn)單,有效減少了故障模擬進(jìn)行可靠性測(cè)試的部署及實(shí)施工作量,且經(jīng)實(shí)驗(yàn)表明,使用本發(fā)明實(shí)施例提供的方法進(jìn)行虛擬機(jī)可靠性測(cè)試時(shí),測(cè)試的工作量至少減少60%。步驟206:截獲該系統(tǒng)函數(shù),將該系統(tǒng)函數(shù)的返回值設(shè)置為指定錯(cuò)誤值,并將該指定錯(cuò)誤值返回給測(cè)試虛擬機(jī),使測(cè)試虛擬機(jī)進(jìn)行可靠性測(cè)試。具體地,宿主機(jī)通過(guò)該掛鉤函數(shù),截獲該系統(tǒng)函數(shù),并將寄存器中存儲(chǔ)的返回值替換為指定錯(cuò)誤值,該寄存器用于存儲(chǔ)該系統(tǒng)函數(shù)的返回值;將該寄存器中存儲(chǔ)的指定錯(cuò)誤值返回給測(cè)試虛擬機(jī)。當(dāng)測(cè)試虛擬機(jī)獲取到該指定錯(cuò)誤值時(shí),確定該測(cè)試虛擬機(jī)的虛擬硬件資源出現(xiàn)故障,對(duì)該故障進(jìn)行處理,實(shí)現(xiàn)該測(cè)試虛擬機(jī)的可靠性測(cè)試。其中,該寄存器可以為EAX寄存器,本發(fā)明實(shí)施例對(duì)此不做具體限定。可選地,如果調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)不為占用該虛擬硬件資源的測(cè)試虛擬機(jī),則不截獲該系統(tǒng)函數(shù),該虛擬機(jī)繼續(xù)調(diào)用該系統(tǒng)函數(shù),獲取到該系統(tǒng)函數(shù)的返回值。需要說(shuō)明的是,在本發(fā)明實(shí)施例中,當(dāng)取消對(duì)虛擬機(jī)可靠性的測(cè)試時(shí),可以不用輸入故障注入指令,恢復(fù)虛擬機(jī)的運(yùn)行,使虛擬機(jī)從測(cè)試狀態(tài)切換到正常運(yùn)行狀態(tài)的成本較低,操作也較簡(jiǎn)單。另外,本發(fā)明實(shí)施例的執(zhí)行主體可以為位于虛擬機(jī)與宿主機(jī)內(nèi)核之間的故障注入模塊,本發(fā)明實(shí)施例對(duì)此不做具體 限定。在本發(fā)明實(shí)施例中,每個(gè)虛擬機(jī)訪問(wèn)宿主機(jī)的物理硬件資源時(shí),都會(huì)調(diào)用宿主機(jī)的系統(tǒng)函數(shù),因此,通過(guò)系統(tǒng)函數(shù)的掛鉤函數(shù),監(jiān)聽(tīng)系統(tǒng)函數(shù)是否被調(diào)用,當(dāng)系統(tǒng)函數(shù)被調(diào)用時(shí),通過(guò)該掛鉤函數(shù),截獲該系統(tǒng)函數(shù),并將該系統(tǒng)函數(shù)的返回值替換為指定錯(cuò)誤值,從而將故障注入虛擬機(jī)中。當(dāng)虛擬機(jī)獲取到該指定錯(cuò)誤值時(shí),確定虛擬機(jī)的虛擬硬件資源出現(xiàn)故障,進(jìn)入故障處理過(guò)程,實(shí)現(xiàn)對(duì)虛擬機(jī)可靠性的測(cè)試。整個(gè)過(guò)程無(wú)需測(cè)試人員定位以及在線修改宿主機(jī)的源碼,只需測(cè)試人員輸入故障標(biāo)識(shí),降低了對(duì)測(cè)試人員的技能要求,并且也無(wú)需安裝調(diào)試工具,操作比較簡(jiǎn)單。圖3是本發(fā)明實(shí)施例提供的一種虛擬機(jī)可靠性測(cè)試裝置結(jié)構(gòu)示意圖。參見(jiàn)圖3,該裝置包括:接收模塊301,用于接收故障注入指令,該故障注入指令至少攜帶故障標(biāo)識(shí),該故障標(biāo)識(shí)用于標(biāo)識(shí)宿主機(jī)中運(yùn)行的虛擬機(jī)的虛擬硬件資源;第一獲取模塊302,用于根據(jù)該故障標(biāo)識(shí),獲取故障命令字,該故障命令字為對(duì)該虛擬硬件資源進(jìn)行故障注入的故障參數(shù),且該故障命令字與宿主機(jī)的系統(tǒng)函數(shù)指定位上的命令字存在關(guān)聯(lián)關(guān)系,該指定位上的命令字為該虛擬硬件資源運(yùn)行過(guò)程中該系統(tǒng)函數(shù)需調(diào)用的參數(shù);判斷模塊303,用于當(dāng)監(jiān)聽(tīng)到宿主機(jī)的系統(tǒng)函數(shù)被調(diào)用時(shí),根據(jù)該故障命令字和指定位上的命令字,判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)是否為占用該虛擬硬件資源的測(cè)試虛擬機(jī);截獲模塊304,用于如果是,則截獲該系統(tǒng)函數(shù),將該系統(tǒng)函數(shù)的返回值設(shè)置為指定錯(cuò)誤值,并將指定錯(cuò)誤值返回給測(cè)試虛擬機(jī),使測(cè)試虛擬機(jī)進(jìn)行可靠性測(cè)試。可選地,第一獲取模塊302包括:第一獲取單元,用于根據(jù)該故障標(biāo)識(shí),從存儲(chǔ)的故障標(biāo)識(shí)與基于內(nèi)核的虛 擬機(jī)KVM命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的KVM命令字;第一確定單元,用于將獲取的KVM命令字確定為故障命令字??蛇x地,第一獲取模塊302包括:第二獲取單元,用于根據(jù)該故障標(biāo)識(shí),從存儲(chǔ)的故障標(biāo)識(shí)與KVM命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的KVM命令字;第三獲取單元,用于根據(jù)獲取的KVM命令字,從存儲(chǔ)的KVM命令字與系統(tǒng)命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的系統(tǒng)命令字;第二確定單元,用于將獲取的系統(tǒng)命令字確定為故障命令字??蛇x地,參見(jiàn)圖4,該裝置包括:設(shè)置模塊305,用于對(duì)宿主機(jī)的系統(tǒng)函數(shù)設(shè)置掛鉤函數(shù);監(jiān)聽(tīng)模塊306,用于通過(guò)該掛鉤函數(shù),監(jiān)聽(tīng)該系統(tǒng)函數(shù)是否被調(diào)用;第二獲取模塊307,用于如果該系統(tǒng)函數(shù)被調(diào)用,則通過(guò)該掛鉤函數(shù),獲取該系統(tǒng)函數(shù)待調(diào)用的指定位上的命令字??蛇x地,判斷模塊303包括:第一判斷單元,用于判斷獲取的指定位上的命令字與該故障命令字是否相同;第三確定單元,用于如果獲取的指定位上的命令字與該故障命令字相同,則確定調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的測(cè)試虛擬機(jī)??蛇x地,判斷模塊303包括:第二判斷單元,用于當(dāng)故障注入指令還攜帶指定進(jìn)程標(biāo)識(shí)時(shí),判斷獲取的指定位上的命令字與該故障命令字是否相同,以及判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)是否與指定進(jìn)程標(biāo)識(shí)相同;第四確定單元,用于如果獲取的指定位上的命令字與該故障命令字相同且調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與該指定進(jìn)程標(biāo)識(shí)相同,則確定調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的測(cè)試虛擬機(jī)。可選地,判斷模塊303包括:第三判斷單元,用于當(dāng)該故障注入指令還攜帶指定進(jìn)程標(biāo)識(shí)和指定線程標(biāo)識(shí)時(shí),判斷獲取的指定位上的命令字與故障命令字是否相同,判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)是否與指定進(jìn)程標(biāo)識(shí)相同,以及判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)是否與指定線程標(biāo)識(shí)相同;第五確定單元,用于如果獲取的指定位上的命令字與故障命令字相同、調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與指定進(jìn)程標(biāo)識(shí)相同且調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)與指定線程標(biāo)識(shí)相同,則確定調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的測(cè)試虛擬機(jī)。可選地,截獲模塊304包括:截獲單元,用于通過(guò)該系統(tǒng)函數(shù)的掛鉤函數(shù),截獲該系統(tǒng)函數(shù);替換單元,用于通過(guò)該掛鉤函數(shù),將寄存器中存儲(chǔ)的返回值替換為指定錯(cuò)誤值,將該寄存器中存儲(chǔ)的該指定錯(cuò)誤值返回給該測(cè)試虛擬機(jī),該寄存器用于存儲(chǔ)該系統(tǒng)函數(shù)的返回值。在本發(fā)明實(shí)施例中,每個(gè)虛擬機(jī)訪問(wèn)宿主機(jī)的物理硬件資源時(shí),都會(huì)調(diào)用宿主機(jī)的系統(tǒng)函數(shù),因此,通過(guò)系統(tǒng)函數(shù)的掛鉤函數(shù),監(jiān)聽(tīng)系統(tǒng)函數(shù)是否被調(diào)用,當(dāng)系統(tǒng)函數(shù)被調(diào)用時(shí),通過(guò)該掛鉤函數(shù),截獲該系統(tǒng)函數(shù),并將該系統(tǒng)函數(shù)的返回值替換為指定錯(cuò)誤值,從而將故障注入虛擬機(jī)中。當(dāng)虛擬機(jī)獲取到該指定錯(cuò)誤值時(shí),確定虛擬機(jī)的虛擬硬件資源出現(xiàn)故障,進(jìn)入故障處理過(guò)程,實(shí)現(xiàn)對(duì)虛擬機(jī)可靠性的測(cè)試。整個(gè)過(guò)程無(wú)需測(cè)試人員定位以及在線修改宿主機(jī)的源碼,只需測(cè)試人員輸入故障標(biāo)識(shí),降低了對(duì)測(cè)試人員的技能要求,并且也無(wú)需安裝調(diào)試工具,操作比較簡(jiǎn)單。需要說(shuō)明的是:上述實(shí)施例提供的虛擬機(jī)可靠性測(cè)試裝置在虛擬機(jī)可靠性測(cè)試時(shí),僅以上述各功能模塊的劃分進(jìn)行舉例說(shuō)明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實(shí)施例提供的 虛擬機(jī)可靠性測(cè)試裝置與虛擬機(jī)可靠性測(cè)試方法實(shí)施例屬于同一構(gòu)思,其具體實(shí)現(xiàn)過(guò)程詳見(jiàn)方法實(shí)施例,這里不再贅述。圖5是本發(fā)明實(shí)施例提供的一種虛擬機(jī)可靠性測(cè)試的裝置結(jié)構(gòu)示意圖。參見(jiàn)圖5,該裝置包括:接收機(jī)501和處理器502;接收機(jī)501,用于接收故障注入指令,該故障注入指令至少攜帶故障標(biāo)識(shí),該故障標(biāo)識(shí)用于標(biāo)識(shí)宿主機(jī)中運(yùn)行的虛擬機(jī)的虛擬硬件資源;處理器502,用于根據(jù)該故障標(biāo)識(shí),獲取故障命令字,該故障命令字為對(duì)該虛擬硬件資源進(jìn)行故障注入的故障參數(shù),且該故障命令字與該宿主機(jī)的系統(tǒng)函數(shù)指定位上的命令字存在關(guān)聯(lián)關(guān)系,該指定位上的命令字為該虛擬硬件資源運(yùn)行過(guò)程中該系統(tǒng)函數(shù)需調(diào)用的參數(shù);處理器502,還用于當(dāng)監(jiān)聽(tīng)到宿主機(jī)的系統(tǒng)函數(shù)被調(diào)用時(shí),根據(jù)該故障命令字和指定位上的命令字,判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)是否為占用該虛擬硬件資源的測(cè)試虛擬機(jī);處理器502,還用于如果是,則截獲該系統(tǒng)函數(shù),將該系統(tǒng)函數(shù)的返回值設(shè)置為指定錯(cuò)誤值,并將指定錯(cuò)誤值返回給測(cè)試虛擬機(jī),使測(cè)試虛擬機(jī)進(jìn)行可靠性測(cè)試??蛇x地,處理器502具體用于:根據(jù)該故障標(biāo)識(shí),從存儲(chǔ)的故障標(biāo)識(shí)與基于內(nèi)核的虛擬機(jī)KVM命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的KVM命令字;將獲取的KVM命令字確定為故障命令字??蛇x地,處理器502具體用于:根據(jù)該故障標(biāo)識(shí),從存儲(chǔ)的故障標(biāo)識(shí)與基于內(nèi)核的虛擬機(jī)KVM命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的KVM命令字;根據(jù)獲取的KVM命令字,從存儲(chǔ)的KVM命令字與系統(tǒng)命令字之間的對(duì)應(yīng)關(guān)系中,獲取對(duì)應(yīng)的系統(tǒng)命令字;將獲取的系統(tǒng)命令字確定為故障命令字??蛇x地,處理器502具體用于:對(duì)宿主機(jī)的系統(tǒng)函數(shù)設(shè)置掛鉤函數(shù);通過(guò)該掛鉤函數(shù),監(jiān)聽(tīng)該系統(tǒng)函數(shù)是否被調(diào)用;如果該系統(tǒng)函數(shù)被調(diào)用,則通過(guò)該掛鉤函數(shù),獲取該系統(tǒng)函數(shù)待調(diào)用的指定位上的命令字。可選地,處理器502具體用于:判斷獲取的指定位上的命令字與該故障命令字是否相同;如果獲取的指定位上的命令字與該故障命令字相同,則確定調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的測(cè)試虛擬機(jī)??蛇x地,處理器502具體用于:當(dāng)故障注入指令還攜帶指定進(jìn)程標(biāo)識(shí)時(shí),判斷獲取的指定位上的命令字與該故障命令字是否相同,以及判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)是否與指定進(jìn)程標(biāo)識(shí)相同;如果獲取的指定位上的命令字與該故障命令字相同且調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與該指定進(jìn)程標(biāo)識(shí)相同,則確定調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的測(cè)試虛擬機(jī)。可選地,處理器502具體用于:當(dāng)故障注入指令還攜帶指定進(jìn)程標(biāo)識(shí)和指定線程標(biāo)識(shí)時(shí),判斷獲取的指定位上的命令字與故障命令字是否相同,判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)是否與指定進(jìn)程標(biāo)識(shí)相同,以及判斷調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)是否與指定線程標(biāo)識(shí)相同;如果獲取的指定位上的命令字與故障命令字相同、調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)進(jìn)程標(biāo)識(shí)與指定進(jìn)程標(biāo)識(shí)相同且調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)線程標(biāo)識(shí)與指定線程標(biāo)識(shí)相同,則確定調(diào)用該系統(tǒng)函數(shù)的虛擬機(jī)為占用該虛擬硬件資源的測(cè)試虛擬機(jī)??蛇x地,處理器502具體用于:通過(guò)該系統(tǒng)函數(shù)的掛鉤函數(shù),截獲該系統(tǒng)函數(shù);通過(guò)該掛鉤函數(shù),將寄存器中存儲(chǔ)的返回值替換為指定錯(cuò)誤值,將該寄存器中存儲(chǔ)的該指定錯(cuò)誤值返回給該測(cè)試虛擬機(jī),該寄存器用于存儲(chǔ)該系統(tǒng)函數(shù)的返回值。在本發(fā)明實(shí)施例中,每個(gè)虛擬機(jī)訪問(wèn)宿主機(jī)的物理硬件資源時(shí),都會(huì)調(diào)用宿主機(jī)的系統(tǒng)函數(shù),因此,通過(guò)系統(tǒng)函數(shù)的掛鉤函數(shù),監(jiān)聽(tīng)系統(tǒng)函數(shù)是否被調(diào)用,當(dāng)系統(tǒng)函數(shù)被調(diào)用時(shí),通過(guò)該掛鉤函數(shù),截獲該系統(tǒng)函數(shù),并將該系統(tǒng)函數(shù)的返回值替換為指定錯(cuò)誤值,從而將故障注入虛擬機(jī)中。當(dāng)虛擬機(jī)獲取到該指定錯(cuò)誤值時(shí),確定虛擬機(jī)的虛擬硬件資源出現(xiàn)故障,進(jìn)入故障處理過(guò)程,實(shí)現(xiàn)對(duì)虛擬機(jī)可靠性的測(cè)試。整個(gè)過(guò)程無(wú)需測(cè)試人員定位以及在線修改宿主機(jī)的源碼,只需測(cè)試人員輸入故障標(biāo)識(shí),降低了對(duì)測(cè)試人員的技能要求,并且也無(wú)需安裝調(diào)試工具,操作比較簡(jiǎn)單。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過(guò)硬件來(lái)完成,也可以通過(guò)程序來(lái)指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤或光盤等。以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。當(dāng)前第1頁(yè)1 2 3