容錯系統(tǒng)和用于執(zhí)行容錯的方法
【專利摘要】本發(fā)明公開了容錯系統(tǒng)和用于執(zhí)行容錯的方法,所述容錯系統(tǒng)包括:在主機上形成的主虛擬機,主管理程序在該主機中運行,該主虛擬機適用于將基于來自主管理程序的外部中斷的虛擬中斷輸入至主客戶OS;以及在次機上形成的次虛擬機,次管理程序在該次機中運行,該次虛擬機適用于基于與主虛擬機所發(fā)送的虛擬中斷有關(guān)的時間信息來將虛擬中斷輸入至次客戶OS。主虛擬機適用于從次虛擬機搜集操作性能信息,并且配置主虛擬機的操作性能和次虛擬機的操作性能,使得主虛擬機的操作性能變得與次虛擬機的操作性能相同。
【專利說明】容錯系統(tǒng)和用于執(zhí)行容錯的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及使用虛擬機的容錯系統(tǒng)以及使用虛擬機來執(zhí)行容錯的方法。
【背景技術(shù)】
[0002]容錯系統(tǒng)是這樣一種系統(tǒng),即使在系統(tǒng)配置的一部分中出現(xiàn)缺陷的情況下,容錯系統(tǒng)也能夠繼續(xù)操作,而不會使整個系統(tǒng)崩潰,并且容錯系統(tǒng)尤其適用于要求具有高度有效性和不間斷系統(tǒng)有效性的系統(tǒng)。例如,即使在發(fā)生硬件故障的情況下,采用了容錯系統(tǒng)的服務(wù)器計算機也可以輸出正確的數(shù)據(jù),而不會有對來自外部裝置的客戶應(yīng)用程序進行的網(wǎng)絡(luò)訪問作出響應(yīng)的通信錯誤。
[0003]如JP-A-2009-80695所公開的,已知一種在運行于兩臺彼此通信的計算機上的虛擬機中實現(xiàn)容錯系統(tǒng)的技術(shù)。使用虛擬機的容錯系統(tǒng)將這兩臺虛擬機的執(zhí)行狀態(tài)同步,以進行相同的操作。當(dāng)在其中一臺計算機中出現(xiàn)故障時,在另一臺計算機中操作的虛擬機接管處理,由此連續(xù)而不中斷地提供系統(tǒng)的服務(wù)。
[0004]在使用虛擬機的容錯系統(tǒng)中,將一臺虛擬機作為主虛擬機,而將另一臺虛擬機設(shè)為次虛擬機。將主虛擬機構(gòu)造為領(lǐng)先于次虛擬機執(zhí)行同一操作并接管對關(guān)于外部裝置進行輸入/輸出的控制。
[0005]通常,當(dāng)執(zhí)行相同程序的兩臺計算機以完全相同的定時從外部裝置接收輸入時,這兩臺計算機會進行相同的操作,并且輸出相同的數(shù)據(jù)。因此,當(dāng)在使用虛擬機的容錯系統(tǒng)中基于外部輸入發(fā)生中斷時,該容錯系統(tǒng)令主虛擬機將中斷發(fā)生的時刻作為同步信息發(fā)送至次虛擬機。然后,以一定延遲運行的次虛擬機在與同步信息所通知的時刻相同的時刻產(chǎn)生虛擬中斷,由此主虛擬機和次虛擬機以彼此同步的方式執(zhí)行相同的操作。
[0006]圖6是示出了傳統(tǒng)的使用虛擬機的容錯系統(tǒng)的配置的框圖。如圖6所示,容錯系統(tǒng)60包括了在網(wǎng)絡(luò)上彼此連接的主機600和次機700。
[0007]在主機600中,主管理程序620在作為物理計算機環(huán)境的主硬件610上運行,并且主機600中配置了主虛擬機630。在主虛擬機630中運行主客戶OS (操作系統(tǒng))640,并且在主客戶0S640上執(zhí)行應(yīng)用程序650。
[0008]主硬件610配備有諸如CPU(中央處理單元)、內(nèi)存、網(wǎng)絡(luò)接口卡(NIC)、和存儲器之類的多種裝置。
[0009]主虛擬機630分配有主硬件610的一部分硬件資源,并且在虛擬計算機環(huán)境中接管與外部裝置相關(guān)的輸入/輸出的控制。主虛擬機630由主管理程序620管理。
[0010]同樣,在次機700中,次管理程序720在作為物理計算機環(huán)境的次硬件710上運行,并且次機700中配置了次虛擬機730。在次虛擬機730中運行次客戶0S740,并且在次客戶0S740上執(zhí)行應(yīng)用程序750。
[0011]次硬件710配備有諸如CPU、內(nèi)存、網(wǎng)絡(luò)接口卡(NIC)、和存儲器之類的多種裝置。
[0012]次虛擬機730分配有次硬件710的一部分硬件資源,并且在虛擬計算機環(huán)境中與主虛擬機630同步地操作。次虛擬機730由次管理程序720管理。[0013]在傳統(tǒng)的容錯系統(tǒng)60中,在以下過程中主虛擬機630與次虛擬機730的執(zhí)行狀態(tài)彼此同步。
[0014]一旦接收到來自主硬件610的外部中斷,主管理程序620則將該外部中斷輸入至主虛擬機630。
[0015]然后,主虛擬機630將虛擬中斷輸入至主客戶0S640。現(xiàn)在,將要描述將虛擬中斷從主虛擬機630輸入至主客戶0S640。
[0016]當(dāng)在主客戶0S640的處理期間出現(xiàn)諸如外部中斷、特權(quán)指令、或異常之類的虛擬機上下文切換事件時,主客戶0S640的處理被掛起,客戶OS上下文被切換至虛擬機上下文,處理轉(zhuǎn)移至主虛擬機630。
[0017]若主虛擬機630根據(jù)在其定時時刻的各種事件而需要在主客戶0S640上輸入虛擬中斷,則主虛擬機630配置虛擬中斷。當(dāng)配置了虛擬中斷時,主虛擬機630終止處理,當(dāng)處理返回至在生成事件時刻被掛起的主客戶0S640時,虛擬中斷被輸入至主客戶0S640。
[0018]當(dāng)主虛擬機630將虛擬中斷輸入至主客戶0S640時,主虛擬機630將同步信息發(fā)送至次虛擬機730。同步信息包括對虛擬中斷的識別信息、以及用于輸入虛擬中斷的同步定時信息。
[0019]同步定時信息是關(guān)于在與虛擬中斷被輸入至主客戶0S640相同的時刻將虛擬中斷輸入至次客戶0S740的信息,并且包括指示了執(zhí)行掛起位置和CPU特有的執(zhí)行指令的數(shù)
量的信息。
[0020]作為執(zhí)行掛起位置,可以使用表示當(dāng)輸入虛擬中斷時所執(zhí)行的指令地址的程序計數(shù)器的值。執(zhí)行指令的數(shù)量可以由CPU中提供的性能計數(shù)器的CPU執(zhí)行指令數(shù)量計數(shù)器來測量。
[0021]在測量執(zhí)行指令數(shù)量的情況下,當(dāng)主虛擬機630將虛擬中斷輸入至主客戶0S640時,將CPU執(zhí)行指令數(shù)量計數(shù)器清零,并且在重新開始執(zhí)行主客戶0S640前使CPU執(zhí)行指令數(shù)量計數(shù)器啟動。因此,計算出了自先前的虛擬中斷輸入以后由主客戶0S640執(zhí)行的指令的數(shù)量。
[0022]當(dāng)僅有執(zhí)行掛起位置被用作同步定時信息時,在表示執(zhí)行掛起位置的指令包括在循環(huán)處理中或者包括在條件分支目的地中的情況下無法指定虛擬中斷輸入的時刻,這是因為每次當(dāng)進行到循環(huán)或條件分支進程都會執(zhí)行該指令。
[0023]同樣,當(dāng)僅有執(zhí)行指令的數(shù)量被用作同步定時信息時,由于諸如流水線處理之類的高速化技術(shù),使得次客戶0S740不能以所指定的執(zhí)行指令的數(shù)量來掛起,并且不可避免地在超出執(zhí)行指令的數(shù)量后被掛起。由此,虛擬中斷不能在與主客戶0S640相同的時刻被輸入到次客戶0S740。
[0024]在該情形下,將執(zhí)行掛起位置和執(zhí)行指令的數(shù)量結(jié)合在一起作為同步定時信息,并且每次在次客戶0S740中對執(zhí)行掛起位置所表示的指令進行處理時確認(rèn)執(zhí)行指令的數(shù)量。因此,在與將虛擬中斷輸入到主客戶0S640中相同的時刻來將次客戶0S740掛起。
[0025]因此,當(dāng)在掛起了主客戶0S640的執(zhí)行之后主虛擬機630將虛擬中斷輸入至主客戶0S640時,主虛擬機630獲取掛起主客戶0S640的執(zhí)行時刻的程序計數(shù)器的值、以及CPU執(zhí)行指令數(shù)量計數(shù)器的值,以生成同步定時信息。然后,主虛擬機630將有關(guān)虛擬中斷的識別信息和同步定時信息發(fā)送至次虛擬機730作為同步信息。[0026]接收到了同步信息的次虛擬機730根據(jù)同步定時信息來掛起次客戶0S740的執(zhí)行。將參照圖7的流程圖來描述該情形下次虛擬機730的操作。
[0027]將暫停(break)指令嵌入同步定時信息的執(zhí)行掛起位置所指定的程序位置中(S401),并且重新啟動次客戶0S740(S402)。然后,當(dāng)次客戶0S740停止(S403中為是)時,確認(rèn)CPU執(zhí)行指令數(shù)量計數(shù)器,并且若計數(shù)器值匹配執(zhí)行指令的指定數(shù)量(S404中為是),則次客戶0S740在停止位置處掛起(S405)。若計數(shù)器值不匹配執(zhí)行指令的指定數(shù)量(S404中為否),則次客戶0S740重新啟動(S402)并重復(fù)確認(rèn)執(zhí)行指令的數(shù)量。
[0028]當(dāng)次虛擬機730掛起次客戶0S740時,次虛擬機730根據(jù)同步信息的虛擬中斷識別信息來配置虛擬中斷(S406),并且重新啟動次客戶0S740 (S407)。因此,在與主客戶0S640相同的時刻將虛擬中斷輸入至次客戶0S740,并且主虛擬機630和次虛擬機730的執(zhí)行狀態(tài)彼此同步。
[0029]當(dāng)在主機600和次機700的任何一個中發(fā)生硬件故障時,打亂了執(zhí)行狀態(tài)的同步。當(dāng)執(zhí)行狀態(tài)的同步被打亂時,主虛擬機630和次虛擬機730之間的輸出數(shù)據(jù)的值變得不同。在該情況下,容錯系統(tǒng)60對比次虛擬機730的輸出來檢查主虛擬機630的輸出,若輸出數(shù)據(jù)的值彼此不同,則確定發(fā)生硬件故障。
[0030]為了進行該故障確定處理,次虛擬機730裝配有輸出數(shù)據(jù)檢查單元731,其搜集主虛擬機630的輸出數(shù)據(jù),并對比次虛擬機730的輸出數(shù)據(jù)來檢查所搜集的輸出數(shù)據(jù)。
[0031]在容錯系統(tǒng)60中,主機600的主硬件610和次機700的次硬件710均由諸如CPU、內(nèi)存、或裝置之類的各種硬件裝置配置而成。但是,雙方硬件的性能可能并不彼此一致。
[0032]例如,存在這樣的情況,即CPU的規(guī)范彼此不同或者內(nèi)存的容量彼此不同。同樣,可能由于在容錯系統(tǒng)60的操作處理中發(fā)生的裝置的替換而使雙方的裝置彼此不同,或者即使使用相同的裝置但可能由于老化導(dǎo)致發(fā)生性能差異。
[0033]為此,主虛擬機630和次虛擬機730之間的處理速度可能出現(xiàn)差異。如上所述,在容錯系統(tǒng)60中,主虛擬機630被配置為在次虛擬機730之前操作。但是,例如,若次虛擬機730的處理速度更高,則進程的推進會反轉(zhuǎn),并且基于來自主虛擬機630的同步信息,執(zhí)行狀態(tài)彼此不同步。若主虛擬機630的處理速度更高,則次虛擬機730的延遲會累積。
[0034]同樣,由于裝置不同導(dǎo)致主客戶0S640和次客戶0S740之間驅(qū)動器處理的執(zhí)行可能不同,它們之間的操作不同,導(dǎo)致操作可能不同步。
【發(fā)明內(nèi)容】
[0035]為此,需要一種用于補償硬件中的差異的結(jié)構(gòu)。本發(fā)明的示例性實施例提供了一種使得形成在兩臺計算機上的虛擬機執(zhí)行并行同步操作的容錯系統(tǒng)和用于執(zhí)行容錯的方法,其中適當(dāng)?shù)卣{(diào)節(jié)各計算機的硬件之間的差異。
[0036]根據(jù)本發(fā)明的示例性實施例的容錯系統(tǒng),包括:
[0037]在主機上形成的主虛擬機,主管理程序在所述主機中運行,主虛擬機適用于將基于來自主管理程序的外部中斷的虛擬中斷輸入至主客戶OS ;以及
[0038]在次機上形成的次虛擬機,次管理程序在次機中運行,次虛擬機適用于基于與主虛擬機所發(fā)送的虛擬中斷有關(guān)的定時信息來將虛擬中斷發(fā)送至次客戶OS,
[0039]其中主虛擬機適用于從次虛擬機搜集操作性能信息,并且配置主虛擬機的操作性能和次虛擬機的操作性能,使得主虛擬機的操作性能變得與次虛擬機的操作性能相同。
[0040]主虛擬機可以適用于將次虛擬機的所配置的操作性能通知給次虛擬機,以及[0041 ] 次虛擬機可以適用于根據(jù)所通知的操作性能執(zhí)行操作。
[0042]操作性能可以包括操作頻率,并且主虛擬機可以適用于搜集主虛擬機可用的操作頻率和次虛擬機可用的操作頻率,并且適用于配置主虛擬機的操作頻率和次虛擬機的操作頻率。
[0043]若主虛擬機所使用的裝置的操作規(guī)范與次虛擬機所使用的裝置的操作規(guī)范彼此不同,則主虛擬機可以適用于仿真處理,使得主虛擬機所使用的裝置的處理變得與次虛擬機所使用的裝置的處理相同。
[0044]若上述各裝置的操作規(guī)范中的差異在于是否存在給定功能,則主虛擬機適用于使所該給定功能無效并仿真處理,使得主虛擬機所使用的裝置的處理變得與次虛擬機所使用的裝置的處理相同,以及若各裝置的操作規(guī)范中的差異在于性能或容量,則主虛擬機適用于允許將在主客戶OS以外的外部環(huán)境中執(zhí)行的操作上的處理不同。
[0045]若主虛擬機所使用的裝置的操作規(guī)范與次虛擬機所使用的裝置的操作規(guī)范彼此不同,則次虛擬機可以適用于仿真處理,以使得次虛擬機所使用的裝置的處理變得與主虛擬機所使用的裝置的處理相同。
[0046]若上述各裝置的操作規(guī)范中的差異在于是否存在給定功能,則次虛擬機可以適用于使該給定功能無效并仿真處理,使得次虛擬機所使用的裝置的處理變得與主虛擬機所使用的裝置的處理相同,以及若各裝置的操作規(guī)范中的差異在于性能或容量,則次虛擬機可以適用于允許將在次客戶OS以外的外部環(huán)境中執(zhí)行的操作上的處理不同。
[0047]若即使配置了操作性能以后次虛擬機的執(zhí)行速度仍低于主虛擬機的執(zhí)行速度,則次虛擬機可以適用于獲取延遲度,并且若所獲取的值超過預(yù)定的可容許延遲時間,則次虛擬機可以適用于執(zhí)行同步初始化處理。
[0048]若所獲取的延遲度大于假定量,則次虛擬機可以適用于檢測故障發(fā)生。
[0049]若即使配置了操作性能以后次虛擬機的執(zhí)行速度仍低于主虛擬機的執(zhí)行速度,則次虛擬機可以適用于在主客戶OS的空閑期間加速虛擬中斷輸入定時,以克服主虛擬機的延遲。
[0050]若即使配置了操作性能以后主虛擬機的執(zhí)行速度仍高于次虛擬機的執(zhí)行速度,則主虛擬機可以適用于在依照次虛擬機的執(zhí)行速度進行暫停的情況下執(zhí)行操作。
[0051]若即使配置了操作性能以后次虛擬機的執(zhí)行速度仍高于主虛擬機的執(zhí)行速度,則次虛擬機可以適用于在依照主虛擬機的執(zhí)行速度進行暫停的情況下執(zhí)行操作。
[0052]主虛擬機和次虛擬機可以適用于在分配給各虛擬機的內(nèi)存上加載各存儲裝置的內(nèi)容,并且用內(nèi)存訪問代替存儲裝置訪問。
[0053]當(dāng)進行內(nèi)存訪問時,主虛擬機和次虛擬機可以適用于將虛擬中斷輸入至各自客戶OS而不等待訪問完成的外部中斷。
[0054]主虛擬機和次虛擬機可以適用于在由各自客戶OS配置的RAM盤上加載各存儲裝置的內(nèi)容,并且用RAM盤訪問代替存儲裝置訪問。
[0055]根據(jù)本發(fā)明的示例性實施例的用于通過主虛擬機和次虛擬機執(zhí)行容錯的方法,所述主虛擬機形成在主機上,主管理程序運行在所述主機中,所述主虛擬機被配置為將基于來自主管理程序的外部中斷的虛擬中斷輸入至主客戶OS,所述次虛擬機形成在次機上,次管理程序運行在所述次機中,所述次虛擬機被配置為基于與主虛擬機所發(fā)送的虛擬中斷有關(guān)的定時信息來將虛擬中斷輸入至次客戶OS,所述方法包括:
[0056]從次虛擬機搜集操作性能信息;并且
[0057]配置主虛擬機的操作性能和次虛擬機的操作性能,使得主虛擬機的操作性能變得與次虛擬機的操作性能相同。
[0058]根據(jù)本發(fā)明的示例性實施例,在使得形成在兩臺計算上的兩個虛擬機執(zhí)行并行同步操作的容錯系統(tǒng)和用于執(zhí)行容錯的方法中,可以適當(dāng)?shù)卣{(diào)節(jié)各計算機的硬件之間的差
巳
【專利附圖】
【附圖說明】
[0059]圖1是示出了根據(jù)一個實施例的容錯系統(tǒng)的配置的框圖。
[0060]圖2是示出了主虛擬機和次虛擬機的并行同步操作的概要的流程圖。
[0061]圖3A和圖3B是示出了通過分支數(shù)和執(zhí)行掛起位置來識別虛擬中斷輸入位置的示圖。
[0062]圖4是示出了當(dāng)CPU架構(gòu)的細(xì)節(jié)已知時,虛擬中斷定時調(diào)節(jié)操作的具體過程的流程圖。
[0063]圖5是示出了當(dāng)CPU架構(gòu)的細(xì)節(jié)未知時,虛擬中斷定時調(diào)節(jié)的具體過程的流程圖。
[0064]圖6是示出了相關(guān)技術(shù)中的使用虛擬機的容錯系統(tǒng)的配置的框圖。
[0065]圖7是示出了讓已經(jīng)接收到同步信息的次虛擬機根據(jù)同步定時信息來掛起次客戶OS的執(zhí)行的操作流程圖。
【具體實施方式】
[0066]將參照附圖來描述根據(jù)本發(fā)明的實施例。圖1是示出了根據(jù)本實施例的容錯系統(tǒng)的配置的框圖。如圖1所示,容錯系統(tǒng)10包括通過網(wǎng)絡(luò)彼此連接的主機100和次機200。主機100和次機200可以由諸如服務(wù)器計算機或個人計算機之類的通用計算機來配置。
[0067]在主機100中,主管理程序120在作為物理計算機環(huán)境的主硬件110上運行,并且主虛擬機130由主管理程序120構(gòu)成。在主虛擬機130中,主客戶0S140運行,并且在主客戶OS 140上執(zhí)行應(yīng)用程序150。
[0068]主硬件110配備有以下多種裝置,諸如CPU111、內(nèi)存112、定時器113、網(wǎng)絡(luò)接口卡(NIC) 114、和存儲器之類的裝置115。
[0069]主虛擬機130分配有主硬件110的部分硬件資源,并且接管對于與外部裝置相關(guān)的輸入/輸出的控制。主虛擬機130用作虛擬計算機環(huán)境。主虛擬機130由主管理程序120管理。主程序管理120能夠管理多個主虛擬機130。
[0070]同樣,在次機200中,次管理程序220在作為物理計算機環(huán)境的次硬件210上運行,并且次虛擬機230由次管理程序220構(gòu)成。在次虛擬機230中,次客戶0S240運行,并且在次客戶0S240上執(zhí)行應(yīng)用程序250。
[0071]次硬件210配備有以下多種裝置,諸如CPU211、內(nèi)存212、定時器213、網(wǎng)絡(luò)接口卡(NIC) 214、和存儲器之類的裝置215。[0072]次虛擬機230分配有次硬件210的部分硬件資源,并且在虛擬計算機環(huán)境中與主虛擬機130同步地運行。次虛擬機230由次管理程序220管理。次管理程序220能夠管理多個次虛擬機230。
[0073]在容錯系統(tǒng)10中,僅由主虛擬機130來控制與外部裝置相關(guān)的輸入/輸出,主虛擬機130在次虛擬機230之前運行。
[0074]在本實施例中,為主虛擬機130提供了虛擬中斷生成單元131和同步信息生成單元135,并且為次虛擬機230提供虛擬中斷輸入轉(zhuǎn)換單元231和同步校正單元235。
[0075]主虛擬機130的虛擬中斷生成單元131生成虛擬中斷,該虛擬中斷是通過調(diào)節(jié)中斷頻率和實際從主管理程序120輸入外部中斷輸入的定時而得到的,并且該虛擬中斷生成單元131將生成的虛擬中斷輸入至主客戶0S140。為虛擬中斷生成單元131提供了用于調(diào)節(jié)中斷頻率的中斷頻率調(diào)節(jié)單元132以及用于調(diào)節(jié)中斷定時的中斷定時調(diào)節(jié)單元133。
[0076]主虛擬機130的同步信息生成單元135基于執(zhí)行掛起位置和分支執(zhí)行數(shù)量來指定被調(diào)節(jié)并輸入至主客戶0S140的虛擬中斷的定時。同步信息生成單元135配備有用于計算在輸入虛擬中斷以前主客戶0S140中的程序分支數(shù)的分支執(zhí)行數(shù)量生成單元136。
[0077]同步信息生成單元135在主虛擬機130和次虛擬機230的并行同步操作前,從次虛擬機230搜集操作性能信息。當(dāng)主硬件110和次硬件210之間的硬件配置不同時,同步信息生成單元135生成用于校正處理速度差的同步校正信息,并且將同步校正信息發(fā)送至次虛擬機230的同步校正單元235。同步信息生成單元135按場合要求來調(diào)節(jié)主虛擬機130的操作。
[0078]次虛擬機230的虛擬中斷輸入轉(zhuǎn)換單元231根據(jù)從主虛擬機130發(fā)送的同步信息的同步定時信息來使次客戶0S240的處理前移至虛擬中斷輸入位置,并且掛起次客戶0S240。然后,虛擬中斷輸入轉(zhuǎn)換單元231接收虛擬中斷。為了使次客戶0S240的處理前移至虛擬中斷輸入位置,并且掛起次客戶0S240,為虛擬中斷輸入轉(zhuǎn)換單元231提供了指定分支數(shù)執(zhí)行單元232和指定位置上下文切換單元233。
[0079]次虛擬機230的同步校正單元235在并行同步操作之前基于從主虛擬機130的同步信息生成單元135發(fā)送的同步校正信息來調(diào)節(jié)次虛擬機的操作。同步校正單元235按場合要求在并行同步操作中調(diào)節(jié)主虛擬機130和次虛擬機230之間的處理速度差。
[0080](并行同步操作的概要)
[0081]隨后,將參照圖2的流程圖來描述在如上所述配置的容錯系統(tǒng)中主虛擬機130和次虛擬機230彼此之間使執(zhí)行狀態(tài)同步的并行同步操作的概要。具體地,將描述當(dāng)主管理程序120從主硬件110接收到外部中斷時的操作序列。
[0082]一旦接收到來自主硬件110的外部中斷(S101),主管理程序120就將外部中斷輸入至主虛擬機130 (S102)。
[0083]從主管理程序120接收到外部中斷的主虛擬機130將虛擬中斷輸入至主客戶0S140o在該情形下,主虛擬機130不針對所有輸入的外部中斷將虛擬中斷輸入至主客戶0S140,而中斷頻率調(diào)節(jié)單元132對輸入至主客戶0S140的虛擬中斷的頻率進行調(diào)節(jié)(S103)。
[0084]在使用虛擬機的容錯系統(tǒng)10中,當(dāng)把虛擬中斷輸入至主客戶0S104時,為了同步彼此的執(zhí)行狀態(tài),還要進行在相同時刻將虛擬中斷輸入至次客戶0S240的處理。由此,當(dāng)在主虛擬機130中頻繁地出現(xiàn)虛擬中斷時,增加了用于對執(zhí)行狀態(tài)進行同步的處理負(fù)荷,并且減少了要分配給原服務(wù)的諸如CPU時間或通信帶寬之類的資源。
[0085]在根據(jù)本實施例的容錯系統(tǒng)10中,中斷頻率調(diào)節(jié)單元132調(diào)節(jié)虛擬中斷的頻率以使得用于對執(zhí)行狀態(tài)進行同步的處理負(fù)荷最小,并且防止用于原服務(wù)的處理能力減小。稍后將描述由中斷頻率調(diào)節(jié)單元132所執(zhí)行的中斷頻率調(diào)節(jié)操作的細(xì)節(jié)。
[0086]作為由中斷頻率調(diào)節(jié)單元132調(diào)節(jié)虛擬中斷的頻率(S103)的結(jié)果,若確定生成了虛擬中斷(S104中為是),則將虛擬中斷輸入至主客戶0S140。若確定沒有生成虛擬中斷(S104中為否),則該處理完成,進程等待后續(xù)的來自主管理程序120的外部中斷的輸入。
[0087]當(dāng)虛擬中斷被輸入至主客戶0S140時,應(yīng)在一個位置掛起主客戶0S140,在同一位置處將次客戶0S240也掛起。
[0088]例如,當(dāng)根據(jù)諸如外部中斷之類的虛擬機上下文切換事件掛起主客戶0S140以傳送對主虛擬機130的控制時,主客戶0S140的掛起位置可能在臨界段中。該臨界段是當(dāng)多個處理同時在單個資源上執(zhí)行時用來毀損進程的程序段,并且是由程序執(zhí)行諸如暫停指令無效之類的互斥控制所在的段。
[0089]在該情況下,當(dāng)虛擬中斷在位于臨界段中的掛起位置處輸入至主客戶0S140時,即使暫停指令被嵌入相同的位置中,次客戶0S240也不能在相同的位置處掛起,而是在處理該臨界段之后將次客戶0S240掛起。在這種情況下,虛擬中斷位置轉(zhuǎn)移,執(zhí)行狀態(tài)不同
止/J/ o
[0090]在該情況下,在根據(jù)本實施例的容錯系統(tǒng)10中,中斷定時調(diào)節(jié)單元133調(diào)節(jié)虛擬中斷定時(S105),并且在避開臨界段的情況下掛起主客戶0S140,由此能夠在相同的位置處掛起第二客戶0S240。稍后將描述中斷定時調(diào)節(jié)單元133進行的虛擬中斷定時調(diào)節(jié)操作的細(xì)節(jié)。
[0091]當(dāng)調(diào)節(jié)了虛擬中斷定時時,主虛擬機130將虛擬中斷輸入至主客戶0S140(S106)。然后,同步信息生成單元135生成同步信息(S107)。
[0092]同步信息包括關(guān)于虛擬中斷的識別信息和同步定時信息。同步定時信息包括由程序計數(shù)器表示的執(zhí)行掛起位置,以及由性能計數(shù)器測量的CPU執(zhí)行指令的數(shù)量。
[0093]但是,對于特定CPU特有的特殊指令,存在這樣的情況:可能發(fā)生性能計數(shù)器的計數(shù)遺漏,并且有可能未能準(zhǔn)確地對在輸入虛擬中斷以前由主客戶0S140執(zhí)行的CPU執(zhí)行指令的數(shù)量進行計數(shù)。例如,在英特爾公司制作的Pentium (注冊商標(biāo))處理器中,對于當(dāng)REP指令的執(zhí)行由于發(fā)生外部中斷而被掛起時的REP指令的執(zhí)行就沒有被計入。由此,CPU執(zhí)行指令計數(shù)可能變得小于執(zhí)行指令的實際數(shù)量。
[0094]這樣,因為對CPU執(zhí)行指令數(shù)量的計數(shù)可能不準(zhǔn)確,所以根據(jù)本實施例的容錯系統(tǒng)10不將CPU執(zhí)行指令的數(shù)量用于同步定時信息。
[0095]但是,因為程序通常包括大量的循環(huán)語句、跳轉(zhuǎn)語句、和分支語句,所以相同的指令會執(zhí)行多次。為此,可能無法僅通過執(zhí)行掛起位置來指定虛擬中斷的輸入定時。
[0096]在該情況下,根據(jù)本實施例的容錯系統(tǒng)10使得同步定時信息包括執(zhí)行掛起位置和分支數(shù)。分支數(shù)代表從前一虛擬中斷至當(dāng)前虛擬中斷所執(zhí)行的分支指令的數(shù)量,該數(shù)量是執(zhí)行順序從依次執(zhí)行發(fā)生改變的次數(shù)。
[0097]通過提前在主客戶0S140中計算分支數(shù),可以通過找出在執(zhí)行了所計數(shù)量的分支之后被第一次執(zhí)行的位置,來將執(zhí)行掛起位置正確地指定為次客戶0S240中的虛擬中斷輸入位置。
[0098]例如,如圖3A所示,假設(shè)當(dāng)指令代碼CodeA、CodeB, CodeC,...被分配于指令地址al、a2、a3、…,并且CodeC至CodeG循環(huán)三次時,在主客戶0S140中的第十六次程序執(zhí)行順序的“a6”處輸入虛擬中斷。該同步定時可以由分支數(shù)的計數(shù)值“2”和執(zhí)行掛起位置“a6”表不。
[0099]在該情況下,在次虛擬機230中,對分支數(shù)計數(shù)兩次,在第一次執(zhí)行掛起位置“a6”處掛起次客戶0S240,由此能夠在與主客戶0S140相同的定時處輸入虛擬中斷。
[0100]由此為了執(zhí)行對分支數(shù)進行計數(shù)的處理,為同步信息生成單元135提供了分支執(zhí)行數(shù)生成單元136。在指令代碼級別中,所有的循環(huán)語句、跳轉(zhuǎn)語句、和分支語句都被分支指令替代。因此,在運行應(yīng)用程序150時,分支執(zhí)行數(shù)生成單元136對由主客戶0S140執(zhí)行的分支指令的數(shù)量進行計數(shù),由此能夠?qū)Ψ种?shù)計數(shù)。為了對分支數(shù)計數(shù),可以使用性能計數(shù)器。
[0101]返回至圖2的描述,主虛擬機130生成包括有關(guān)虛擬中斷的識別信息和同步定時信息在內(nèi)的同步信息,然后將同步信息傳送至次虛擬機230 (S108 )。[0102]為了根據(jù)同步定時信息來掛起次客戶0S240的執(zhí)行,在接收到同步信息的次虛擬機230中,指定分支數(shù)執(zhí)行單元232首先對執(zhí)行次客戶0S240時的分支數(shù)進行計數(shù)。當(dāng)分支計數(shù)達(dá)到同步定時信息中的分支數(shù)所表示的值時,次虛擬機230掛起次客戶0S240。也就是,次虛擬機230執(zhí)行次客戶0S240的次數(shù)達(dá)到指定分支數(shù)量(S109)。為此,在分支計數(shù)達(dá)到指定分支數(shù)量以前不需要監(jiān)控執(zhí)行掛起位置和CPU執(zhí)行指令的數(shù)量,減小了處理負(fù)荷。稍后將描述指定分支數(shù)執(zhí)行單元232所執(zhí)行的指定分支數(shù)執(zhí)行操作的細(xì)節(jié)。
[0103]指定位置上下文切換單元233在同步定時信息的執(zhí)行掛起位置所表示的位置處掛起次客戶0S240的執(zhí)行(SI 10)。
[0104]在對次客戶0S240的執(zhí)行進行掛起過程中,若使用了如在傳統(tǒng)系統(tǒng)技術(shù)中嵌入暫停指令以配置斷點的技術(shù),則當(dāng)客戶OS (140, 240)或應(yīng)用程序(150,250)在虛擬機(130, 230)中調(diào)試時,掛起干擾了調(diào)試的斷點,并且不利地影響到相互的處理。因為可能存在用戶想要對彼此同步的虛擬機(130,230)上的應(yīng)用程序(150,250)操作進行檢查的情況,所以希望避免對斷點的干擾。
[0105]同樣,在不具有虛擬化支持功能的CPU中,處理不能通過設(shè)置斷點而從次客戶0S240轉(zhuǎn)移至次虛擬機230。
[0106]在該情況下,在根據(jù)本實施例的容錯系統(tǒng)10中,指定位置上下文切換單元233執(zhí)行上下文切換,而不使用暫停指令來掛起次客戶0S240的執(zhí)行。稍后將描述指定位置上下文切換單元233執(zhí)行的指定位置上下文切換操作的細(xì)節(jié)。
[0107]當(dāng)次虛擬機230掛起次客戶0S240時,次虛擬機230根據(jù)同步信息的虛擬中斷識別信息來配置虛擬中斷以重新啟動次客戶0S240。因此,在與主客戶0S140相同的定時處將虛擬中斷輸入至次客戶0S240 (S111),并且主虛擬機130和次虛擬機230的執(zhí)行狀態(tài)彼此同步。
[0108]若在主機100和次機200之一中出現(xiàn)硬件故障,則執(zhí)行狀態(tài)變?yōu)椴煌?。在本實施例中,?zhí)行狀態(tài)可以準(zhǔn)確地彼此同步,而不受到性能計數(shù)器的計數(shù)遺漏的影響。為此,若硬件正常,則不會擾亂執(zhí)行狀態(tài)的同步。因此,對執(zhí)行狀態(tài)的同步的擾亂被檢測,由此能夠檢測到硬件故障。
[0109]由于傳統(tǒng)系統(tǒng)不能確定對執(zhí)行狀態(tài)的同步的擾動來源于硬件故障還是來源于對執(zhí)行指令數(shù)量的計數(shù)遺漏所產(chǎn)生的影響,所以需要檢查輸出數(shù)據(jù)。另一方面,在根據(jù)本實施例的容錯系統(tǒng)10中,因為可以通過執(zhí)行狀態(tài)的同步的擾動來檢測到硬件故障,因此不需要檢查用于故障檢測的輸出數(shù)據(jù)。因此,可以減少用于檢查輸出數(shù)據(jù)的CPU處理負(fù)荷和通信負(fù)荷。同樣,可以立即檢測硬件故障的發(fā)生。
[0110]對執(zhí)行狀態(tài)的同步的擾動檢測可通過在例如次虛擬機230的虛擬中斷輸入轉(zhuǎn)換單元231中檢測同步定時信息所指定的執(zhí)行掛起位置被執(zhí)行之前分支數(shù)超過同步定時信息中所指定的次數(shù)時的同步擾亂來確定。
[0111](各塊的操作細(xì)節(jié))
[0112]接下來將參照第一實施例、第二實施例、和第三實施例來描述容錯系統(tǒng)10中各塊的操作。
[0113]在傳統(tǒng)容錯系統(tǒng)中,假設(shè)主機的CPU和次機的CPU具有相同的架構(gòu)。這是因為傳統(tǒng)的同步技術(shù)依賴于CPU架構(gòu)和CPU操作規(guī)范,若CPU的類型不同,則執(zhí)行指令均不能彼此同步,并且可能不同步。
[0114]另一方面,如第一實施例和第二實施例所述,根據(jù)本各個實施例的系統(tǒng)并不僅適用于主機100的CPUlll和次機200的CPU211具有相同架構(gòu)的情況,而是還適用于架構(gòu)不同的情況。
[0115]通常,當(dāng)容錯系統(tǒng)被操作很長一段時期后,由于故障和老化,該裝置強制被新的取代。在該情況下,很難準(zhǔn)備與先前的裝置具有相同規(guī)范的裝置。為此,根據(jù)本實施例的容錯系統(tǒng)10具有即使CPU架構(gòu)不同也能夠繼續(xù)并行同步操作的結(jié)構(gòu)。
[0116]〈第一實施例〉
[0117]作為第一實施例,將描述主機100的CPUlll和次機200的CPU211具有相同架構(gòu)的情況下的操作。在本說明書中,相同的CPU架構(gòu)意味著CPU指令集在兩個處理器之間具
有兼容性。
[0118]在該情況下,主虛擬機130和次虛擬機230通過同步CPU指令級來執(zhí)行并行同步操作。為此,在兩臺虛擬機(130,230)中,客戶OS (140,240)和應(yīng)用程序(150,250)的程序通常相對于CPU (111,211)具有符合本機CPU指令代碼的代碼格式。假設(shè)該并行同步操作叫做“CPU指令同步模式”。
[0119](中斷頻率調(diào)節(jié)操作)
[0120]首先,將描述中斷頻率調(diào)節(jié)單元132執(zhí)行的中斷頻率調(diào)節(jié)操作(S103)。主虛擬機130的中斷頻率調(diào)節(jié)單元132不會輸入針對所有外部中斷的虛擬中斷,而是將虛擬中斷的頻率調(diào)節(jié)至達(dá)到應(yīng)用程序150所需的性能和精度以及容許的通信延遲的程度。
[0121]通常,可以將外部中斷分類為使用定時器113的固定周期中斷和使用網(wǎng)絡(luò)接口卡(NIC) 114或裝置115的非固定周期中斷。中斷頻率調(diào)節(jié)單元132分別根據(jù)固定周期中斷和非固定周期中斷來執(zhí)行頻率的調(diào)節(jié)。
[0122]在固定周期的外部中斷中,通過省略一些外部中斷來以每固定周期的幾個外部中斷一次的速度來將虛擬中斷輸入到主客戶0S140。[0123]例如,當(dāng)固定周期的定時器中斷被輸入至主客戶0S140時,由此主客戶0S140可以計算準(zhǔn)確的時間。但是若應(yīng)用程序150所需的時間精度不高,則可以沒有任何問題地省略定時器中斷的一些輸入。
[0124]例如,當(dāng)來自主管理程序120的定時器中斷的周期為1ms,并且應(yīng)用程序150中所需的時間精度為IOOms時,即使虛擬中斷周期變稀疏至10ms,仍可以保證IOOms的精度。在該情況下,因為虛擬中斷的頻率減小至1/10,所以執(zhí)行狀態(tài)的同步處理也減小至1/10。
[0125]可以根據(jù)應(yīng)用程序150所需的精度提前設(shè)置稀疏率,或者通過參數(shù)對其進行調(diào)節(jié)。同樣,關(guān)于固定周期的外部中斷可一致地設(shè)置該稀疏率,或者可以針對固定周期的外部中斷每個因素來設(shè)置稀疏率。
[0126]在非固定周期的外部中斷中,省去與處理期間外部中斷輸入相關(guān)的虛擬中斷,僅將已經(jīng)完成處理的最后的外部中斷輸入至主客戶0S140來作為虛擬中斷。
[0127]例如,每當(dāng)數(shù)據(jù)到達(dá)NIC114時,就發(fā)生一次來自NIC114的網(wǎng)絡(luò)接收中斷。為此,在接收作為重要單元的數(shù)據(jù)期間發(fā)生多個外部中斷。傳統(tǒng)方法是,每當(dāng)外部中斷發(fā)生時就將虛擬中斷輸入至主客戶0S140,以使得接收到數(shù)據(jù)從NIC114轉(zhuǎn)移至主客戶0S140。另一方面,中斷頻率調(diào)節(jié)單元132省去與接收數(shù)據(jù)期間的外部中斷有關(guān)的虛擬中斷,并且將接收到數(shù)據(jù)后的一個外部中斷相關(guān)的虛擬中斷輸入至主客戶0S140。因此,可以減少執(zhí)行狀態(tài)的同步處理的數(shù)量,并且可以在同一時間處理大尺寸的數(shù)據(jù)。
[0128]作為適用于本技術(shù)的非固定周期的外部中斷,有網(wǎng)絡(luò)的發(fā)送/接收中斷、存儲器的讀/寫中斷、串聯(lián)通信的發(fā)送/接收中斷、以及諸如模擬/數(shù)字I/O板之類的各種I/O裝置的讀/寫中斷。
[0129](虛擬中斷定時調(diào)節(jié)操作)
[0130]接下來將描述由中斷定時調(diào)節(jié)單元133執(zhí)行的虛擬中斷定時調(diào)節(jié)操作(S105)。虛擬中斷定時調(diào)節(jié)被配置為在避開主客戶0S140的臨界段的情況下輸入虛擬中斷,使得次客戶0S240在相同的位置處被掛起。
[0131]對于CPU架構(gòu)的細(xì)節(jié)已知和CPU架構(gòu)的細(xì)節(jié)未知這兩種情況之間,處理中的虛擬中斷定時調(diào)節(jié)操作是不同的。CPU架構(gòu)的細(xì)節(jié)已知的情況代表可以根據(jù)CPU指令或掛起位置的狀態(tài)標(biāo)志來確定掛起位置是否在臨界段中。
[0132]首先,將參照圖4的流程圖來描述當(dāng)CPU架構(gòu)的細(xì)節(jié)已知時的具體的操作過程。
[0133]一旦從主管理程序120接收到外部中斷的輸入(S201),主虛擬機130等待對主客戶0S140的執(zhí)行掛起(S202)。
[0134]當(dāng)主客戶0S140的執(zhí)行被掛起,并且處理轉(zhuǎn)移至主虛擬機130時,主虛擬機130獲取主虛擬機130的狀態(tài)(S203)。要獲取的狀態(tài)是用于判定掛起位置是否在臨界段中的信息,例如,CPUl 11的中斷屏蔽的配置信息、或者標(biāo)志寄存器的內(nèi)容。
[0135]然后,基于獲取的信息來判定掛起位置是否在臨界段中(S204)。例如,基于以下原因可以判定掛起位置不在臨界段中:中斷屏蔽中未禁止中斷的輸入,以及在標(biāo)志寄存器中沒有設(shè)定使暫停指令的配置無效的標(biāo)志。
[0136]若掛起位置不在臨界段中(S204中為否),則掛起位置被配置為虛擬中斷的輸入定時(S205)。
[0137]若掛起位置在臨界段中(S204中為是),則在確認(rèn)主虛擬機130的狀態(tài)時提前主客戶0S140的執(zhí)行(S206)。在該情況下,例如,進行逐步執(zhí)行(step execution)以確認(rèn)每個指令的狀態(tài)(S203)。然后,判定掛起位置是否在臨界段(S204),并且掛起位置不在臨界段中(S204中為否)。然后掛起位置被配置為虛擬中斷的輸入定時(S205)。
[0138]隨后,將參照圖5的流程圖來描述當(dāng)CPU架構(gòu)的細(xì)節(jié)未知時的具體操作過程。若CPU架構(gòu)的細(xì)節(jié)未知,即使獲取了主虛擬機130的狀態(tài),也不能判定掛起位置是否在臨界段中。因此,配置掛起事件,將實際可以進行掛起的位置設(shè)置為用于輸入虛擬中斷的掛起位置。
[0139]一旦接收到來自主管理程序120的外部中斷的輸入(S301),主虛擬機130等待主客戶0S140的執(zhí)行掛起(S302)。
[0140]當(dāng)主客戶0S140的執(zhí)行被掛起,并且處理轉(zhuǎn)移至主虛擬機130時,主虛擬機130在主客戶0S140中配置一個在執(zhí)行了給定數(shù)量的指令之后(例如,在執(zhí)行了一條指令之后)進行掛起的事件。
[0141]然后,通過逐步執(zhí)行重新啟動主客戶0S140的執(zhí)行(S304),為單條指令的執(zhí)行獲取中斷的因素(S305)。這是因為掛起的因素不總是由配置的掛起事件引起的。
[0142]若掛起的因素由配置的掛起事件引起(S306中為是),則確定掛起位置不在臨界段內(nèi),并且確定在相同位置處掛起次客戶0S240,并且掛起位置被配置為虛擬中斷的輸入定時(S307)。
[0143]如果掛起的因素不是由配置的掛起事件引起(S306中為否),則確定掛起位置在臨界段中,并且不能在相同的位置處掛起次客戶0S240。然后,配置一個在執(zhí)行一條指令之后掛起次客戶0S240的事件(S303),并且重復(fù)已經(jīng)重新啟動主客戶0S140的執(zhí)行(S304)之后的處理。若進程前進到臨界段以外(S306中為是),則掛起位置被配置為虛擬中斷的輸入定時(S307)。
[0144](同步信息生成操作)
[0145]隨后,將描述同步信息生成單元135進行的生成同步信息的操作(S107)。若主機100的CPUl 11和次機200的CPU211具有相同的架構(gòu),則同步信息的同步定時信息中的執(zhí)行掛起位置由CPU指令代碼的執(zhí)行停止位置表示,并且可以使用程序計數(shù)器的值。
[0146]同步定時信息中分支執(zhí)行的數(shù)量由主客戶0S140自前一同步定時信息生成時間起所執(zhí)行的分支數(shù)來表示??梢酝ㄟ^對在CPU指令代碼級別處執(zhí)行的分支指令進行計數(shù)來得到分支數(shù)。
[0147](指定的分支數(shù)執(zhí)行操作)
[0148]隨后,將描述由指定分支數(shù)執(zhí)行單元232執(zhí)行的指定分支數(shù)執(zhí)行操作(S109)。指定分支數(shù)執(zhí)行操作被配置為對次客戶0S240進行由同步定時信息中的分支數(shù)所表示的次數(shù)的掛起。
[0149]指定分支數(shù)執(zhí)行單元232對在CPU指令代碼級別所執(zhí)行的分支指令進行計數(shù)。若計數(shù)值達(dá)到指定的分支數(shù),則指定分支數(shù)執(zhí)行單元232通知次虛擬機230該事實。因此,上下文切換至次虛擬機230,并且次客戶0S240的執(zhí)行被掛起。
[0150]在由于CPU211的流水線功能的加速導(dǎo)致在執(zhí)行指定數(shù)量的分支后不能立即停止的CPU架構(gòu)中,計數(shù)值被設(shè)置為小于指定的分支數(shù),從而次客戶0S240可以被進行指定分支數(shù)量的次數(shù)的掛起。[0151](指定位置上下文切換操作)
[0152]隨后,將描述指定位置上下文切換單元233進行的指定位置上下文切換操作(SllO)0指定位置上下文切換操作被配置為在對次客戶0S240掛起了指定分支數(shù)量的次數(shù)后不使用暫停指令的情況下,在指定的執(zhí)行掛起位置處將上下文切換至次虛擬機230。
[0153]當(dāng)為次虛擬機230實現(xiàn)了專用的上下文切換指令時,在次客戶0S240的執(zhí)行掛起位置處嵌入上下文切換指令。例如,上下文切換指令可以是英特爾公司制造的CPU的VMCALL 指令。
[0154]當(dāng)次客戶0S240執(zhí)行上下文切換指令時,上下文從次客戶0S240切換至次虛擬機230,次客戶0S240的執(zhí)行被掛起。
[0155]當(dāng)沒有實現(xiàn)專用上下文切換指令時,使虛擬中斷或CPU異常的事件在執(zhí)行掛起位置處發(fā)生,使得執(zhí)行上下文切換。當(dāng)執(zhí)行上下文切換時,上下文從次客戶0S240切換至次虛擬機230,次客戶0S240的執(zhí)行被掛起。
[0156]在任何情況下,當(dāng)次客戶0S240的執(zhí)行被掛起時,次虛擬機230配置虛擬中斷,并且重新啟動次客戶0S240的執(zhí)行,那時,虛擬中斷被輸入至次客戶0S240。
[0157]〈第二實施例〉
[0158]作為第二實施例,將描述當(dāng)主機100的CPUlll和次機200的CPU211具有不同架構(gòu)時的操作。在本說明書中,不同CPU架構(gòu)意味著兩個處理器之間的CPU指令集不具有兼容性。
[0159]在該情況下,主虛擬機130和次虛擬機230通過同步中間語言級別來執(zhí)行并行同步操作。在本說明書中,“中間語言”也被叫做“中間代碼”或“字節(jié)代碼”,并且代表作為高級語言的源代碼與機器語言的代碼之間的中間體的中間表示語言。并行同步操作被叫做“中間語言同步模式”。
[0160]因為CPU指令集在兩臺虛擬機(130,230)之間沒有兼容性,所以客戶0S(140,240)和應(yīng)用程序(150,250)的程序是中間語言的程序,其中,Java (注冊商標(biāo))和C#被轉(zhuǎn)換而取代本地CPU指令代碼。
[0161]兩臺虛擬機(130,230)通過現(xiàn)有的諸如解釋程序或即時編譯器(JIT編譯器)之類的CPU指令轉(zhuǎn)換技術(shù),針對虛擬機CPU將中間語言轉(zhuǎn)換為本地CPU指令。
[0162]類似地,當(dāng)主機100的CPUlll和次機200的CPU211具有相同的架構(gòu)時,可以執(zhí)行使用中間語言同步模式的并行同步操作。但是,使用CPU指令同步模式的并行同步操作的執(zhí)行速度高于中間語言同步模式的并行同步操作的執(zhí)行速度。
[0163]隨后,將描述根據(jù)第二實施例的各塊的操作。由于大部分的操作與第一實施例中CPU指令同步模式的操作相同,因此將僅描述與第一實施例不同的處理。
[0164](虛擬中斷定時調(diào)節(jié)操作)
[0165]在根據(jù)第一實施例的CPU指令同步模式中,在CPU架構(gòu)的細(xì)節(jié)已知和CPU架構(gòu)的細(xì)節(jié)未知這兩種情況之間的處理中,虛擬中斷定時調(diào)節(jié)操作(S105)是不同的。另一方面,在根據(jù)第二實施例的中間語言同步模式中,執(zhí)行與CPU架構(gòu)的細(xì)節(jié)已知時相同的處理。
[0166]也就是,因為可以根據(jù)CPU指令或掛起位置的狀態(tài)標(biāo)志來確定掛起位置是否在臨界段中,所以根據(jù)圖4所示的流程圖,在避開臨界段的情況下配置主客戶0S140的掛起位置,并將虛擬中斷輸入至主客戶0S140。[0167]同樣,在中間語言同步模式中,除了 CPU指令和掛起位置的狀態(tài)標(biāo)志以外還能夠以中間語言級別來確定掛起位置是否在臨界段中。例如,若中間語言是Java (注冊商標(biāo))的字節(jié)代碼,則假設(shè)在同步互斥控制下實現(xiàn)臨界段。為此,在確認(rèn)所執(zhí)行的中間語言的指令的同時,主虛擬機130可以確定掛起的Java (注冊商標(biāo))的中間語言是否在臨界段中。
[0168](同步信息的生成操作)
[0169]在根據(jù)第一實施例的CPU指令同步模式中,在同步信息的生成操作(S107)中,同步定時信息中所包括的執(zhí)行掛起位置通過使用程序計數(shù)器值而由CPU指令代碼的執(zhí)行停止位置表示。同樣,包括在同步定時信息中的分支執(zhí)行數(shù)量由自前一同步定時信息生成時間起執(zhí)行的CPU指令代碼的分支數(shù)表示。
[0170]相反,在根據(jù)第二實施例的中間語言同步模式中,執(zhí)行掛起位置由輸入虛擬中斷時執(zhí)行的中間語言級別的執(zhí)行掛起位置表示。同樣,分支執(zhí)行的數(shù)量由自前一同步定時信息生成時間起執(zhí)行的中間語言級別的分支數(shù)表示。
[0171 ](指定位置上下文切換操作)
[0172]在根據(jù)第一實施例的CPU指令同步模式中,在指定位置上下文切換操作(SllO)中,當(dāng)針對次虛擬機230實現(xiàn)了專用上下文切換指令時,在次客戶0S240的執(zhí)行掛起位置處嵌入上下文切換指令。當(dāng)沒有實現(xiàn)專用上下文切換指令時,使虛擬中斷或CPU異常的事件在執(zhí)行掛起位置處發(fā)生,使得上下文切換被執(zhí)行。即使在根據(jù)第二實施例的中間語言同步模式中,在中間語言級別的執(zhí)行掛起位置處由CPU指令轉(zhuǎn)換執(zhí)行相同設(shè)定。
[0173]〈第三實施例〉
[0174]隨后,作為第三實施例,將描述當(dāng)主機100與次機200之間的硬件配置不同時的并行同步操作。主機100的主硬件110和次機200的次硬件210均由諸如CPU(111,211)、內(nèi)存(112、212)、諸如存儲器之類的裝置(115、215)之類的各種硬件裝置配置而成。但是,雙方硬件的功能或性能可能并不相互一致。
[0175]例如,存在CPU (111,211)的規(guī)格彼此不同、或者內(nèi)存(112、212)的容量彼此不同的情況。同樣,在容錯系統(tǒng)10的操作處理中,由于裝置(115,215)的替換會出現(xiàn)兩個裝置(115,215)不同。
[0176]為此,主虛擬機130和次虛擬機230在操作上相同,但是在處理速度上可能不同。如上所述,在容錯系統(tǒng)10中,主虛擬機130配置為在次虛擬機230之前操作。但是,例如,若次虛擬機230處理速度更高,則進程的推進會反轉(zhuǎn),并且基于來自主虛擬機130的同步信息,執(zhí)行狀態(tài)不同步。若主虛擬機130處理速度更高,則次虛擬機230的延遲會累積。
[0177]同樣,由于裝置(115,215)不同,因此在主客戶0S140和次客戶0S240之間驅(qū)動器處理的執(zhí)行可能不同,并且它們之間的操作不同,結(jié)果操作可能不同步。
[0178]在該情況下,在容錯系統(tǒng)10中,提供了一種基于主硬件110和次硬件210之間的差異來校正處理速度差和不同步的結(jié)構(gòu)。具體來說,主虛擬機130的同步信息生成單元135和次虛擬機230的同步校正單元235執(zhí)行同步校正。同步校正可以在執(zhí)行并行同步操作之前被執(zhí)行,或者可以在并行同步操作的執(zhí)行期間被執(zhí)行。
[0179](執(zhí)行并行同步操作之前的同步校正操作)
[0180]主虛擬機130的同步信息生成單元135在主虛擬機130和次虛擬機230的并行同步操作以前從次虛擬機230搜集關(guān)于次虛擬機230的操作性能信息。[0181]操作性能信息是這樣的信息,其包括了與次虛擬機230中的次客戶0S240接口的操作規(guī)范以及作為次虛擬機230的程序執(zhí)行速度指標(biāo)的基準(zhǔn)信息。同步信息生成單元135被配置為在可得到的范圍內(nèi)獲取有關(guān)多個項目的操作性能信息。
[0182]同步信息生成單元135還獲取有關(guān)主虛擬機130自身的操作性能信息,并且將獲取到的操作性能信息與有關(guān)次虛擬機230的操作性能信息進行比較。然后,同步信息生成單元135設(shè)置主虛擬機130和次虛擬機230所使用的操作性能,使得主虛擬機130的并行同步操作中的操作性能與次虛擬機230的并行同步操作中的操作性能基本上相等。
[0183]操作性能例如是關(guān)于以下項目的基準(zhǔn)信息:操作頻率、內(nèi)存大小、緩存大小、諸如TLB (翻譯后援緩沖器)/EPT (增強頁表)規(guī)范之類的操作規(guī)范、MIPS值、或SPEC值。在中間語言同步模式中,可以使用中間語言的基準(zhǔn)值。例如,當(dāng)使用Java (注冊商標(biāo))的字節(jié)代碼作為中間語言時,SPECjbb, CaffeineMark等被列舉為基準(zhǔn)值。
[0184]然后,同步信息生成單元135將次虛擬機230使用的操作性能作為同步校正信息通知給次虛擬機230的同步校正單元235。次虛擬機230的同步校正單元235根據(jù)所通知的同步校正信息來在執(zhí)行并行操作時設(shè)置次虛擬機230的操作性能。
[0185]將描述通過調(diào)節(jié)操作頻率的同步校正的示例。如上所述,當(dāng)主機100和次機200之間的硬件配置不同時,存在操作相同但是處理速度不同的情況,以及操作本身不同的情況。在該示例中,將描述操作相同但是處理速度不同時的同步校正。
[0186]在虛擬機(130,230)的操作頻率的調(diào)節(jié)中,可使用為了節(jié)省電力而準(zhǔn)備的電力控制功能。例如,針對標(biāo)準(zhǔn)電力控制功能可以使用ACPI(高級配置和電源接口),針對調(diào)節(jié)操作頻率的功能可以使用Linux(注冊商標(biāo))的cpfreq子系統(tǒng)。使用這些功能,虛擬機(130,230)均準(zhǔn)備多個可用的操作頻率。
[0187]主虛擬機130的同步信息生成單元135從次虛擬機230獲取在次虛擬機230中可用的操作頻率的列表,還獲取可以被主虛擬機130自身使用的操作頻率的列表,并且選擇主虛擬機130和次虛擬機230之間基本上相同的操作頻率。同步信息生成單元135將所選操作頻率作為同步校正信息通知給次虛擬機230的同步校正單元235。
[0188]在主虛擬機130和次虛擬機230的并行同步操作期間,各虛擬機(130,230)基于主硬件110和次硬件210之間的操作頻率的差異來以所選操作頻率操作,從而消除處理速度差。
[0189]例如,若主虛擬機130的可用操作頻率中沒有與次虛擬機230的可用操作頻率相匹配的頻率,則將次虛擬機230設(shè)置為更高的操作頻率,并且如稍后所述,可以有暫停地地來執(zhí)行次虛擬機230的操作。
[0190]在中間語言同步模式中,由于基準(zhǔn)值不同,因此主虛擬機130和次虛擬機230之間的處理速度不同。因此,基于所獲取的兩個基準(zhǔn)值來執(zhí)行與針對操作頻率的調(diào)節(jié)相同的調(diào)節(jié),以校正處理速度的差異。
[0191]隨后,將給出當(dāng)由于硬件配置的差異導(dǎo)致主虛擬機130和次虛擬機230之間操作本身不同時的同步校正的描述。
[0192]例如,當(dāng)CPU架構(gòu)相同但裝置(115,215)的操作規(guī)范不同時,改變虛擬機的執(zhí)行,以使兩個客戶OS (140,240)執(zhí)行相同的驅(qū)動器處理。通過這樣的改變,兩個客戶OS (140,240)能夠執(zhí)行相同的操作,并能夠防止不同步。具體來說講,在并行同步操作開始前,將吸收操作規(guī)范中的差異的功能并入主虛擬機130或次虛擬機230的設(shè)備模擬器。
[0193]該功能根據(jù)待校正對象可以分為以下兩種類型。
[0194](I)對硬件功能的有無之間的差異的校正
[0195]當(dāng)某一硬件功能僅安裝于一臺虛擬機(130,230)時,具有該功能的虛擬機(130, 230)不使用該功能,使得兩臺虛擬機(130,230)在各虛擬機均不具有該硬件功能的狀態(tài)下操作。
[0196]例如,若虛擬機在FPU (浮點處理單元)功能的有無方面不同,則兩臺虛擬機(130, 230)在虛擬機均不具有FPC功能的狀態(tài)下操作。在該情況下,浮點處理由客戶OS(140,240)內(nèi)的仿真代碼執(zhí)行。具體來說,在執(zhí)行浮點處理時發(fā)生異常,客戶OS (140,240)的異常處理程序獲取該異常,通過軟件仿真該處理。
[0197]可替代地,不具備該功能的虛擬機(130,230)可以通過在客戶OS (140,240)以外的外部環(huán)境中處理軟件來仿真該功能,以吸收它們之間的差異??蛻鬙S (140,240)以外的外部環(huán)境可以是虛擬機(130,230)或者管理程序(120,220)。
[0198]例如,不具有FPC功能的虛擬機(130,230)通過虛擬機(130,230)內(nèi)的仿真代碼來執(zhí)行浮點處理。具體來說,由在執(zhí)行浮點處理時發(fā)生的異常來執(zhí)行到虛擬機上下文的切換,由虛擬機(130,230)內(nèi)的軟件來仿真該處理,并且隨后進程返回至客戶OS上下文。因為,在客戶OS (140,240)中沒有獲取異常,所以沒有執(zhí)行客戶OS (140,240)內(nèi)的仿真代碼。
[0199](2)對硬件功能的性能或容量的差異的校正
[0200]當(dāng)硬件功能的性能或容量不同時,在客戶OS (140,240)以外的外部環(huán)境中執(zhí)行操作方面不同的處理??蛻鬙S (140,240)以外的外部環(huán)境可以是虛擬機(130,230)、管理程序(120,220)、或硬件(110,210)。
[0201]例如,若TLB的緩存大小不同,則存在僅虛擬機(130,230)中的一個未命中緩存的情況,發(fā)生TLB未命中。在該情況下,在客戶0S(140,240)的外部執(zhí)行從TLB未命中的恢復(fù)處理。在英特爾公司制造的CPU中,可以由硬件的功能來執(zhí)行恢復(fù)處理。另一方面,當(dāng)CPU(111,211)不具備硬件的恢復(fù)功能時,由虛擬機(130,230)或管理程序(130,230)的軟件來執(zhí)行恢復(fù)處理。
[0202]在中間語言同步模式中,虛擬機(130,230)使用諸如解釋器或虛擬內(nèi)存之類的軟件功能來執(zhí)行由中間語言表達(dá)的客戶OS程序。為此,不會因為操作規(guī)范上的差異導(dǎo)致客戶OS (140, 240)的操作上發(fā)生差異。
[0203](在并行同步操作的執(zhí)行期間的同步校正操作)
[0204]當(dāng)即使通過并行同步操作開始前的調(diào)節(jié)也不能消除主虛擬機130和次虛擬機230之間的處理速度差異時,同步信息生成單元135和同步校正單元235在并行同步操作期間執(zhí)行以下同步校正。
[0205]首先,將描述當(dāng)調(diào)節(jié)了操作性能后的主虛擬機130比調(diào)節(jié)了操作性能后的次虛擬機230的速度高時的同步校正。
[0206]同步信息生成單元135選擇主虛擬機130的操作性能或者次虛擬機230的操作性能作為要被通知給次虛擬機230的同步校正信息的操作速度信息。例如,基于參數(shù)配置來進行選擇。
[0207]若選擇了主虛擬機130的操作性能,則因為主虛擬機130的在前操作擴大,所以執(zhí)行用于消除次虛擬機230的延遲的處理。在該情況下,若次虛擬機230的延遲大于假定量,則可以檢測機器中出現(xiàn)故障。
[0208]現(xiàn)在,將描述兩種校正方法作為消除延遲的處理的示例。首先,將描述重新設(shè)置延遲和執(zhí)行再同步的方法作為第一校正方法。
[0209]次虛擬機230的同步校正單元235確認(rèn)次虛擬機230中的程序的執(zhí)行速度的測量延遲時間是否等于從同步校正信息得到的假定延遲時間。
[0210]現(xiàn)在,將描述測量延遲時間。次虛擬機230從主虛擬機130接收使用定時器的固定周期虛擬中斷的同步定時信息。同步定時信息代表通過將主虛擬機130的執(zhí)行速度轉(zhuǎn)換為執(zhí)行指令的數(shù)量而得到的周期時間,其是次虛擬機230的理論值。另一方面,在次虛擬機230中發(fā)生使用定時器的固定周期虛擬中斷時的周期時間是測量值。通過從測量值中減去理論值得到的值是測量延遲時間。
[0211]例如,當(dāng)主虛擬機130中實際發(fā)生的定時器中斷的周期值是10ms時,若次虛擬機230在進行與主虛擬機130相同的操作后接收虛擬中斷,則假設(shè)次虛擬機230中定時器中斷的周期的測量值為15ms。在該情況下,因為理論值為10ms,而測量值為15ms,所以計算出定時器中斷有5ms的延遲。
[0212]若測量延遲時間與從同步校正信息得到的假定延遲時間可比較,則確定為正常延遲,繼續(xù)處理。因為測量延遲時間隨著處理的繼續(xù)而累積,所以提前設(shè)置作為可容許范圍的可容許延遲時間,在當(dāng)測量延遲時間超過可容許延遲時間的時點處再次執(zhí)行與并行同步操作啟動時相同的同步初始化處理以重設(shè)延遲。
[0213]例如,當(dāng)主虛擬機130的程序執(zhí)行速度為1500MIPS (百萬指令每秒),并且次虛擬機230的程序執(zhí)行速度為1000MIPS時,若在次虛擬機230中出現(xiàn)延遲,該延遲為每秒處理500MI(5億指令)所需的時間,則確定為正常延遲。同樣,連續(xù)10秒累積的用于處理5000MI(50億指令)的時間在次虛擬機230中對應(yīng)于5秒,若時間超過可容許延遲時間,則執(zhí)行再同步以重設(shè)延遲。
[0214]隨后,將描述提前某一時間以克服延遲的方法作為第二校正方法。在該方法中,當(dāng)主客戶0S140變?yōu)榭臻e狀態(tài),并且操作停止直至隨后的虛擬中斷輸入至主客戶0S140時,也就是當(dāng)CPU處理的負(fù)荷小于100%時,將次客戶0S240重新開始的時間提前以克服延遲。
[0215]主客戶0S140的空閑狀態(tài)代表沒有待執(zhí)行的處理并且主客戶0S140的操作停止的狀態(tài)。主客戶0S140直至輸入虛擬中斷以執(zhí)行處理程序處理才重新啟動操作。直到那時,主虛擬機130等待外部中斷的輸入。
[0216]主虛擬機130繼續(xù)等待外部中斷的實際輸入,次虛擬機230繼續(xù)等待用于輸入虛擬中斷的同步信息的接收。
[0217]當(dāng)次虛擬機230被延遲時,因為同步信息累積,所以可以已知接下來要輸入的虛擬中斷。為此,次虛擬機230不需要等待與主虛擬機130相同的時間,而是可以將重新啟動次客戶0S240的時間提前,并且輸入虛擬中斷。
[0218]例如,如第一校正方法,假設(shè)主虛擬機130的程序執(zhí)行速度為1500MIPS,次虛擬機230的程序執(zhí)行速度為1000MIPS。當(dāng)主客戶0S140的CPU負(fù)荷為20%時,執(zhí)行每秒300MI的處理,使主虛擬機130停止達(dá)一秒內(nèi)的剩余時間。主虛擬機130的停止時間是當(dāng)主虛擬機130執(zhí)行1200MI的處理期間的時間。[0219]另一方面,在次虛擬機230已經(jīng)在一秒內(nèi)執(zhí)行了與主虛擬機130相同的300MI的處理后,次虛擬機230不在執(zhí)行與主虛擬機130相同的1200MI的處理的持續(xù)時間內(nèi)停止,而是在一秒的剩余時間內(nèi)停止,即,當(dāng)次虛擬機230執(zhí)行700MI的處理的持續(xù)時間內(nèi)停止。由此,次虛擬機230的停止時間從1200MI減少至700MI處理時間,因此能夠克服次虛擬機230的延遲。
[0220]隨后,將描述當(dāng)主虛擬機130比次虛擬機230的速度高時提供次虛擬機230的操作性能作為通知給次虛擬機230的同步校正信息的操作速度信息。
[0221]在該情況下,因為主虛擬機130以次虛擬機230的操作性能運行,所以主虛擬機130的同步信息生成單元135在并行同步操作期間執(zhí)行同步校正處理以調(diào)節(jié)程序執(zhí)行速度。具體來說,主虛擬機130在依照次虛擬機230的程序執(zhí)行速度進行暫停的情況下執(zhí)行操作。
[0222]其后,將描述當(dāng)調(diào)節(jié)了操作性能后的次虛擬機230比調(diào)節(jié)了操作性能后的主虛擬機130的速度更高時的同步校正。同步信息生成單元135設(shè)置要通知給次虛擬機230的同步校正信息的操作速度信息作為主虛擬機130的操作性能。
[0223]然后,主虛擬機130在并行同步操作期間不執(zhí)行同步校正處理,并且次虛擬機230在依照主虛擬機130的程序執(zhí)行速度進行暫停的情況下執(zhí)行操作。
[0224]例如,當(dāng)主虛擬機130的程序執(zhí)行速度為1000MIPS,次虛擬機230的程序執(zhí)行速度為1500MIPS時,次虛擬機230執(zhí)行1000MI的處理并隨后在每個固定周期的虛擬中斷執(zhí)行用于執(zhí)行500MI的處理的持續(xù)時間的暫停。因此,兩臺虛擬機(130,230)可以同樣地執(zhí)行1000MIPS的處理。
[0225](針對具有不確定訪問時間的存儲器裝置的處置)
[0226]當(dāng)虛擬機(130,230)訪問諸如磁盤、SSD、⑶、DVD、或磁帶之類的存儲裝置(115,215)時,由于存儲裝置(115,215)的個體差異或老化,針對訪問請求的完成等待時間有變化。為了防止該變化導(dǎo)致的不同步,需要適合于較晚完成等待時間,并且發(fā)生同步等待,由此導(dǎo)致執(zhí)行速度減小。
[0227]在根據(jù)本實施例的容錯系統(tǒng)10中,當(dāng)裝置(115,215)是存儲裝置時,虛擬機(130,230 )在內(nèi)存上仿真裝置(115,215 ),并且用內(nèi)存訪問代替對裝置(115,215 )的訪問,由此能夠?qū)ρb置(115,215)的讀/寫請求的完成等待時間減小至零。
[0228]在該情況下,對裝置(115,215)的讀/寫請求的完成中斷不需要等待實際的完成中斷,而是當(dāng)請求時與內(nèi)存訪問一起將虛擬中斷輸入至客戶0S(140,240),由此能夠以共同的同步定時處理讀/寫請求和完成虛擬中斷。因此,對由于完成中斷而導(dǎo)致的虛擬中斷的同步處理變得不必要,減小了處理負(fù)荷,可以防止由于同步等待導(dǎo)致的執(zhí)行速度的減小。
[0229]在內(nèi)存中仿真的裝置(115,215)內(nèi)容中的改變與來自客戶0S (140, 240)的訪問不同步地反映在裝置(115,215)上。在應(yīng)對方法中,處理可能根據(jù)分配內(nèi)存的位置而不同。
[0230](1)分配虛擬機(130,230)內(nèi)的內(nèi)存的情況:
[0231]虛擬機(130,230)在分配給虛擬機(130,230)的內(nèi)存上加載存儲裝置(115,215)的內(nèi)容,并用內(nèi)存訪問替換對存儲裝置的訪問。該內(nèi)存叫做“虛擬存儲器”。當(dāng)更新虛擬存儲器的內(nèi)容時,虛擬機(130,230)與來自客戶0S (140, 240)的訪問不同步地在存儲裝置(115,215)上反應(yīng)內(nèi)容的改變。[0232]具體來說,在以下過程中讀寫數(shù)據(jù)。首先,作為虛擬存儲器的初始化,在提前分配給虛擬機(130,230)的內(nèi)存上加載存儲裝置(115,215)的內(nèi)容。
[0233]在讀數(shù)據(jù)時,當(dāng)客戶0S (140,240)向虛擬存儲器請求讀數(shù)據(jù)時,虛擬機(130,230)向客戶0S (140, 240)通知虛擬存儲器上的內(nèi)容,將讀完成的虛擬中斷輸入至客戶0S(140,240)。
[0234]在寫數(shù)據(jù)時,當(dāng)客戶0S (140, 240)向虛擬存儲請求寫數(shù)據(jù)時,虛擬機(130,230)在虛擬存儲中寫數(shù)據(jù),將寫完成的虛擬中斷輸入至客戶0S (140,240)。然后,虛擬機(130,230)異步地將虛擬存儲器的改變部分寫進存儲裝置(115,215)。在將數(shù)據(jù)寫進存儲裝置(115,215)完成后,完成的外部中斷被輸入至虛擬機(130,230)。但是,不需要生成基于完成的外部中斷的虛擬中斷。
[0235](2)分配客戶0S (140, 240)內(nèi)的內(nèi)存的情況
[0236]當(dāng)客戶0S (140, 240)可以使用RAM (隨機訪問存儲器)盤時,在客戶0S (140, 240)中配置的RAM盤用于存儲裝置(115,215)的仿真。RAM盤是讀和寫的等待時間為零并且沒有完成中斷發(fā)生的裝置。例如,RAM盤可以被諸如Linux (注冊商標(biāo))之類的OS使用。
[0237]在客戶0S (140,240)內(nèi)的RAM盤上進行關(guān)于上述虛擬存儲器的讀和寫,不在虛擬機(130,230)上進行讀和寫的請求。因為在客戶0S (140,240)內(nèi)部已經(jīng)完成了處理,針對讀/寫請求或完成中斷的同步處理變得不必要。
[0238]具體地,在隨后的過程中進行RAM盤的數(shù)據(jù)讀寫。首先,作為RAM盤的初始化,提前在客戶0S (140, 240)的內(nèi)存上加載存儲裝置(115,215)的內(nèi)容。
[0239]在讀數(shù)據(jù)時,當(dāng)客戶0S (140, 240)向RAM盤請求讀數(shù)據(jù)時,將RAM盤上的存儲裝置(115,215)的內(nèi)容通知給客戶0S (140,240)。不需要讀完成的虛擬中斷。
[0240]在寫數(shù)據(jù)時,當(dāng)客戶0S( 140,240)向RAM盤請求寫數(shù)據(jù)時,數(shù)據(jù)被寫進RAM盤。不需要寫完成的虛擬中斷。然后,客戶0S (140,240)使RAM盤的內(nèi)容周期性地保存在存儲裝置(115,215)中。
【權(quán)利要求】
1.一種各錯系統(tǒng),包括: 在主機上形成的主虛擬機,主管理程序在所述主機中運行,所述主虛擬機適用于將基于來自所述主管理程序的外部中斷的虛擬中斷輸入至主客戶OS ;以及 在次機上形成的次虛擬機,次管理程序在所述次機中運行,所述次虛擬機適用于基于與所述主虛擬機所發(fā)送的虛擬中斷有關(guān)的定時信息來將虛擬中斷發(fā)送至次客戶OS, 其中所述主虛擬機適用于從所述次虛擬機搜集操作性能信息,并且配置所述主虛擬機的操作性能和所述次虛擬機的操作性能,使得所述主虛擬機的操作性能變得與所述次虛擬機的操作性能相同。
2.如權(quán)利要求1所述的容錯系統(tǒng), 其中所述主虛擬機適用于將所述次虛擬機的所配置的操作性能通知給所述次虛擬機,以及 其中所述次虛擬機適用于根據(jù)所通知的操作性能執(zhí)行操作。
3.如權(quán)利要求1或2所述的容錯系統(tǒng), 其中所述操作性能包括操作頻率,并且 其中所述主虛擬機適用于搜集所述主虛擬機可用的操作頻率和所述次虛擬機可用的操作頻率,并且適用于配置所述主虛擬機的操作頻率和所述次虛擬機的操作頻率。
4.如權(quán)利要求1或2所述的容錯系統(tǒng), 其中如果所述主虛擬機所使用的裝置的操作規(guī)范與所述次虛擬機所使用的裝置的操作規(guī)范彼此不同,則所述主虛擬機適用于仿真處理,使得所述主虛擬機所使用的裝置的處理變得與所述次虛擬機所使用的裝置的處理相同。
5.如權(quán)利要求4所述的容錯系統(tǒng), 其中如果各所述裝置的操作規(guī)范中的差異在于是否存在給定功能,則所述主虛擬機適用于使所述給定功能無效并仿真處理,使得所述主虛擬機所使用的裝置的處理變得與所述次虛擬機所使用的裝置的處理相同,并且 其中如果各所述裝置的操作規(guī)范中的差異在于性能或容量,則所述主虛擬機適用于允許將在所述主客戶OS以外的外部環(huán)境中執(zhí)行的操作上的處理不同。
6.如權(quán)利要求1或2所述的容錯系統(tǒng), 其中如果所述主虛擬機所使用的裝置的操作規(guī)范與所述次虛擬機所使用的裝置的操作規(guī)范彼此不同,則所述次虛擬機適用于仿真處理,使得所述次虛擬機所使用的裝置的處理變得與所述主虛擬機所使用的裝置的處理相同。
7.如權(quán)利要求6所述的容錯系統(tǒng), 其中如果各所述裝置的操作規(guī)范中的差異在于是否存在給定功能,則所述次虛擬機適用于使所述給定功能無效并仿真處理,使得所述次虛擬機所使用的裝置的處理變得與所述主虛擬機所使用的裝置的處理相同,并且 其中如果各所述裝置的操作規(guī)范中的差異在于性能或容量,則所述次虛擬機適用于允許將在所述次客戶OS以外的外部環(huán)境中執(zhí)行的操作上的處理不同。
8.如權(quán)利要求1或2所述的容錯系統(tǒng), 其中如果即使配置了操作性能以后所述次虛擬機的執(zhí)行速度仍低于所述主虛擬機的執(zhí)行速度,則所述次虛擬機適用于獲取延遲度,并且如果所獲取的值超過預(yù)定的可容許延遲時間,則所述次虛擬機適用于執(zhí)行同步初始化處理。
9.如權(quán)利要求8所述的容錯系統(tǒng), 其中如果所獲取的延遲度大于假定量,則所述次虛擬機適用于檢測故障發(fā)生。
10.如權(quán)利要求1或2所述的容錯系統(tǒng), 其中如果即使配置了操作性能以后所述次虛擬機的執(zhí)行速度仍低于所述主虛擬機的執(zhí)行速度,則所述次虛擬機適用于在所述主客戶OS的空閑期間加速虛擬中斷輸入定時,以克服所述主虛擬機的延遲。
11.如權(quán)利要求1或2所述的容錯系統(tǒng), 其中如果即使配置了操作性能以后所述主虛擬機的執(zhí)行速度仍高于所述次虛擬機的執(zhí)行速度,則所述主虛擬機適用于在依照所述次虛擬機的執(zhí)行速度進行暫停的情況下執(zhí)行操作。
12.如權(quán)利要求1或2所述的容錯系統(tǒng), 其中如果即使配置了操作性能以后所述次虛擬機的執(zhí)行速度仍高于所述主虛擬機的執(zhí)行速度,則所述次虛擬機適用于在依照所述主虛擬機的執(zhí)行速度進行暫停的情況下執(zhí)行操作。
13.如權(quán)利要求1或2 所述的容錯系統(tǒng), 其中所述主虛擬機和所述次虛擬機適用于在分配給各虛擬機的內(nèi)存上加載各存儲裝置的內(nèi)容,并且用內(nèi)存訪問代替存儲裝置訪問。
14.如權(quán)利要求13所述的容錯系統(tǒng), 其中當(dāng)進行內(nèi)存訪問時,所述主虛擬機和所述次虛擬機適用于將所述虛擬中斷輸入至各自客戶OS而不等待訪問完成的外部中斷。
15.如權(quán)利要求13所述的容錯系統(tǒng), 其中所述主虛擬機和所述次虛擬機適用于在由各自客戶OS配置的RAM盤上加載各存儲裝置的內(nèi)容,并且用RAM盤訪問代替存儲裝置訪問。
16.一種用于通過主虛擬機和次虛擬機執(zhí)行容錯的方法,所述主虛擬機形成在主機上,主管理程序運行在所述主機中,所述主虛擬機被配置為將基于來自主管理程序的外部中斷的虛擬中斷輸入至主客戶OS,所述次虛擬機形成在次機上,次管理程序運行在所述次機中,所述次虛擬機被配置為基于與主虛擬機所發(fā)送的虛擬中斷有關(guān)的定時信息來將虛擬中斷輸入至次客戶OS,所述方法包括: 從次虛擬機搜集操作性能信息;并且 配置主虛擬機的操作性能和次虛擬機的操作性能,使得主虛擬機的操作性能變得與次虛擬機的操作性能相同。
【文檔編號】G06F11/07GK103678024SQ201310430124
【公開日】2014年3月26日 申請日期:2013年9月18日 優(yōu)先權(quán)日:2012年9月18日
【發(fā)明者】吉田善貴, 植原正太, 大野毅 申請人:橫河電機株式會社