欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種多核虛擬機(jī)確定性重演的方法

文檔序號:10665705閱讀:291來源:國知局
一種多核虛擬機(jī)確定性重演的方法
【專利摘要】本發(fā)明公布了一種多核虛擬機(jī)確定性重演的方法,該方法將虛擬機(jī)中的虛擬中央處理單元(VCPU)的執(zhí)行劃分為多個執(zhí)行塊,每個執(zhí)行塊的執(zhí)行過程包括記錄階段和重演階段,記錄階段包括執(zhí)行前記錄當(dāng)前虛擬中央處理單元的狀態(tài)、執(zhí)行過程中記錄操作和執(zhí)行結(jié)束后記錄操作;重演階段包括獲得當(dāng)前執(zhí)行塊的執(zhí)行窗口、在虛擬機(jī)退出的位置設(shè)置斷點(diǎn)并進(jìn)入虛擬機(jī)、在斷點(diǎn)處處理中斷和非確定性事件的插入等操作。本發(fā)明在現(xiàn)有多核CPU(中央處理單元)架構(gòu)下,可解決多核虛擬機(jī)內(nèi)存訪問的隨機(jī)性問題,加快多核虛擬機(jī)確定性重演的記錄速度,同時大大降低記錄日志文件的大小。
【專利說明】
一種多核虛擬機(jī)確定性重演的方法
技術(shù)領(lǐng)域
[0001]本發(fā)明屬于計算機(jī)軟件技術(shù)領(lǐng)域,涉及計算機(jī)操作系統(tǒng)與軟件系統(tǒng)設(shè)計,尤其涉及一種多核虛擬機(jī)確定性重演的方法。
【背景技術(shù)】
[0002]虛擬化技術(shù)是一種將物理硬件進(jìn)行虛擬的抽象和隔離,使得計算在虛擬的環(huán)境上運(yùn)行的一種技術(shù)。虛擬機(jī)指的是將CPU (中央處理單元)、內(nèi)存、輸入輸出設(shè)備的虛擬抽象聚合起來,在這個完全隔離環(huán)境中運(yùn)行的完整計算機(jī)系統(tǒng)。虛擬機(jī)技術(shù)能夠在較少的犧牲性能的前提下提供良好的隔離型和可控性,使其能夠廣泛應(yīng)用在大規(guī)模計算、入侵檢測、程序調(diào)試、高可用性等多個領(lǐng)域。虛擬機(jī)技術(shù)已經(jīng)成為目前云計算、信息安全等領(lǐng)域最為基礎(chǔ)和重要的技術(shù)之一。
[0003]虛擬機(jī)確定性重演指的是通過某種技術(shù)手段使得虛擬機(jī)在兩次執(zhí)行過程中能夠執(zhí)行完全相同的指令序列,從而獲得完全相同的執(zhí)行結(jié)果。該技術(shù)在多核程序調(diào)試、入侵分析等領(lǐng)域有著廣泛和深入的應(yīng)用。虛擬機(jī)確定性重演目前常用的技術(shù)一般分為兩個部分:a)記錄虛擬機(jī)在運(yùn)行時刻所有非確定性的事件內(nèi)容及發(fā)生位置,包括讀取TSC (Time StampCounter,時間戳計數(shù)器)、1/0(輸入輸出)操作、軟/硬中斷等;b)在虛擬機(jī)的另一次執(zhí)行中,在記錄的位置插入完全同樣的非確定性事件。由于虛擬機(jī)的其它執(zhí)行流程中所執(zhí)行的指令都是確定性的,因此該技術(shù)能夠滿足虛擬機(jī)的兩次執(zhí)行能夠活的完全相同的執(zhí)行結(jié)果O
[0004]然而目前的虛擬機(jī)確定性重演技術(shù)在多核環(huán)境下遇到了巨大挑戰(zhàn)。當(dāng)前的主流的多核CPU(中央處理單元)架構(gòu)中不同的核對相同的內(nèi)存訪問并不會保證訪問順序的一致性,即在虛擬機(jī)的兩次執(zhí)行過程中,即使在指定位置插入相同的非確定性事件,兩個核對某內(nèi)存的訪問順序也有可能不同,從而使虛擬機(jī)兩次執(zhí)行的最終結(jié)果有所不同。目前有一些簡單的系統(tǒng)能夠用來解決這個問題,然而這些系統(tǒng)均在某些方面有著重大缺陷,包括但不限于以下幾方面:
[0005]—、記錄內(nèi)存訪問的日志過大,在雙核環(huán)境下最少需要40GB/天的日志;
[0006]二、無法使用硬件虛擬化支持導(dǎo)致性能較差,相比于在物理環(huán)境執(zhí)行慢40倍以上;
[0007]三、不能支持虛擬機(jī)全系統(tǒng)的確定性重演,只能支持對某個進(jìn)程的確定性重演;
[0008]四、不能支持精確的確定性重演,重演的結(jié)果可能存在一定的誤差。

【發(fā)明內(nèi)容】

[0009]為了克服上述現(xiàn)有技術(shù)的不足,本發(fā)明提供一種多核虛擬機(jī)確定性重演的方法,在現(xiàn)有多核CPU(中央處理單元)架構(gòu)下,針對多核內(nèi)存訪問順序隨機(jī)性問題,該方法能夠記錄不確定性事件,實現(xiàn)確定性重演,且記錄的日志文件很小,是一種高效的多核確定性軟件重演的新的虛擬機(jī)執(zhí)行系統(tǒng)設(shè)計方法。
[0010]為了便于說明,本文約定:采用“ VCPU ”表示虛擬機(jī)中的虛擬中央處理單元。
[0011]本發(fā)明的原理是:將VCPU的指令執(zhí)行序列人為劃分為多個執(zhí)行塊,一般每個執(zhí)行塊的大小為I萬到10萬條CPU指令;在記錄階段每個執(zhí)行塊執(zhí)行之前,記錄當(dāng)前VCPU的相關(guān)狀態(tài);在每個執(zhí)行塊執(zhí)行期間,記錄所有的不確定性事件,并記錄所有讀寫訪問的內(nèi)存頁面,并且使用寫時復(fù)制技術(shù)將所有寫的內(nèi)存頁面寫到獨(dú)立的區(qū)域中;在每個執(zhí)行塊執(zhí)行結(jié)束后,通過判斷該塊執(zhí)行過程中讀寫的內(nèi)存頁面是否與其他VCPU寫的內(nèi)存頁面存在沖突,如果存在沖突則回滾該執(zhí)行塊,恢復(fù)執(zhí)行塊執(zhí)行前的VCPU狀態(tài),重新執(zhí)行該執(zhí)行塊,如果不存在沖突則提交該執(zhí)行塊,記錄該執(zhí)行塊的執(zhí)行次序約束,將執(zhí)行過程中寫的內(nèi)存頁面復(fù)制回原地址空間,并將該執(zhí)行塊寫的內(nèi)存頁面擴(kuò)散到其他VCPU,以便其他VCPU進(jìn)行沖突檢測。在重演階段,執(zhí)行塊嚴(yán)格按照記錄階段的大小劃分;在記錄階段對應(yīng)的VCPU上執(zhí)行,執(zhí)行順序需要滿足執(zhí)行窗口的序號約定;在記錄階段對應(yīng)位置插入相同的不確定性事件,從而得到完全相同的執(zhí)行過程和執(zhí)行結(jié)果。
[0012]本發(fā)明提供的技術(shù)方案是:
[0013]—種多核虛擬機(jī)確定性重演的方法,將虛擬機(jī)中的虛擬中央處理單元(VCPU)的執(zhí)行劃分為多個執(zhí)行塊,每個執(zhí)行塊的執(zhí)行過程包括記錄階段和重演階段,具體包括如下步驟:
[0014]對于記錄階段:
[0015]A.在每個執(zhí)行塊執(zhí)行之前,記錄當(dāng)前VCPU的狀態(tài),執(zhí)行如下操作:
[0016]Al.記錄VCPU的寄存器狀態(tài);
[0017]A2.導(dǎo)出并記錄VCPU的FPU (浮點(diǎn)計算單元)相關(guān)寄存器狀態(tài);
[0018]A3.記錄VCPU的I/O APIC(輸入輸出高級可編程中斷控制器)狀態(tài);
[0019]A4.記錄VCPU相關(guān)MSR (機(jī)器狀態(tài)寄存器)狀態(tài);
[0020]B.在每個執(zhí)行塊執(zhí)行期間,執(zhí)行如下操作:
[0021]B1.記錄外部中斷;
[0022]B2.記錄非確定性事件,如RDTSC (Read Time Stamp Counter,讀時間戳計數(shù)器)指令、生成隨機(jī)數(shù)指令、輸入輸出指令和虛擬機(jī)控制指令;
[0023]B3.通過寫時復(fù)制方法處理VCPU寫的內(nèi)存頁面;
[0024]B4.記錄VCPU在該執(zhí)行塊中讀和寫的內(nèi)存頁面;
[0025]C.在每個執(zhí)行塊執(zhí)行結(jié)束后,執(zhí)行如下操作:
[0026]Cl.獲得提交鎖;
[0027]C2.檢測該執(zhí)行塊與其他VCPU的執(zhí)行是否有沖突;
[0028]C3.如果存在沖突,則執(zhí)行回滾操作;
[0029]C4.如果不存在沖突,則執(zhí)行提交操作;
[0030]C5.釋放提交鎖;
[0031]對于重演階段:
[0032]D.在重演階段,對于B中對應(yīng)的每一個執(zhí)行塊,執(zhí)行如下操作:
[0033]Dl.獲得當(dāng)前執(zhí)行塊的執(zhí)行窗口 ;
[0034]D2.在虛擬機(jī)退出的位置設(shè)置斷點(diǎn),并進(jìn)入虛擬機(jī);
[0035]D3.在斷點(diǎn)處處理中斷和非確定性事件的插入;
[0036]D4.重復(fù)執(zhí)行D2?D3過程,直到該執(zhí)行塊中的全部指令執(zhí)行結(jié)束。
[0037]上述多核虛擬機(jī)確定性重演的方法中,對VCPU的執(zhí)行劃分的執(zhí)行塊執(zhí)行結(jié)束的時間點(diǎn)為以下三種中的一種:
[0038]I) VCPU需要執(zhí)行I/O (輸入輸出)指令時;
[0039]2) VCPU需要執(zhí)行麗1 (內(nèi)存映射輸入輸出)指令時;
[0040]3)VCPU已經(jīng)執(zhí)行指定條數(shù)的指令時。
[0041]針對執(zhí)行塊執(zhí)行結(jié)束的時間點(diǎn),進(jìn)一步地,當(dāng)VCPU需要執(zhí)行1/0(輸入輸出)指令時劃分執(zhí)行塊執(zhí)行結(jié)束,該劃分可以通過Intel VT技術(shù)提供的虛擬機(jī)I/O指令退出機(jī)制完成;當(dāng)VCPU需要執(zhí)行MM1 (內(nèi)存映射輸入輸出)指令時執(zhí)行塊執(zhí)行結(jié)束,該劃分可以通過Intel VT技術(shù)提供的擴(kuò)展頁表配置失效(EPT Misconfigurat1n)機(jī)制完成;當(dāng)VCPU已經(jīng)執(zhí)行指定條數(shù)的指令時執(zhí)行塊執(zhí)行結(jié)束,該劃分可以通過Intel VT技術(shù)提供的VCPU計時器(Preempt1n Timer)機(jī)制完成。
[0042]上述多核虛擬機(jī)確定性重演的方法,優(yōu)選地,可通過采用磁盤DMA(直接內(nèi)存訪問)的方法來加快虛擬機(jī)訪問磁盤的速度,從而提高系統(tǒng)的性能;具體是開啟磁盤DMA(直接內(nèi)存訪問)的支持,將磁盤DMA模塊單獨(dú)作為最高優(yōu)先級的執(zhí)行塊來處理,DMA激活期間停止其它VCPU執(zhí)行塊的提交工作。
[0043]上述多核虛擬機(jī)確定性重演的方法中,Al中的VCPU的寄存器包括通用寄存器、段寄存器和指令寄存器等。
[0044]在本發(fā)明實施例中,上述多核虛擬機(jī)確定性重演的方法用于Linux系統(tǒng);在A2中導(dǎo)出并記錄VCPU的FPU (浮點(diǎn)計算單元)相關(guān)寄存器狀態(tài)之前,需要首先導(dǎo)出FPU的狀態(tài),然后才可以記錄VCPU的FPU(浮點(diǎn)計算單元)相關(guān)寄存器狀態(tài)。在A4中記錄VCPU相關(guān)MSR (機(jī)器狀態(tài)寄存器)狀態(tài),具體通過Intel VT的MSR保存/恢復(fù)方法來實現(xiàn)。
[0045]上述多核虛擬機(jī)確定性重演的方法中,在BI中記錄的外部中斷包括中斷號和響應(yīng)中斷的VCPU號,將外部中斷按照其觸發(fā)的順序存儲,并記錄該中斷發(fā)生時的VCPU執(zhí)行位置;VCPU的執(zhí)行位置包括下述三元組:指令寄存器、轉(zhuǎn)移指令寄存器和RCX寄存器。
[0046]上述多核虛擬機(jī)確定性重演的方法中,優(yōu)選地,在B3處理寫時復(fù)制頁面時,提前對該頁面進(jìn)行沖突檢測,如果該頁面與其他VCPU在該執(zhí)行塊執(zhí)行過程中提交的頁面有沖突,則在該位置提前截斷該執(zhí)行塊,即進(jìn)入步驟C執(zhí)行塊結(jié)束之后的提交操作。該提前檢測方法能夠在已經(jīng)確定產(chǎn)生沖突的情況下,提前提交以避免該沖突的產(chǎn)生,能夠有效降低沖突執(zhí)行塊的比例,從而減少執(zhí)行塊的回滾。
[0047]在B4中記錄VCPU在該執(zhí)行塊中讀和寫的內(nèi)存頁面,該內(nèi)存頁面記錄以位圖方式進(jìn)行存儲:將寫過的頁面存儲在“寫位圖”中,將讀寫的頁面存儲在“讀寫位圖”中。優(yōu)選地,在B4中,可以通過Intel VT提供的擴(kuò)展頁表硬件輔助方法來完成對讀寫頁面的記錄;在開啟擴(kuò)展頁表硬件輔助技術(shù)后,可以在執(zhí)行塊執(zhí)行結(jié)束后完成掃描擴(kuò)展頁表(EPT)的Access (訪問)位和Dirty (寫臟)位來獲得該執(zhí)行塊中VCPU對內(nèi)存的讀寫情況。
[0048]在C3中,執(zhí)行回滾操作過程具體如下:
[0049]a.銷毀C2階段寫時復(fù)制的頁面;
[0050]b.恢復(fù)VCPU的EPT (擴(kuò)展頁表)使其指向原頁面;
[0051]c.恢復(fù)BI?B4階段記錄的VCPU狀態(tài);
[0052]d.插入Cl階段記錄的所有中斷;
[0053]在C4中,執(zhí)行提交操作過程如下:
[0054]a.將C2階段寫時復(fù)制的頁面內(nèi)容拷貝回原頁面;
[0055]b.恢復(fù)VCPU的EPT (擴(kuò)展頁表)使其指向原頁面;
[0056]c.銷毀C2階段寫時復(fù)制的頁面;
[0057]d.將C1、C2階段記錄的信息保存在日志文件中;
[0058]e.獲得唯一的提交序號,將當(dāng)前執(zhí)行塊的執(zhí)行約束和VCPU的執(zhí)行位置三元組保存在日志文件中;執(zhí)行塊的執(zhí)行約束指該執(zhí)行塊需要在哪個執(zhí)行塊之后被執(zhí)行;
[0059]上述C4(b)中,優(yōu)選地,可以延遲恢復(fù)寫時復(fù)制的頁面對應(yīng)的頁表內(nèi)容,在之后有需要的時候(如其他VCPU訪問該頁面等)再恢復(fù)對應(yīng)頁表。根據(jù)局部性原理,該技術(shù)能夠減少在下一個執(zhí)行塊中寫時復(fù)制頁面的數(shù)量,從而提高系統(tǒng)的性能。
[0060]上述在Dl中獲得當(dāng)前執(zhí)行塊的執(zhí)行窗口,具體通過檢查系統(tǒng)為當(dāng)前VCPU維護(hù)的執(zhí)行序號是否大于等于當(dāng)前執(zhí)行塊的執(zhí)行序號,如果是,則將系統(tǒng)中每個VCPU的執(zhí)行序號加1,并獲得執(zhí)行窗口 ;否則,輪詢等待系統(tǒng)的執(zhí)行序號,直到其滿足上述檢查條件。
[0061]在本發(fā)明實施例中,D2設(shè)置斷點(diǎn)采用的是單步執(zhí)行方法,即單步執(zhí)行每一條虛擬機(jī)指令,直到執(zhí)行到斷點(diǎn)位置。
[0062]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
[0063]本發(fā)明提供一種多核虛擬機(jī)確定性重演的方法,在現(xiàn)有多核CPU(中央處理單元)架構(gòu)下,針對多核內(nèi)存訪問順序隨機(jī)性問題,通過本發(fā)明提供的技術(shù)方案,可以解決多核虛擬機(jī)內(nèi)存訪問的隨機(jī)性問題,加快多核虛擬機(jī)確定性重演的記錄速度,同時能夠大大降低記錄日志文件的大小,并且能夠以不慢于記錄的速度進(jìn)行重演操作。
【附圖說明】
[0064]圖1是本發(fā)明在記錄階段的流程框圖。
[0065]圖2是本發(fā)明在重演階段的流程框圖。
[0066]圖3是本發(fā)明實施例一兩個VCPU虛擬機(jī)系統(tǒng)中的記錄階段的一段指令運(yùn)行片段;
[0067]圖4是本發(fā)明實施例二兩個VCPU虛擬機(jī)系統(tǒng)中的重演階段的一個執(zhí)行片段;
[0068]圖3?圖4中,兩個VCPU名稱分別為VCPU O和VCPU I ;虛線框表示執(zhí)行塊的邊界。
【具體實施方式】
[0069]下面結(jié)合附圖,通過實施例進(jìn)一步描述本發(fā)明,但不以任何方式限制本發(fā)明的范圍。
[0070]本發(fā)明提供一種多核虛擬機(jī)確定性重演的方法,該方法將虛擬機(jī)中的虛擬中央處理單元(VCPU)的執(zhí)行劃分為多個執(zhí)行塊,每個執(zhí)行塊的執(zhí)行過程包括記錄階段和重演階段。
[0071]在Linux系統(tǒng)上,對VCPU的執(zhí)行劃分的執(zhí)行塊,其執(zhí)行結(jié)束的時間點(diǎn)為以下三種中的一種:
[0072]I) VCPU需要執(zhí)行1/0(輸入輸出)指令時,該劃分可以通過Intel VT技術(shù)提供的虛擬機(jī)I/O指令退出機(jī)制完成;
[0073]2) VCPU需要執(zhí)行麗10(內(nèi)存映射輸入輸出)指令時,該劃分可以通過Intel VT技術(shù)提供的擴(kuò)展頁表配置失效(EPT Misconfigurat1n)機(jī)制完成;
[0074]3) VCPU已經(jīng)執(zhí)行指定條數(shù)的指令時,該劃分可以通過Intel VT技術(shù)提供的VCPU計時器(Preempt1n Timer)機(jī)制完成。
[0075]圖1是本發(fā)明在記錄階段的流程框圖。對于記錄階段,執(zhí)行如下操作:
[0076]A.在執(zhí)行塊執(zhí)行之前,記錄當(dāng)前VCPU的狀態(tài),執(zhí)行如下操作:
[0077]Al.記錄VCPU的寄存器狀態(tài),包括通用寄存器、段寄存器、指令寄存器等;
[0078]A2.導(dǎo)出并記錄VCPU的FPU(浮點(diǎn)計算單元)相關(guān)寄存器狀態(tài),由于Linux采用延遲FPU方法,所以該處需要首先導(dǎo)出FPU的狀態(tài)后才可以記錄;
[0079]A3.記錄VCPU的I/O APIC(輸入輸出高級可編程中斷控制器)狀態(tài);
[0080]A4.記錄VCPU相關(guān)MSR(機(jī)器狀態(tài)寄存器)狀態(tài),該記錄需要Intel VT的MSR保存/恢復(fù)相關(guān)技術(shù)配合操作;
[0081]B.在執(zhí)行塊執(zhí)行期間,執(zhí)行如下操作:
[0082]B1.記錄外部中斷,包括中斷號、響應(yīng)中斷的VCPU號,將中斷按照其觸發(fā)的順序存儲,并記錄該中斷發(fā)生時的VCPU執(zhí)行位置;VCPU的執(zhí)行位置由下述三個寄存器的值組成的三元組唯一確定:指令寄存器、轉(zhuǎn)移指令寄存器和RCX寄存器;
[0083]B2.記錄其他非確定性事件,如RDTSC指令、生成隨機(jī)數(shù)指令、輸入輸出指令和虛擬機(jī)控制指令,并記錄該事件發(fā)生時VCPU的執(zhí)行位置;
[0084]B3.采用寫時復(fù)制技術(shù)處理VCPU寫的頁面:即首先將寫的頁面復(fù)制到新的內(nèi)存區(qū)域,修改VCPU的EPT (擴(kuò)展頁表)指向新的內(nèi)存區(qū)域;該操作可以使得VCPU對于該頁面的所有寫操作都作用在復(fù)制出來的頁面上;
[0085]B4.記錄VCPU在該執(zhí)行塊中讀和寫的頁面;該記錄以位圖方式進(jìn)行存儲:將寫過的頁面存儲在“寫位圖”中,將讀寫的頁面存儲在“讀寫位圖”中;
[0086]C.在執(zhí)行塊執(zhí)行結(jié)束后,執(zhí)行如下操作:
[0087]Cl.獲得提交鎖,該鎖被所有VCPU共享;
[0088]C2.檢測該執(zhí)行塊與其他VCPU的執(zhí)行是否有沖突;檢測方式為:檢測“讀寫位圖”;與“沖突位圖”是否存在重疊,如果存在重疊則表示有沖突,反之則表示沒有沖突;
[0089]C3.如果存在沖突,則執(zhí)行回滾操作;回滾操作過程如下:
[0090]a.銷毀B3階段寫時復(fù)制的頁面;
[0091]b.恢復(fù)VCPU的EPT (擴(kuò)展頁表)使其指向原頁面;
[0092]c.恢復(fù)Al?A4階段記錄的VCPU狀態(tài);
[0093]d.插入BI階段記錄的所有中斷;
[0094]C4.如果不存在沖突,則執(zhí)行提交操作;提交操作過程如下:
[0095]a.將B3階段寫時復(fù)制的頁面內(nèi)容拷貝回原頁面;
[0096]b.恢復(fù)VCPU的EPT (擴(kuò)展頁表)使其指向原頁面;
[0097]c.銷毀B3階段寫時復(fù)制的頁面;
[0098]d.將B1、B2階段記錄的信息保存在日志文件中;
[0099]e.獲得唯一的提交序號,將當(dāng)前執(zhí)行塊的執(zhí)行約束和VCPU的執(zhí)行位置三元組保存在日志文件中;執(zhí)行塊的執(zhí)行約束指該執(zhí)行塊需要在哪個執(zhí)行塊之后被執(zhí)行;
[0100]C5.釋放Cl階段獲得的提交鎖;
[0101]圖2是本發(fā)明在重演階段的流程框圖。對于重演階段,包括如下操作:
[0102]D.在重演階段,對于B中對應(yīng)每一個執(zhí)行塊,執(zhí)行如下操作:
[0103]Dl.獲得當(dāng)前塊的執(zhí)行窗口 ;獲得的方式為:檢查系統(tǒng)為當(dāng)前VCPU維護(hù)的執(zhí)行序號是否大于等于當(dāng)前塊的執(zhí)行序號,如果是,則將系統(tǒng)中每個VCPU的執(zhí)行序號加1,并繼續(xù)以下操作;否則重復(fù)該檢查過程直到滿足上述檢查條件;獲得當(dāng)前塊的執(zhí)行窗口的原理是:系統(tǒng)為每個VCPU維護(hù)一個執(zhí)行序號,在某個執(zhí)行塊準(zhǔn)備執(zhí)行之前,需要檢查是否滿足“當(dāng)前VCPU的執(zhí)行序號大于等于當(dāng)前塊的執(zhí)行序號”,該條件表示當(dāng)前執(zhí)行塊進(jìn)入到了當(dāng)前VCPU的可執(zhí)行窗口中。
[0104]D2.在虛擬機(jī)退出的位置設(shè)置斷點(diǎn),并進(jìn)入虛擬機(jī);設(shè)置斷點(diǎn)采用的是單步執(zhí)行技術(shù),即單步執(zhí)行每一條虛擬機(jī)指令,直到執(zhí)行到斷點(diǎn)位置;
[0105]D3.在斷點(diǎn)處處理中斷和非確定性事件的插入;對于BI階段記錄的每個中斷和B2階段的每個非確定性事件,將中斷插入到對應(yīng)斷點(diǎn)位置;
[0106]D4.重復(fù)執(zhí)行D2?D3過程,直到該執(zhí)行塊中的全部指令執(zhí)行結(jié)束;
[0107]在具體實施過程中,可以通過如下幾個方面對系統(tǒng)的性能進(jìn)行優(yōu)化:
[0108]1.在B4階段中,可以通過Intel VT提供的擴(kuò)展頁表硬件輔助技術(shù)來完成對讀寫頁面的記錄工作;在開啟擴(kuò)展頁表硬件輔助技術(shù)后,可以在執(zhí)行塊執(zhí)行結(jié)束后完成掃描擴(kuò)展頁表(EPT)的Access (訪問)位和Dirty (寫臟)位來獲得該執(zhí)行塊中VCPU對內(nèi)存的讀寫情況。
[0109]2.可以開啟磁盤DMA(直接內(nèi)存訪問)的支持,需要將磁盤DMA模塊單獨(dú)作為最高優(yōu)先級的執(zhí)行塊來處理,DMA激活期間停止其它VCPU執(zhí)行塊的提交工作。加入DMA的支持可以加快虛擬機(jī)訪問磁盤的速度,從而提高系統(tǒng)的性能。其原理是:DMA和VCPU是同樣層面的結(jié)構(gòu),可以認(rèn)為DMA是一個特殊的VCPU,且比VCPU具有更高的優(yōu)先級,DMA的執(zhí)行是一定可以提交并反映在相應(yīng)內(nèi)存中的,所以DMA激活期間其他VCPU需要等待DMA執(zhí)行結(jié)束才可以繼續(xù)執(zhí)行。
[0110]3.延遲頁表修改方法。在C4(b)階段,延遲修改寫時復(fù)制的頁面對應(yīng)的頁表內(nèi)容,在之后有需要的時候(如其他VCPU訪問該頁面等)再修改對應(yīng)頁表。根據(jù)局部性原理,該技術(shù)能夠減少在下一個執(zhí)行塊中寫時復(fù)制頁面的數(shù)量,從而提高系統(tǒng)的性能。
[0111]4.提前檢測方法。在B3階段處理寫時復(fù)制頁面時,提前對該頁面進(jìn)行沖突檢測,如果該頁面與其他VCPU在該執(zhí)行塊執(zhí)行過程中提交的頁面有沖突,則在該位置提前截斷該執(zhí)行塊,進(jìn)入提交階段(C階段)。該方法能夠在已經(jīng)確定產(chǎn)生沖突的情況下,提前提交以避免該沖突的產(chǎn)生,能夠有效降低沖突執(zhí)行塊的比例,從而減少執(zhí)行塊的回滾。
[0112]下面通過實施例對本發(fā)明做具體說明。
[0113]實施例一:
[0114]本實施例在一個擁有兩個VCPU的虛擬機(jī)系統(tǒng)中使用本發(fā)明的確定性重演方法,以下描述的是在記錄階段的一個執(zhí)行片段。兩個VCPU分別命名為VCPU O和VCPU I;圖3描述了該虛擬機(jī)系統(tǒng)兩個VCPU的一段可能的指令運(yùn)行片段,其中VCPU O和VCPU I下面對應(yīng)的是其指令執(zhí)行情況,虛線框表示執(zhí)行塊的邊界;該片段的執(zhí)行情況如下:
[0115]I) VCPU O與VCPU I在運(yùn)行執(zhí)行塊之前需要首先記錄VCPU的狀態(tài);
[0116]2)在VCPU O與VCPU I的執(zhí)行過程中,二者分別寫了內(nèi)存頁面A,這兩次寫操作分別觸發(fā)了寫時復(fù)制技術(shù),二次寫操作的內(nèi)容都被寫入到了 VCPU私有的頁面中;
[0117]3) VCPU O和VCPU I執(zhí)行過程中,需要記錄所有的外部中斷(外部中斷I和外部中斷2);
[0118]4) VCPU O首先結(jié)束執(zhí)行塊,檢測沖突;由于此時沒有其他執(zhí)行塊提交,不存在沖突,提交該執(zhí)行塊,將執(zhí)行過程中復(fù)制的頁面A寫回到公共內(nèi)存中;VCPU O開始下一個執(zhí)行塊的執(zhí)行;將VCPU O寫的頁面(頁面A)擴(kuò)散給VCPU I ;
[0119]5) VCPU I隨后結(jié)束執(zhí)行塊,檢測沖突;由于VCPU O剛剛寫過內(nèi)存頁面A,與VCPUI在該執(zhí)行塊中寫的內(nèi)存頁面A沖突,則VCPU I該執(zhí)行塊需要回滾;回滾需要如下三個操作:
[0120]a.摧毀VCPU I上一個執(zhí)行塊寫時復(fù)制的頁面I ;
[0121]b.恢復(fù)執(zhí)行塊執(zhí)行之前記錄的VCPU狀態(tài);
[0122]c.重新插入外部中斷2;
[0123]6)隨后VCPU I重新運(yùn)行該執(zhí)行塊,并寫時復(fù)制內(nèi)存頁面A ;此次執(zhí)行與VCPU O的執(zhí)行沒有沖突,可以提交;
[0124]7)該運(yùn)行片段結(jié)束,VCPU O與VCPU I繼續(xù)運(yùn)行其后的執(zhí)行塊。
[0125]實施例二:
[0126]本實施例在一個擁有兩個VCPU的虛擬機(jī)系統(tǒng)中使用本發(fā)明的確定性重演系統(tǒng),以下描述的是在重演階段的一個執(zhí)行片段,見圖4所示。兩個VCPU分別命名為VCPU O和VCPU I ;虛線框表示執(zhí)行塊的邊界;該片段的執(zhí)行情況如下:
[0127]DVCPU O首先等待滿足執(zhí)行約束,其首先滿足執(zhí)行約束并運(yùn)行執(zhí)行塊I ;
[0128]2)在執(zhí)行塊I運(yùn)行過程中需要在適當(dāng)位置退出虛擬機(jī)執(zhí)行,并插入外部中斷等異步事件;
[0129]3) VCPU I中執(zhí)行塊2的執(zhí)行約束需要滿足在執(zhí)行塊I結(jié)束之后,所以VCPU I需要等待知道VCPU O的執(zhí)行塊I執(zhí)行結(jié)束才能夠開始執(zhí)行塊2的運(yùn)行;
[0130]4)執(zhí)行塊I執(zhí)行結(jié)束后,VCPU O檢測執(zhí)行塊3的執(zhí)行約束,其滿足執(zhí)行約束,即可與執(zhí)行塊2并行執(zhí)行;
[0131]5)該運(yùn)行片段結(jié)束,VCPU O與VCPU I繼續(xù)運(yùn)行其后的執(zhí)行塊。
[0132]需要注意的是,公布實施例的目的在于幫助進(jìn)一步理解本發(fā)明,但是本領(lǐng)域的技術(shù)人員可以理解:在不脫離本發(fā)明及所附權(quán)利要求的精神和范圍內(nèi),各種替換和修改都是可能的。因此,本發(fā)明不應(yīng)局限于實施例所公開的內(nèi)容,本發(fā)明要求保護(hù)的范圍以權(quán)利要求書界定的范圍為準(zhǔn)。
【主權(quán)項】
1.一種多核虛擬機(jī)確定性重演的方法,所述方法將虛擬機(jī)中的虛擬中央處理單元的執(zhí)行劃分為多個執(zhí)行塊,每個執(zhí)行塊的執(zhí)行過程包括記錄階段和重演階段,具體包括如下步驟: 對于記錄階段: A.在每個執(zhí)行塊執(zhí)行之前,記錄當(dāng)前虛擬中央處理單元的狀態(tài),執(zhí)行如下操作: Al.記錄虛擬中央處理單元的寄存器的狀態(tài); A2.導(dǎo)出并記錄虛擬中央處理單元的浮點(diǎn)計算單元相關(guān)寄存器的狀態(tài); A3.記錄虛擬中央處理單元的輸入輸出高級可編程中斷控制器的狀態(tài); A4.記錄虛擬中央處理單元相關(guān)機(jī)器狀態(tài)寄存器的狀態(tài); B.在每個執(zhí)行塊執(zhí)行期間,執(zhí)行如下操作: B1.記錄外部中斷; B2.記錄非確定性事件; B3.通過寫時復(fù)制方法處理虛擬中央處理單元寫的內(nèi)存頁面; B4.記錄虛擬中央處理單元在該執(zhí)行塊中讀和寫的內(nèi)存頁面; C.在每個執(zhí)行塊執(zhí)行結(jié)束后,執(zhí)行如下操作: Cl.獲得提交鎖; C2.檢測該執(zhí)行塊與其他虛擬中央處理單元的執(zhí)行是否有沖突; C3.如果存在沖突,則執(zhí)行回滾操作; C4.如果不存在沖突,則執(zhí)行提交操作; C5.釋放提交鎖; 對于重演階段: D.在重演階段,對于B中對應(yīng)的每一個執(zhí)行塊,執(zhí)行如下操作: Dl.獲得當(dāng)前執(zhí)行塊的執(zhí)行窗口 ; D2.在虛擬機(jī)退出的位置設(shè)置斷點(diǎn),并進(jìn)入虛擬機(jī); D3.在斷點(diǎn)處處理中斷和非確定性事件的插入; D4.重復(fù)執(zhí)行步驟D2?D3,直到該執(zhí)行塊中的全部指令執(zhí)行結(jié)束。2.如權(quán)利要求1所述多核虛擬機(jī)確定性重演的方法,其特征是,所述執(zhí)行塊執(zhí)行結(jié)束的時間點(diǎn)為以下三種中的一種: 1)虛擬中央處理單元需要執(zhí)行輸入輸出指令時; 2)虛擬中央處理單元需要執(zhí)行內(nèi)存映射輸入輸出指令時; 3)虛擬中央處理單元已經(jīng)執(zhí)行指定條數(shù)的指令時。3.如權(quán)利要求2所述多核虛擬機(jī)確定性重演的方法,其特征是,當(dāng)所述執(zhí)行塊執(zhí)行結(jié)束的時間點(diǎn)為虛擬中央處理單元需要執(zhí)行輸入輸出指令時,通過Intel VT技術(shù)提供的虛擬機(jī)輸入輸出指令退出機(jī)制完成;當(dāng)所述執(zhí)行塊執(zhí)行結(jié)束的時間點(diǎn)為虛擬中央處理單元需要執(zhí)行內(nèi)存映射輸入輸出指令時,通過Intel VT技術(shù)提供的擴(kuò)展頁表配置失效機(jī)制完成;當(dāng)所述執(zhí)行塊執(zhí)行結(jié)束的時間點(diǎn)為虛擬中央處理單元已經(jīng)執(zhí)行指定條數(shù)的指令時,通過Intel VT技術(shù)提供的虛擬中央處理單元計時器機(jī)制完成。4.如權(quán)利要求1所述多核虛擬機(jī)確定性重演的方法,其特征是,通過開啟磁盤直接內(nèi)存訪問的方法來加快虛擬機(jī)訪問磁盤的速度,使得系統(tǒng)的性能提高。5.如權(quán)利要求1所述多核虛擬機(jī)確定性重演的方法,其特征是,所述多核虛擬機(jī)確定性重演的方法用于Linux系統(tǒng),在步驟A2中所述導(dǎo)出并記錄虛擬中央處理單元的浮點(diǎn)計算單元相關(guān)寄存器狀態(tài)之前,首先導(dǎo)出浮點(diǎn)計算單元的狀態(tài)。6.如權(quán)利要求1所述多核虛擬機(jī)確定性重演的方法,其特征是,步驟A4所述記錄虛擬中央處理單元相關(guān)機(jī)器狀態(tài)寄存器的狀態(tài),具體通過Intel VT的機(jī)器狀態(tài)寄存器保存/恢復(fù)方法來實現(xiàn)。7.如權(quán)利要求1所述多核虛擬機(jī)確定性重演的方法,其特征是,步驟B3通過所述寫時復(fù)制方法處理虛擬中央處理單元寫的內(nèi)存頁面時,提前對該內(nèi)存頁面進(jìn)行沖突檢測,若確定產(chǎn)生沖突,提前提交以避免該沖突的產(chǎn)生,從而減少執(zhí)行塊的回滾。8.如權(quán)利要求1所述多核虛擬機(jī)確定性重演的方法,其特征是,步驟C3所述執(zhí)行回滾操作過程具體如下: a.銷毀C2階段寫時復(fù)制的頁面; b.恢復(fù)虛擬中央處理單元的擴(kuò)展頁表,使其指向原頁面; c.恢復(fù)BI?B4階段記錄的虛擬中央處理單元狀態(tài); d.插入Cl階段記錄的所有中斷。9.如權(quán)利要求1所述多核虛擬機(jī)確定性重演的方法,其特征是,步驟C4所述執(zhí)行提交操作過程具體如下: a.將C2階段寫時復(fù)制的頁面內(nèi)容拷貝回原頁面; b.恢復(fù)虛擬中央處理單元的擴(kuò)展頁表,使其指向原頁面; c.銷毀C2階段寫時復(fù)制的頁面; d.將C1、C2階段記錄的信息保存在日志文件中; e.獲得唯一的提交序號,將當(dāng)前執(zhí)行塊的執(zhí)行約束和虛擬中央處理單元的執(zhí)行位置保存在日志文件中。10.如權(quán)利要求9所述多核虛擬機(jī)確定性重演的方法,其特征是,步驟b延遲操作,在有其他虛擬中央處理單元訪問該頁面時,再進(jìn)行步驟b恢復(fù)相應(yīng)擴(kuò)展頁表的操作。
【文檔編號】G06F9/455GK106033368SQ201510102323
【公開日】2016年10月19日
【申請日】2015年3月9日
【發(fā)明人】李春奇, 任世儒, 譚樂, 肖臻
【申請人】北京大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
富民县| 当雄县| 和政县| 汶川县| 宣武区| 莫力| 莆田市| 卓尼县| 达孜县| 孙吴县| 红安县| 尚志市| 南川市| 页游| 大埔区| 昂仁县| 鹤峰县| 蒙山县| 松阳县| 仁布县| 喀喇沁旗| 汾西县| 隆子县| 年辖:市辖区| 科技| 益阳市| 随州市| 周宁县| 潍坊市| 芜湖市| 黑龙江省| 尚志市| 温泉县| 台东市| 石首市| 莱西市| 阆中市| 吉木萨尔县| 卢湾区| 黑龙江省| 黔西|