背景技術(shù):
現(xiàn)代計算系統(tǒng)能夠運行各種各樣的軟件應用和平臺。開發(fā)人員采用編程語言編寫這些軟件應用。例如,開發(fā)人員可以使用c、c++、objective(目標)-c或java編寫應用。然后,開發(fā)人員可以將應用編譯成處理器可以直接執(zhí)行的目標代碼或機器代碼。
在運行時,處理器可以與計算機系統(tǒng)的其他組件交互。例如,處理器可以將數(shù)據(jù)存儲在系統(tǒng)存儲器中。處理器可以訪問計算機系統(tǒng)存儲器、圖形存儲器、高速緩存存儲器或連接的存儲設備(諸如硬盤)。此外,處理器可以與各種輸入/輸出(“i/o”)設備交互。例如,鍵盤或鼠標可以提供用戶輸入,圖形監(jiān)視器可以顯示來自應用的輸出,并且網(wǎng)絡接口可以允許應用跨網(wǎng)絡發(fā)送和接收數(shù)據(jù)。
操作系統(tǒng)(諸如microsoftwindows、linux或maxosx)在基礎(chǔ)硬件上運行,從而提供用于附加應用的平臺。開發(fā)人員可以編寫在特定操作系統(tǒng)上運行的應用。應用可以利用內(nèi)置到操作系統(tǒng)中的軟件庫和功能來提供對底層硬件組件的訪問。
虛擬化技術(shù)已經(jīng)廣泛用于共享有限的計算機硬件資源。在有時也稱為平臺虛擬化環(huán)境的硬件虛擬化環(huán)境中,一個或多個虛擬機可以利用其自身的操作系統(tǒng)來模擬主機計算機。特別地,在這些虛擬機上執(zhí)行的軟件可以與底層硬件資源分離。因此,在單個主機計算機上運行的多個虛擬機可以均具有其自身的操作系統(tǒng)。例如,運行microsoftwindows操作系統(tǒng)的計算機可以主控多個虛擬機:模擬運行l(wèi)inux操作系統(tǒng)的計算機的一個虛擬機,基于其可以執(zhí)行基于linux的軟件;模擬運行osx的計算機的第二虛擬機,在其上可以執(zhí)行基于osx的軟件;以及每個均運行其自身的操作系統(tǒng)的附加虛擬機。
無論處理器是物理的還是虛擬的,處理器都可以通過遵循經(jīng)編譯的軟件應用中的每個指令來執(zhí)行計算機程序。當應用被編譯時,程序被轉(zhuǎn)換成可由特定類型的處理器讀取的指令序列。過程可以通過將指令加載到處理器中、確定該指令需要什么動作、以及采取該動作來執(zhí)行用于每個指令的指令周期。處理器可以對程序中的每個指令重復該周期,直到應用完成運行。
由處理器執(zhí)行的指令可以直接影響計算環(huán)境的其他方面。指令可以將數(shù)據(jù)寫入到存儲器。此外,程序指令可以向連接到計算機的其他設備請求數(shù)據(jù)。例如,通常稱為輸入/輸出設備或i/o設備的這些設備可以包括硬盤、鍵盤、鼠標或光驅(qū)。處理器可以將數(shù)據(jù)寫入到i/o設備并從i/o設備讀取數(shù)據(jù)。i/o設備可以通知處理器它們具有用于所述處理器的數(shù)據(jù)。該通知稱為中斷請求(“irq”)。當處理器從i/o設備接收到irq時,處理器可以中斷其當前執(zhí)行,從設備讀取數(shù)據(jù),并繼續(xù)其執(zhí)行。此外,處理器可以向i/o設備寫入數(shù)據(jù)或者發(fā)起與i/o設備的交互。處理器通常將向i/o設備請求數(shù)據(jù),等待直到i/o設備完成,然后從i/o設備讀取數(shù)據(jù)。因為與i/o設備交互有時可能比其他處理器任務花費長得多的時間,所以現(xiàn)代處理器可以使用直接存儲器訪問(“dma”)。使用dma,處理器可以發(fā)起與i/o設備的交互,可以在等待i/o設備響應的同時繼續(xù)執(zhí)行其他指令,并且可以處置來自設備的irq,從而通知處理器所述請求完成。
處理器指令的次序和結(jié)果是確定性的。使用相同的輸入數(shù)據(jù)和相同的指令,將發(fā)生相同的結(jié)果。這種確定性可以允許當執(zhí)行應用指令時可預測的結(jié)果。然而,i/o數(shù)據(jù)是非確定性的。從i/o設備的讀取或irq的結(jié)果將不總是產(chǎn)生與先前的讀取或irq相同的結(jié)果。由于它們的非確定性,i/o操作本質(zhì)上是不可預測的。當嘗試確定處理器確切執(zhí)行歷史時,這種不可預測性可能引起困難。
存在用于調(diào)查處理器的過去操作和執(zhí)行的許多實際使用。例如,開發(fā)人員通常需要重新運行部分軟件應用,以便在應用中查找和修復漏洞和錯誤。不幸的是,i/o的非確定性本質(zhì)致使能夠精確地重放應用的執(zhí)行的能力是不可能的。因為i/o操作是非確定性的,所以開發(fā)人員不能保證利用相同的輸入和i/o操作運行相同的指令將產(chǎn)生相同的錯誤或結(jié)果。即使在執(zhí)行的確定性方面保持不變的情況下,開發(fā)人員在重新運行應用時也不能保證確切相同的執(zhí)行路徑。因此,調(diào)試特定的應用故障或錯誤可能是困難和不精確的。
附圖說明
現(xiàn)在將參考示出本公開的示例性實施例的附圖。在圖中:
圖1是與本公開的實施例一致的示例性網(wǎng)絡環(huán)境的框圖。
圖2a-2b是與本公開的實施例一致的示例性計算設備的框圖。
圖3是與本公開的實施例一致的示例性虛擬化環(huán)境的框圖。
圖4a-4c是圖示與本公開的實施例一致的用于提供回滾能力的流和過程的框圖。
圖5是與本公開的實施例一致的用于存儲流信息的示例性結(jié)構(gòu)的框圖。
圖6是與本公開的實施例一致的用于生成流內(nèi)容的示例性方法的流程圖。
圖7是與本公開的實施例一致的用于使用流來回滾系統(tǒng)的示例性方法的流程圖。
具體實施方式
現(xiàn)在將詳細參考根據(jù)本公開所實現(xiàn)的示例性實施例,其示例在附圖中圖示。在可能的任何地方,遍及附圖將使用相同的附圖標記來指代相同或相似的部件。
本文描述的實施例提供了用于從先前狀態(tài)重放計算環(huán)境的執(zhí)行的技術(shù)。這些技術(shù)允許以確定性和可預測的方式重新執(zhí)行先前執(zhí)行的過程。這些技術(shù)可以在虛擬和非虛擬計算環(huán)境二者中操作。本文描述的技術(shù)可以允許以各種格式創(chuàng)建存儲器、處理器和輸入/輸出數(shù)據(jù)的流,并且可以使用存儲器數(shù)據(jù)、處理器狀態(tài)數(shù)據(jù)和i/o數(shù)據(jù)的流來從先前的時間點重放系統(tǒng)的執(zhí)行。本文描述的重放技術(shù)可以消除與調(diào)試非確定性計算環(huán)境相關(guān)聯(lián)的困難。此外,本文描述的技術(shù)可以幫助性能分析。
圖1是示例性網(wǎng)絡環(huán)境100的框圖。雖然示例性網(wǎng)絡環(huán)境100針對虛擬網(wǎng)絡環(huán)境,但是應當理解,網(wǎng)絡環(huán)境可以是使用分組進行通信的任何類型的網(wǎng)絡。網(wǎng)絡環(huán)境100可以包括一個或多個客戶端設備102a-f、公共網(wǎng)絡104、專用網(wǎng)絡110、總公司114、分公司116和數(shù)據(jù)中心120。
一個或多個客戶端設備102a-f(統(tǒng)稱為102)是可以通過各種手段從數(shù)據(jù)中心120獲取遠程服務的設備??蛻舳嗽O備102a-f可以直接(例如,客戶端設備102e)或間接地通過公共網(wǎng)絡104(例如,客戶端設備102a-d)或?qū)S镁W(wǎng)絡110(例如,客戶端設備102f)與數(shù)據(jù)中心120進行通信。在一些實施例中,總公司114和分公司116還可以包括與客戶端設備102a-f類似的一個或多個客戶端設備。總公司114可以位于例如公司的主要營業(yè)地點中。分公司116可以位于例如遠離總公司114。在一些實施例中,總公司114和分公司116的客戶端設備還可以通過例如專用網(wǎng)絡110從數(shù)據(jù)中心120獲取遠程服務。
當客戶端設備102通過公共網(wǎng)絡104或?qū)S镁W(wǎng)絡110進行通信時,可以建立通信鏈路。例如,可以由公共網(wǎng)絡104建立通信鏈路,由此提供客戶端設備(例如,客戶端設備102a-d)對數(shù)據(jù)中心120的訪問。通信鏈路也可以由專用網(wǎng)絡110建立,由此提供客戶端設備102f、總公司114和/或分公司116對數(shù)據(jù)中心120的訪問。雖然客戶端設備102a-d被描繪為計算機(例如,客戶機設備102a)、膝上型電腦(例如,客戶端設備102b)、平板電腦(例如,客戶端設備102c)和移動智能電話(例如,客戶端設備102d),但是應當理解,客戶端設備102可以是向和從數(shù)據(jù)中心120傳送分組的任何類型的設備(例如,諸如智能手表)。
公共網(wǎng)絡104和專用網(wǎng)絡110可以是諸如廣域網(wǎng)(wan)、局域網(wǎng)(lan)或城域網(wǎng)(man)之類的任何類型的網(wǎng)絡。作為示例,wan可以是互聯(lián)網(wǎng)或萬維網(wǎng),并且lan可以是企業(yè)內(nèi)聯(lián)網(wǎng)。公共網(wǎng)絡104和專用網(wǎng)絡110可以是有線網(wǎng)絡、無線網(wǎng)絡或兩者的組合。
數(shù)據(jù)中心120可以是物理或虛擬的用于存儲、管理和傳播與特定公共或?qū)S脤嶓w有關(guān)的數(shù)據(jù)和信息的中央存儲庫。數(shù)據(jù)中心120可以用于容納計算機系統(tǒng)和相關(guān)聯(lián)的組件,諸如一個或多個物理服務器、虛擬服務器和存儲系統(tǒng)。除其他事物之外,數(shù)據(jù)中心120可以包括一個或多個服務器(例如,服務器122)、桌面交付控制器124、虛擬桌面126、應用128和后端系統(tǒng)130。
服務器122可以是由ip地址表示的實體,并且可以作為單個實體或服務器場的成員而存在。服務器122可以是物理服務器或虛擬服務器。在一些實施例中,服務器122可以包括硬件層、操作系統(tǒng)、通信子系統(tǒng)以及創(chuàng)建或管理一個或多個虛擬機的管理程序。服務器122可以向端點提供一個或多個服務。這些服務可以包括向一個或多個端點(例如,客戶端設備102a-f)提供一個或多個應用128。例如,一個或多個應用128可以包括基于windowstm或saptm的應用和計算資源。經(jīng)由通信子系統(tǒng),服務器122可以通過各種類型的網(wǎng)絡(例如,專用網(wǎng)絡110和公共網(wǎng)絡104)與其他設備(例如,客戶端設備102)進行通信。
桌面交付控制器124可以是使得能夠?qū)⒅T如虛擬桌面126的服務交付到客戶端設備(例如,客戶端設備102a-f)的設備。桌面交付控制器124可以提供管理、維護和優(yōu)化所有虛擬桌面通信所需的功能。在一些實施例中,桌面交付控制器124可以控制、管理、維護或優(yōu)化應用128的供應。
在一些實施例中,一個或多個虛擬桌面126可以提供一個或多個應用128。虛擬桌面126可以包括允許多個用戶訪問單個共享式遠程桌面服務的桌面的主控共享桌面、允許每個用戶具有其自身的虛擬機、流磁盤映像、本地虛擬機、各個應用(例如,一個或多個應用128)的虛擬桌面基礎(chǔ)結(jié)構(gòu)桌面、或其組合。
后端系統(tǒng)130可以是計算機聯(lián)網(wǎng)硬件、裝置或服務器場或服務器庫中的服務器的單個或多個實例。后端系統(tǒng)130可以直接或間接地與服務器122對接。例如,后端系統(tǒng)130可以包括microsofttm活動目錄,microsofttm活動目錄可以提供多個網(wǎng)絡服務,包括輕量級目錄訪問協(xié)議(ldap)目錄服務、基于kerberos的認證、基于域名系統(tǒng)(dns)的命名和其他網(wǎng)絡信息、以及多個服務器之間的目錄更新的同步。除其他事物之外,后端系統(tǒng)130還可以包括oracle(甲骨文)后端服務器、sql服務器后端和/或動態(tài)主機配置協(xié)議(dhcp)服務器。后端系統(tǒng)130可以向數(shù)據(jù)中心120提供數(shù)據(jù)、服務或兩者的組合,數(shù)據(jù)中心120然后可以經(jīng)由變化的形式將該信息提供給客戶端設備102或分公司140。
圖2a-2b是與本公開的實施例一致的示例性客戶端設備102的框圖。如圖2a所示,每個客戶端設備102可以包括一個或多個中央處理單元(cpu)221、一個或多個圖形處理單元(gpu225)、系統(tǒng)存儲器222和圖形存儲器226。cpu221可以是響應于和處理從系統(tǒng)存儲器222取出的指令的任何邏輯電路。cpu221可以是能夠執(zhí)行存儲在存儲器(系統(tǒng)存儲器222)或高速緩存(例如,高速緩存240)中的特定指令集的單個或多個微處理器、現(xiàn)場可編程門陣列(fpga)或數(shù)字信號處理器(dsp)。cpu221還可以包含用于存儲可變類型的數(shù)據(jù)的多個處理器寄存器。例如,這些寄存器可以存儲數(shù)據(jù)、指令、浮點值、條件值和/或用于系統(tǒng)存儲器322中的位置的地址。cpu寄存器可以包括用于存儲與運行過程相關(guān)聯(lián)的數(shù)據(jù)(諸如指令指針、指令計數(shù)器和/或存儲器堆棧指針)的專用寄存器。
系統(tǒng)存儲器222可以包括有形非暫時性計算機可讀介質(zhì),諸如軟盤、硬盤、cd-rom(壓縮盤只讀存儲器)、mo(磁光)驅(qū)動器、dvd-rom(數(shù)字通用盤只讀存儲器)、dvd-ram(數(shù)字通用盤隨機存取存儲器)、處理器高速緩存、存儲器寄存器或半導體存儲器。系統(tǒng)存儲器222可以是能夠存儲數(shù)據(jù)并允許由cpu221直接訪問任何存儲位置的一個或多個存儲器芯片。系統(tǒng)存儲器222可以是能夠如本文所述那樣操作的任何類型的隨機存取存儲器(ram)或任何其他可用存儲器芯片。在圖2a所示的示例性實施例中,cpu221可以經(jīng)由系統(tǒng)接口250與系統(tǒng)存儲器222通信。
gpu225可以是任何類型的專用電路,所述任何類型的專用電路可以操縱和改變存儲器(例如,圖形存儲器226)來提供和/或加速存儲在幀緩沖器(例如,圖2b所示的幀緩沖器316)中的圖像的創(chuàng)建以用于輸出到顯示設備(例如,顯示設備224)。gpu225可以具有高度并行的結(jié)構(gòu),從而使得它們比通用cpu221更有效用于其中可以并行執(zhí)行大塊圖形數(shù)據(jù)的處理的算法。此外,gpu225的功能也可以被包括在某種其他類型的專用處理單元或協(xié)處理器中的芯片組中。
cpu221可以連接到系統(tǒng)存儲器222和系統(tǒng)接口250。cpu221可以執(zhí)行存儲在系統(tǒng)存儲器222中的編程指令,對存儲在系統(tǒng)存儲器222中的數(shù)據(jù)進行操作,并通過橋接cpu221和gpu225之間的通信的系統(tǒng)接口250與gpu225通信。在一些實施例中,cpu221、gpu225、系統(tǒng)接口250或其任何組合可以集成到單個處理單元中。gpu225可能能夠執(zhí)行存儲在系統(tǒng)存儲器222中的特定指令集,以操縱存儲在系統(tǒng)存儲器225或圖形存儲器226中的圖形數(shù)據(jù)。例如,gpu225可以接收由cpu221發(fā)送的指令并處理指令,以便渲染存儲在圖形存儲器226中的圖形數(shù)據(jù)。圖形存儲器226可以是由gpu225可訪問的任何存儲器空間,包括本地存儲器、系統(tǒng)存儲器、片上存儲器和硬盤。gpu225可以使得能夠顯示存儲在顯示設備224上的圖形存儲器226中的圖形數(shù)據(jù)。
客戶端設備102還可以包括顯示設備224和通過i/o控制器223連接的輸入/輸出(i/o)設備230(例如,鍵盤、鼠標或定點設備),這兩者經(jīng)由系統(tǒng)接口250通信。應當理解,cpu221還可以以通過系統(tǒng)接口250以外的方式(諸如通過串行通信方式或點對點通信方式)與系統(tǒng)存儲器222和其他設備進行通信。類似地,gpu225還可以以系統(tǒng)接口250以外的方式與圖形存儲器226和其他設備通信。此外,i/o設備230還可以提供用于客戶端設備102的存儲和/或安裝介質(zhì)。
圖2b描繪了示例性客戶端設備102的實施例,其中cpu221經(jīng)由存儲器端口203直接與系統(tǒng)存儲器222通信,并且類似地,gpu225直接與圖形存儲器226通信。cpu221可以經(jīng)由次級總線(有時稱為后端總線)與高速緩存240通信。在一些實施例中,cpu221可以經(jīng)由系統(tǒng)接口250與高速緩存240通信。高速緩存240通常具有比系統(tǒng)存儲器222更快的響應時間。在諸如圖2b所示的實施例的一些實施例中,cpu221可以經(jīng)由i/o端口直接與i/o設備230通信。在另外的實施例中,i/o設備230可以是系統(tǒng)接口250和外部通信總線之間的橋接器270,所述外部通信總線諸如usb總線、apple(蘋果)桌面總線、rs-232串行連接、scsi總線、firewire(火線)總線、firewire(火線)800總線、以太網(wǎng)總線、appletalk(蘋果講話)總線、千兆位以太網(wǎng)總線、異步傳輸模式總線、hippi總線、超級hippi總線、serialplus(串行+)總線、sci/lamp總線、fibrechannel(光纖信道)總線、thunderbolt(雷電)?總線或串行附接小型計算機系統(tǒng)接口總線。
如圖2b所示,gpu225還可以直接與圖形存儲器226和顯示設備224通信。gpu225可以通過系統(tǒng)接口250與cpu221和其他設備進行通信。圖形存儲器226還可以包括幀緩沖器316。幀緩沖器316可以是圖形輸出設備,所述圖形輸出設備從包含完整的圖形數(shù)據(jù)幀的圖形存儲器226的存儲器緩沖器驅(qū)動顯示設備(例如,顯示設備224)。幀緩沖器316可以存儲要顯示在顯示設備224上的最終圖形幀。
如圖2a所示,客戶端設備102可以支持任何合適的安裝設備216,諸如用于接收諸如3.5英寸、5.25英寸磁盤或zip磁盤的軟盤的軟盤驅(qū)動器;cd-rom驅(qū)動器;cd-r/rw驅(qū)動器;dvd-rom驅(qū)動器;各種格式的磁帶驅(qū)動器;usb設備;硬盤驅(qū)動器;或適于安裝軟件和程序-諸如任何客戶端代理220或其部分-的任何其他設備??蛻舳嗽O備102還可以包括存儲設備228,諸如一個或多個硬盤驅(qū)動器或獨立盤的冗余陣列,其用于存儲操作系統(tǒng)和其他相關(guān)軟件,并且用于存儲應用軟件程序,諸如與客戶端代理220相關(guān)的任何程序??蛇x地,任何安裝設備216也可以用作存儲設備228。
此外,客戶端設備102可以包括網(wǎng)絡接口218,以通過各種連接來對接到lan、wan、man或因特網(wǎng),所述各種連接包括但不限于標準電話線、lan或wan鏈路(例如,802.11、t1、t3、56kb、x.25)、寬帶連接(例如,isdn、幀中繼、atm)、無線連接或上述中的任何或全部的某種組合。網(wǎng)絡接口218可以包括內(nèi)置網(wǎng)絡適配器、網(wǎng)絡接口卡、pcmcia網(wǎng)卡、卡總線網(wǎng)絡適配器、無線網(wǎng)絡適配器、usb網(wǎng)絡適配器、調(diào)制解調(diào)器、或適于將客戶端設備102對接到能夠通信并執(zhí)行本文描述的操作的任何類型的網(wǎng)絡的任何其他設備。
圖3是示例性虛擬化環(huán)境300的框圖。在一些實施例中,虛擬化環(huán)境300可以包括計算設備(例如,客戶端設備102或服務器122)。在一些實施例中,由虛擬化環(huán)境300存儲和執(zhí)行的模塊、程序、虛擬機和命令可以由多于一個計算設備執(zhí)行。例如,虛擬化環(huán)境300可以包括服務器場。
虛擬化環(huán)境300可以包括硬件層310,硬件層310可以包括一個或多個物理盤304(例如,存儲228)、一個或多個物理設備306(例如,i/o設備230)、一個或多個物理處理器308(例如cpu221)、系統(tǒng)存儲器312(例如,系統(tǒng)存儲器222)和圖形存儲器314(例如,圖形存儲器226)。在一些實施例中,幀緩沖器316可以存儲在圖形存儲器314中的存儲器元件內(nèi),并且可以由物理處理器308中的一個或多個執(zhí)行。
物理盤304可以是內(nèi)部硬盤或外部硬盤。在一些實施例中,虛擬化環(huán)境300可以與包括在硬件層310中作為物理盤304的外部硬盤進行通信。在一些實施例中,物理設備306可以是虛擬化環(huán)境300中包括的設備和與虛擬化環(huán)境300通信的外部設備的任何組合。物理設備306可以是任何設備,諸如網(wǎng)絡接口卡218、視頻卡、i/o設備230(諸如鍵盤、鼠標)、輸入設備、揚聲器、光驅(qū)、打印機、掃描儀、顯示設備(例如,監(jiān)視器224))、存儲設備(例如,存儲228)、通用串行總線連接、連接到虛擬化環(huán)境300的任何設備、與虛擬化環(huán)境300通信的任何設備、或期望的任何其他設備。在一些實施例中,物理處理器308可以是任何處理器,并且可以包括例如cpu221和gpu225。
系統(tǒng)存儲器312可以包括可以存儲數(shù)據(jù)、程序、固件或可執(zhí)行指令集的任何類型的存儲器。存儲在系統(tǒng)存儲器312中的程序、固件或可執(zhí)行指令可以由虛擬化環(huán)境300的一個或多個物理處理器308執(zhí)行。圖形存儲器314可以是可由物理處理器308訪問的任何存儲器空間,包括本地存儲器、系統(tǒng)存儲器、片上存儲器和硬盤。物理處理器308可以在物理設備306的顯示設備上顯示與在圖形存儲器316中存儲的圖形數(shù)據(jù)對應的某些圖形。
虛擬化環(huán)境300還可以包括可以存儲在系統(tǒng)存儲器312中的存儲器元件中并由物理處理器308中的一個或多個執(zhí)行的操作系統(tǒng)318。操作系統(tǒng)318也可以被稱為內(nèi)核。此外,虛擬化環(huán)境300可以包括管理程序302。管理程序302可以是由虛擬化環(huán)境300中的物理處理器308執(zhí)行以管理任何數(shù)量的虛擬機的程序。管理程序302可以被稱為虛擬機監(jiān)視器或平臺虛擬化軟件。在一些實施例中,管理程序302可以是監(jiān)視在計算設備上執(zhí)行的虛擬機的可執(zhí)行指令和硬件的任何組合。管理程序302可以存儲在系統(tǒng)存儲器312中的存儲器元件中。
在一些實施例中,管理程序302可以向一個或多個虛擬機(例如虛擬機332a-c)提供虛擬資源。虛擬機可以是完全虛擬化的虛擬機。完全虛擬化的虛擬機可以具有用于允許執(zhí)行其軟件的訪客操作系統(tǒng)。當在主機計算機上運行時,完全虛擬化的虛擬機不知道它是虛擬機。完全虛擬化的虛擬機有時也被稱為域u或domu虛擬機(例如,虛擬機332a)。domu虛擬機可以由另一個虛擬機的控制程序來控制??刂瞥绦蛞部梢员环Q為控制操作系統(tǒng)、控制域、域0或dom0。因此,運行控制操作系統(tǒng)的虛擬機可以被稱為dom0虛擬機(例如,虛擬機332b-c)。在一些實施例中,dom0虛擬機可以直接訪問主機計算機的硬件資源,并且因此控制程序可以由主機計算機的操作系統(tǒng)執(zhí)行。dom0虛擬機可以通過管理程序可訪問主機計算機的硬件資源,所述管理程序直接運行在主機計算機的硬件上(即,裸機管理程序),或者在主機計算機的操作系統(tǒng)內(nèi)運行(即,被主控的管理程序)。在一些實施例中,虛擬機還可以是服務域虛擬機,也稱為域s或doms虛擬機(未示出)。
在一些實施例中,管理程序302可以以任何方式向訪客操作系統(tǒng)(domu)330a-b和/或控制操作系統(tǒng)(dom0)320提供虛擬資源,使得管理程序302模擬任何期望的操作系統(tǒng)(例如,windows、linux、unix)以在虛擬機332a-c上執(zhí)行。系統(tǒng)資源可以包括例如硬件層310和包括在虛擬化環(huán)境300中的任何其他組件。在這些實施例中,管理程序302可以用于模仿虛擬硬件、對物理硬件進行分區(qū)、虛擬化物理硬件、或執(zhí)行提供對計算環(huán)境的訪問的虛擬機。在一些實施例中,管理程序302可以控制用于在虛擬化環(huán)境300中執(zhí)行的虛擬機332a-c的處理器調(diào)度和存儲器分區(qū)。
在一些實施例中,管理程序302可以創(chuàng)建其中訪客操作系統(tǒng)330a-b或控制操作系統(tǒng)320分別執(zhí)行的虛擬機332a-c。作為示例,管理程序302可以加載虛擬機映像以創(chuàng)建虛擬機332。作為另一示例,管理程序302可以分別在虛擬機332b和332c內(nèi)執(zhí)行訪客操作系統(tǒng)330a和330b。訪客操作系統(tǒng)330a-b在下面進一步詳細描述。
如圖3所示,在一些實施例中,虛擬化環(huán)境300的管理程序302可以是主機管理程序或在虛擬化環(huán)境300上執(zhí)行的操作系統(tǒng)(內(nèi)核)318內(nèi)執(zhí)行的管理程序。作為主機管理程序,管理程序302可以在操作系統(tǒng)318內(nèi)執(zhí)行。并且虛擬機332a-c在管理程序302以上的級別處執(zhí)行。如果管理程序302是主機管理程序,則操作系統(tǒng)318可以被稱為主機操作系統(tǒng),而其他操作系統(tǒng)(例如,操作系統(tǒng)330a-b)可以被稱為訪客操作系統(tǒng)。訪客操作系統(tǒng)330a-b可以在虛擬機332b-c(或domu虛擬機)上執(zhí)行。
在一些實施例中,虛擬化環(huán)境300的管理程序302可以是裸機管理程序,或者可直接訪問在主機計算設備(例如,客戶端設備102)、主機計算設備上的所有資源、以及主機計算設備上的所有硬件(例如,圖3所示的硬件層)中執(zhí)行或與主機計算設備通信的所有應用和過程的管理程序。盡管主機管理程序通過主機操作系統(tǒng)(例如,操作系統(tǒng)318)訪問系統(tǒng)資源,但是裸機管理程序可以直接訪問所有系統(tǒng)資源。例如,如果管理程序302是裸機管理程序,則它可以直接在一個或多個物理處理器308上執(zhí)行,并且可以包括存儲在系統(tǒng)存儲器312和圖形存儲器314中的程序數(shù)據(jù)。
在采用裸機管理程序配置的虛擬化環(huán)境中,主機操作系統(tǒng)可以由一個或多個虛擬機332執(zhí)行。因此,計算設備的用戶可以將一個或多個虛擬機332指定為dom0虛擬機(例如,虛擬機332a)。該dom0虛擬機可以通過允許用戶以與用戶將經(jīng)由主機操作系統(tǒng)318與計算設備交互的基本相同的方式與計算設備進行交互來效仿主機操作系統(tǒng)。
在一些實施例中,虛擬化環(huán)境300可以主控或執(zhí)行一個或多個虛擬機332a-c。如上所述,執(zhí)行控制操作系統(tǒng)的虛擬機可以被稱為dom0虛擬機,并且訪客虛擬機可以被稱為domu虛擬機。虛擬機332可以是一組可執(zhí)行指令,所述指令當由物理處理器308執(zhí)行時效仿物理計算設備的操作,使得程序和過程可以以類似于在物理計算設備上的方式在虛擬機332上執(zhí)行。應當理解,虛擬化環(huán)境300可以主控任何數(shù)量的虛擬機332。在一些實施例中,可以諸如由管理程序302向每個虛擬機332提供可用于該虛擬機332的物理硬件、存儲器、處理器和其他系統(tǒng)資源的唯一虛擬視圖。唯一虛擬視圖可以基于例如虛擬機許可、策略引擎對一個或多個虛擬機標識符的應用、訪問虛擬機的用戶、在虛擬機上執(zhí)行的應用、由虛擬機訪問的網(wǎng)絡、或任何其他期望的標準。在一些實施例中,可以向每個虛擬機332提供可用于虛擬機332的物理硬件、存儲器、處理器和其他系統(tǒng)資源的基本類似的虛擬視圖。
如圖3所示,虛擬機332a-c可以包括一個或多個虛擬盤326a-c(統(tǒng)稱為326)。虛擬盤326可以對應于例如一個或多個物理盤或物理盤的部分(例如,物理盤304)。作為示例,可以向虛擬盤326a分配物理盤304的第一部分;可以向虛擬盤326b分配物理盤304的第二部分;并且可以向虛擬盤326c分配物理盤304的第三部分。在一些實施例中,虛擬盤326a-c中的一個或多個可以包括與物理盤的盤分區(qū)和文件系統(tǒng)類似的盤分區(qū)和文件系統(tǒng)。例如,虛擬盤326a可以包括系統(tǒng)盤,所述系統(tǒng)盤包括與虛擬機332a相關(guān)聯(lián)的盤分區(qū)和系統(tǒng)文件。在一些實施例中,可以在虛擬機之間共享系統(tǒng)盤。例如,虛擬機332b和332c可以具有相同或類似的系統(tǒng)盤。
虛擬盤326a-c的文件系統(tǒng)還可以包括文件和文件夾。例如,虛擬盤326a還可以包括用戶盤,所述用戶盤可以存儲諸如用戶文件和文件夾之類的用戶數(shù)據(jù)。存儲在用戶盤上的用戶數(shù)據(jù)也被稱為持久用戶數(shù)據(jù)。在一些實施例中,客戶端設備(例如,客戶端設備102)的虛擬機的系統(tǒng)盤和/或用戶盤可以與存儲在服務器(例如,服務器122)中的對應的盤同步。服務器和客戶端設備之間的系統(tǒng)盤和/或用戶盤的同步可以包括例如將系統(tǒng)盤更新為由服務器發(fā)布的較新版本并提供用戶盤的備份。以下進一步詳細描述同步。在一些實施例中,虛擬盤還可以包括本地盤。本地盤可以存儲與虛擬機(例如,虛擬機332b)相關(guān)聯(lián)的本地數(shù)據(jù)。本地盤還可以包括持久用戶數(shù)據(jù)。在一些實施例中,存儲在本地盤上的持久用戶數(shù)據(jù)不能與服務器同步。
可以由客戶端設備或服務器訪問、修改、更新或供應虛擬盤(例如,虛擬盤326)。作為示例,如上所述,當服務器發(fā)布新版本的系統(tǒng)盤時,服務器可以通過將新版本和當前版本之間的差異發(fā)送到客戶端設備來更新系統(tǒng)盤。此外,通過使用系統(tǒng)盤,服務器可以使得能夠?qū)崿F(xiàn)客戶端設備的桌面管理和修補。此外,客戶端設備可以通過向用戶盤寫入新數(shù)據(jù)或修改存儲在用戶盤上的已有數(shù)據(jù)來修改其用戶盤。在一些實施例中,可以將虛擬盤存儲為具有諸如vhd格式、vhdx格式、vmdk格式、qcow格式、qcow2格式、虛擬盒虛擬磁盤映像(vdi)格式、以及并行虛擬硬盤驅(qū)動器(hdd)格式或二進制格式之類的格式的虛擬盤文件。在一些實施例中,虛擬盤可以包括一個或多個扇區(qū)。扇區(qū)可以包括多個字節(jié)。例如,扇區(qū)可以具有512字節(jié)的大小。此外,在一些實施例中,一個扇區(qū)或一組扇區(qū)可以形成虛擬盤的塊。
在一些實施例中,虛擬化環(huán)境300還可以包括虛擬存儲器空間中的虛擬孔徑(未示出),所述虛擬孔徑可以是可用于虛擬機332的虛擬存儲器的虛擬視圖。虛擬孔徑可以對應于例如高速緩存、緩沖器、諸如系統(tǒng)存儲器312和圖形存儲器314的物理存儲器、諸如硬盤304的內(nèi)部或外部物理盤。作為示例,在虛擬機332a上運行的應用不需要比在系統(tǒng)存儲器312中可用的更多的存儲器的情況下;虛擬機332a的虛擬孔徑可以對應于系統(tǒng)存儲器312的一部分。作為另一示例,在由虛擬機332b執(zhí)行的應用需要比在系統(tǒng)存儲器312中可用的更多的存儲器的情況下,虛擬機332b的虛擬孔徑可以對應于系統(tǒng)存儲器312、圖形存儲器314的一個或多個部分、或甚至物理盤304的一個或多個部分。可以由管理程序302生成、提供和管理虛擬孔徑。
虛擬處理器328a-c(統(tǒng)稱為328)可以是虛擬化環(huán)境300的一個或多個物理處理器308的虛擬化視圖。在一些實施例中,可以由管理程序302生成、提供和管理物理處理器308的虛擬化視圖。在一些實施例中,虛擬處理器328可以具有與物理處理器308的特性基本相同的特性。在一些實施例中,虛擬處理器328可以提供物理處理器308的修改視圖,使得虛擬處理器328的至少一些特性與對應的物理處理器308的特性不同。在一些實施例中,虛擬處理器328可以提供在對應的物理處理器308中不可用的附加功能或特性。例如,虛擬處理器328可以提供附加的寄存器以供管理程序302或虛擬機332使用。
在圖3中,控制操作系統(tǒng)320可以執(zhí)行至少一個應用以用于管理和配置在虛擬機332上執(zhí)行的訪客操作系統(tǒng)(domu330,例如,domu-1330a和domu-2330b)。在一些實施例中,控制操作系統(tǒng)320可以被稱為控制域320、域0320或dom0320。雖然圖3示出了控制操作系統(tǒng)320被包括在虛擬機332a中,但是控制操作系統(tǒng)320可以在任何控制虛擬機或任何dom0虛擬機內(nèi)執(zhí)行,可以由管理程序302執(zhí)行,或者可以由執(zhí)行管理程序302的操作系統(tǒng)318執(zhí)行??刂撇僮飨到y(tǒng)320可以執(zhí)行管理應用或程序,管理應用或程序可以進一步顯示用戶界面,管理員可以使用該界面來訪問每個虛擬機332的功能和/或管理每個虛擬機332。在一些實施例中,由管理程序生成的用戶界面可以用于終止虛擬機332的執(zhí)行,向虛擬機332分配資源,向虛擬機332分配權(quán)限、或者管理與虛擬機332相關(guān)聯(lián)的安全憑證。
此外,在一些實施例中,控制操作系統(tǒng)320可以啟動新的虛擬機332或終止虛擬機332的執(zhí)行??刂撇僮飨到y(tǒng)320還可以直接訪問硬件層310內(nèi)的硬件和/或資源。在一些實施例中,控制操作系統(tǒng)320可以與在虛擬機332的上下文內(nèi)執(zhí)行的程序和應用對接。控制操作系統(tǒng)320還可以與虛擬化環(huán)境300中的計算設備上執(zhí)行的程序和應用對接,所述程序和應用處于虛擬機332的上下文之外。
此外,在一些實施例中,控制操作系統(tǒng)320還可以與一個或多個訪客操作系統(tǒng)330交互??刂撇僮飨到y(tǒng)320可以通過管理程序302與訪客操作系統(tǒng)330通信。作為示例,訪客操作系統(tǒng)330可以經(jīng)由由管理程序302建立的通信通道(諸如經(jīng)由由管理程序302做成可用的多個共享存儲器頁面)與控制操作系統(tǒng)320通信。在一些實施例中,控制操作系統(tǒng)320還可以包括用于與由虛擬化環(huán)境300提供的聯(lián)網(wǎng)硬件直接通信的網(wǎng)絡后端驅(qū)動程序(未示出)。網(wǎng)絡后端驅(qū)動程序可以處理來自至少一個訪客操作系統(tǒng)330的至少一個虛擬機請求??刂撇僮飨到y(tǒng)320還可以包括用于與虛擬化環(huán)境300中包括的存儲元件(諸如系統(tǒng)存儲器312和圖形存儲器塊314)進行通信的塊后端驅(qū)動程序。在一些實施例中,塊后端驅(qū)動程序可以基于從訪客操作系統(tǒng)330接收到的至少一個請求來從存儲元件讀取和寫入數(shù)據(jù)。
控制操作系統(tǒng)320還可以包括工具棧324,工具棧324可以提供用于與管理程序302交互的功能。工具棧324可以包括用于向虛擬機場的管理員提供改進的管理功能的定制應用。在一些實施例中,工具棧324和控制操作系統(tǒng)320中的至少一個可以包括管理應用編程接口(api),所述管理應用編程接口(api)提供用于遠程配置和控制在虛擬化環(huán)境300中運行的虛擬機332的接口。
如圖3所示,在一些實施例中,訪客操作系統(tǒng)330可以向虛擬化環(huán)境300的用戶提供對計算環(huán)境內(nèi)的資源的訪問。這樣的資源可以包括被做成可用于虛擬化環(huán)境300的用戶的程序、應用、文件、可執(zhí)行指令代碼、桌面環(huán)境、計算環(huán)境或其他資源。在一些實施例中,資源可以經(jīng)由包括在虛擬化環(huán)境300中的常規(guī)直接安裝或經(jīng)由用于應用流傳送的方法交付的多種訪問方法被交付到虛擬化環(huán)境300。資源還可以經(jīng)由諸如通過在另一計算設備上的資源的執(zhí)行而生成并經(jīng)由表示層協(xié)議傳送到虛擬化環(huán)境300的輸出數(shù)據(jù)的交付、通過從連接到虛擬化環(huán)境300的可移動存儲設備的執(zhí)行而生成的輸出數(shù)據(jù)的交付、以及通過經(jīng)由在虛擬化環(huán)境300中執(zhí)行的虛擬機的執(zhí)行而生成的輸出數(shù)據(jù)的交付之類的訪問方法而被交付到虛擬化環(huán)境300。
圖4a-4c是與本公開的實施例一致的示例性流400和示例性回滾過程的框圖。計算環(huán)境可以使用流(例如,流400)來還原到更早的處理器狀態(tài)(例如,執(zhí)行狀態(tài)401)和存儲器狀態(tài)(例如,存儲器狀態(tài)450)。在該回滾之后,處理器執(zhí)行可以從所恢復狀態(tài)的時間開始,并且流可以提供附加信息(例如,i/o數(shù)據(jù)420和irq數(shù)據(jù)421)來重放處理器執(zhí)行。在一些實施例中,管理程序(例如,管理程序302)可以控制回滾過程。應當理解,可以讀取流(例如,流400)并且控制存儲器狀態(tài)(例如,存儲器狀態(tài)450)和處理器執(zhí)行狀態(tài)(例如,執(zhí)行狀態(tài)401)的任何過程或機制可以實現(xiàn)回滾過程。例如,回滾能力可以由內(nèi)核(例如,內(nèi)核318)、裸機或主控管理程序(例如,管理程序302)或虛擬機(例如,虛擬機332)提供。
圖4a是示例性流400和執(zhí)行狀態(tài)401。流400可以包含多個條目以供所公開的實施例使用。流中的每個條目可以包含與流中的特定類型的條目相關(guān)聯(lián)的信息(例如,數(shù)據(jù))。如示例性實施例中所圖示的,流400中的條目可以包含快照數(shù)據(jù)430a-c、諸如存儲器頁面410a-d的存儲器數(shù)據(jù)、以及包括i/o請求420a-c和中斷請求(“irq”)421的i/o數(shù)據(jù)。流中的每個條目都可以包括時間戳。時間戳可以是指示在執(zhí)行歷史中何時創(chuàng)建了相關(guān)聯(lián)的條目或事件的度量。例如,時間戳可以是處理器的退出(retired)指令計數(shù)器的值。在一些實施例中,時間戳值可以由虛擬機或管理程序(例如,退出訪客指令計數(shù)器)提供。
在一些實施例中,計算環(huán)境可以使用流中的其他條目來確定用于條目的省略的時間戳。在這些實施例中,不需要確切的執(zhí)行時間而是僅需要條目維持關(guān)于流中的其他條目的相對次序的流400中的條目可以在沒有時間戳的情況下被插入到流中。在這些實施例中,當計算環(huán)境從流中讀取沒有時間戳的條目時,計算環(huán)境可以取決于所記錄條目的性質(zhì)使用先前或后續(xù)條目的時間戳來確定時間戳。例如,只要i/o寫入發(fā)生在用于同一設備的下一i/o讀取之前,則i/o寫入的確切時間可以被忽略。在該示例中,可以省略用于記錄i/o寫入的條目的時間戳。當計算環(huán)境獲取或讀取流時,計算環(huán)境可以將用于i/o寫入的時間戳確定為在與后續(xù)i/o讀取相關(guān)聯(lián)的時間戳之前時間戳發(fā)生的點。在該示例中,每個條目具有構(gòu)成的(constructive)時間戳,即使底層流可以省略某些時間戳也是如此。
流400可以存儲在存儲器(例如,系統(tǒng)存儲器322)中。存儲器可以包括有形非暫時性計算機可讀介質(zhì),諸如軟盤、硬盤、cd-rom(壓縮盤只讀存儲器)、cd-rw(壓縮盤可重寫存儲器)、mo(磁光)驅(qū)動器、dvd-rom(數(shù)字通用盤只讀存儲器)、dvd-ram(數(shù)字通用盤隨機存取存儲器)、dvd-rw(數(shù)字通用盤可重寫存儲器)、處理器高速緩存、存儲器寄存器或半導體存儲器。此外,存儲器可以被直接附接或可以被通過網(wǎng)絡(例如,nas(網(wǎng)絡附接存儲)、san(存儲區(qū)域網(wǎng)絡)、云或基于互聯(lián)網(wǎng)的存儲或附接到遠程計算設備的存儲器)訪問。應當理解,流的產(chǎn)生可以要求將流存儲在至少可寫入的介質(zhì)上,而已有流的使用要求流存儲在至少可讀的介質(zhì)上。
在一些實施例中,流400可以被分割成存儲在相同或不同介質(zhì)上的多個流。在這些實施例中,流可以基于任意確定的標準(例如數(shù)據(jù)的類型、時間戳范圍、流的大?。┻M行分割。當使用多個流時,計算環(huán)境可以在回滾和重放過程期間從所有流中讀取。下面將相對于圖5進一步描述多個流實施例的示例。
參考圖4a,流400可以包含存儲器數(shù)據(jù)(例如,存儲器頁面410a-d)。存儲器數(shù)據(jù)可以是在更新存儲器的特定區(qū)域的處理器執(zhí)行之前的存儲器的該區(qū)域的已有內(nèi)容。在一些實施例中,流包括用于保存存儲器數(shù)據(jù)的存儲器頁面410。在一些實施例中,流包括快照之后的對存儲器位置的第一更新。在這些實施例中,對相同存儲器位置的后續(xù)更新不包括在流中,直到在附加快照之后。
流400可以包含i/o數(shù)據(jù)。i/o數(shù)據(jù)可以包括與處理處置的任何i/o事務(例如,i/o讀取420、irq421或dma操作)相關(guān)的數(shù)據(jù)。i/o數(shù)據(jù)可以包含重新創(chuàng)建所記錄的i/o事務所必需的任何信息。例如,i/o讀取420條目可以包含所涉及的設備和從設備返回的值,而dma操作可以包括與傳輸?shù)陌l(fā)起和irq結(jié)果相關(guān)的信息。
流400可以包含快照數(shù)據(jù)430??煺諗?shù)據(jù)可以記錄處理器狀態(tài)(例如,執(zhí)行狀態(tài)401)。處理器狀態(tài)可以包括處理器寄存器的值、處理器計數(shù)器的值、執(zhí)行位置、存儲器表和/或定義處理器的當時已有狀態(tài)的任何其他數(shù)據(jù)。快照可以包含在過程的在前執(zhí)行期間將執(zhí)行狀態(tài)401返回到特定點所必需的所有信息。
流400的元素可以以多種方式組織。在一些實施例中,流中的條目可以按時間順序存儲,并且回滾過程可以掃描流400的每個條目以確定條目的類型。在一些實施例中,快照(例如,快照430c)可以包括對先前快照(例如,快照430b)和/或先前存儲器條目(例如,存儲器頁面410c)的引用。存儲器條目(例如,存儲器頁面410c)可以包括對先前存儲器條目(例如,存儲器頁面410b)和/或先前快照(例如,快照430b)的引用。例如,快照430c可以包括對快照430b的流中的位置的引用。此外,例如,快照430c可以引用存儲器頁面410c,存儲器頁面410c可以引用存儲器頁面410b,并且存儲器頁面410b可以引用快照430b,以創(chuàng)建快照430c和快照430b之間的所有存儲器頁面的鏈接列表,從而提供用于遍歷流中的快照430和存儲器頁面410的機制。在一些實施例中,每個條目可以包含對先前條目或相同類型的先前條目的引用。通過使用這些引用,這些實施例可以創(chuàng)建鏈接列表,從而允許在回滾過程期間的相關(guān)流條目的高效遍歷。
執(zhí)行狀態(tài)401表示計算環(huán)境的當前執(zhí)行狀態(tài)。執(zhí)行狀態(tài)401可以包含對最近流條目(例如,快照430c)的最后條目引用402以及對當前存儲器狀態(tài)450的存儲器狀態(tài)引用403。執(zhí)行狀態(tài)401可以包括執(zhí)行用于運行過程的指令所必需的處理器狀態(tài)的各方面。例如,執(zhí)行狀態(tài)401可以包括各種cpu寄存器的當前值。當處理器開始執(zhí)行時,執(zhí)行指令的結(jié)果可以更新執(zhí)行狀態(tài)。執(zhí)行狀態(tài)可以表示物理cpu和虛擬cpu兩者的處理器狀態(tài)。在一些實施例中,執(zhí)行狀態(tài)401可以包含關(guān)于處理器狀態(tài)的子集的信息,但信息的該子集可能足以執(zhí)行運行過程。
圖4b是示例性流400和存儲器狀態(tài)450的示例性回滾的圖。在開始回滾之前,計算環(huán)境必須選擇快照430以用作回滾點??煺者x擇可以任意或系統(tǒng)地作出。在一些實施例中,計算環(huán)境的操作者可以手動確定用于回滾的快照430。在一些實施例中,系統(tǒng)或用戶可以選擇用于回滾的最近快照(例如,流400中的快照430c)。在一些實施例中,計算環(huán)境可以基于可外部定義的標準或算法來系統(tǒng)地決定系統(tǒng)應當使用哪個快照。例如,計算環(huán)境可以默認為最近快照,基于預定時間段的快照或基于配置設置的快照。一旦被選擇,計算環(huán)境可以在存儲器和執(zhí)行狀態(tài)回滾期間使用該快照。
如圖4a所示,執(zhí)行狀態(tài)401可以包含對流中的最近快照或存儲器條目(例如,快照430c)的最后條目引用402和對所選快照(例如,快照430b)的回滾快照引用404。以快照430c開始,回滾過程可以遵循包含在流400條目中的向后引用(406)??煺?30c可以引用存儲器頁面410c。當通過回滾過程到達存儲器頁面410c時,可以將存儲器頁面加載到當前存儲器狀態(tài)450中?;貪L過程可以然后遵循存儲器頁面410c向存儲器頁面410b的反向引用?;貪L過程可以將存儲器頁面410b加載到當前存儲器狀態(tài)中,并且繼續(xù)遵循對430b的向后引用。因為快照430b是期望的快照,所以回滾過程可以停止遵循進一步的引用。在一些實施例中,在到達期望的快照之前,回滾過程將跨存儲器頁面和快照的多個實例而繼續(xù)。通過在初始存儲器狀態(tài)450和快照430b之間加載每個記錄的存儲器頁面,回滾過程可以用存儲在流中的值替換存儲器狀態(tài)450的值。該過程導致存儲器復原405。存儲器復原405表示存儲器狀態(tài)450復原到先前的存儲器狀態(tài)460。存儲器狀態(tài)460然后可以表示當其在快照430b的時間處存在時的存儲器狀態(tài)。應當理解,普通技術(shù)人員將認識到用于定位流中的存儲器條目的附加實施例。這些附加實施例與基于存儲在流(例如,流400)中的存儲器數(shù)據(jù)將當前存儲器狀態(tài)(例如,存儲器狀態(tài)450)還原到先前存儲器狀態(tài)(例如,先前存儲器狀態(tài)460)的本公開一致。
圖4c是示例性流400以及i/o操作的執(zhí)行狀態(tài)和重放的示例性加載的圖。回滾過程可以將執(zhí)行狀態(tài)401重置為在快照430b的時間處存在的相同狀態(tài)。計算環(huán)境可以讀取快照數(shù)據(jù)(例如,存儲在快照430b中的寄存器值、指令和/或存儲器引用),并將該數(shù)據(jù)加載(404)到執(zhí)行狀態(tài)401中。通過將快照430b的值加載到執(zhí)行狀態(tài)401中,計算環(huán)境可以在執(zhí)行狀態(tài)401中重新創(chuàng)建在快照430b的時間處存在的狀態(tài)。
在一些實施例中,執(zhí)行狀態(tài)401可以在存儲器被還原到先前存儲器狀態(tài)460之前被還原到快照430b中的值。在一些實施例中,向先前存儲器狀態(tài)460的存儲器復原可以在執(zhí)行狀態(tài)401向快照430b中的值的復原之前。在存儲器和執(zhí)行狀態(tài)復原后,可以重新啟動執(zhí)行周期。當運行過程執(zhí)行時,計算環(huán)境可以攔截由執(zhí)行過程所作出的所有i/o請求,并且可以用記錄在流400中的i/o數(shù)據(jù)替換結(jié)果得到的事件。計算環(huán)境可以監(jiān)視與運行過程相關(guān)聯(lián)的時間戳和流400中的i/o事件的時間戳。當由執(zhí)行過程達到流400中的i/o事件(例如,事件420b、421和420c)的時間戳時,計算環(huán)境可以提供來自流的相關(guān)聯(lián)的i/o事件。
隨著運行過程執(zhí)行,執(zhí)行狀態(tài)401的時間戳可以從快照430b的原始時間戳向前前進(420),從而到達存儲在流400中的i/o事件。例如,當執(zhí)行狀態(tài)401的時間戳到達i/o事件420b的時間戳時,計算環(huán)境可以從流中讀取i/o事件420b并將其提供給執(zhí)行處理器(例如,執(zhí)行狀態(tài)401)。處理器可以繼續(xù)執(zhí)行指令,并且當執(zhí)行狀態(tài)401的時間戳達到irq421的時間戳時,計算環(huán)境可以將irq421從流400提供給執(zhí)行過程。該循環(huán)可以繼續(xù)在事件最初發(fā)生的確切點處將存儲在流400中的所有i/o事件(例如,事件420b、421和420c)提供給執(zhí)行過程。該過程可以繼續(xù)運行直到(例如,由用戶或程序錯誤)中斷或者直到流400中的所有i/o事件已經(jīng)被提供給執(zhí)行過程。通過提供整個執(zhí)行歷史的確定性重放,計算環(huán)境可以允許過去處理器執(zhí)行的確定性重放。該能力可以具有各種應用。例如,用戶可以重放過去過程執(zhí)行來調(diào)查過程中的漏洞,或者用戶可以監(jiān)視過去過程執(zhí)行來監(jiān)視各種指令或操作的性能。
圖5是由管理程序302創(chuàng)建的示例性流結(jié)構(gòu)。管理程序302可以主控虛擬機322。虛擬機322可以包含在虛擬處理器(例如,虛擬處理器328)上執(zhí)行的訪客操作系統(tǒng)(例如,訪客操作系統(tǒng)330)。管理程序302可以在虛擬機322與諸如物理處理器(例如,處理器308)或物理i/o設備(例如,物理盤304、物理設備308、系統(tǒng)存儲器312、和/或圖形存儲器314)之類的硬件組件和設備之間提供通道。管理程序可以監(jiān)視虛擬機322的活動,并且可以基于虛擬機322的活動來創(chuàng)建流510。流510a可以包含與時間戳505a相關(guān)聯(lián)的快照數(shù)據(jù)430。流510b可以包含與時間戳505b相關(guān)聯(lián)的存儲器數(shù)據(jù)410。流510c可以包含與時間戳505c相關(guān)聯(lián)的i/o數(shù)據(jù)420和irq數(shù)據(jù)421。在一些實施例中,記錄在流中的所有數(shù)據(jù)可以存在于一個流或多個流中。當在虛擬機322上發(fā)生事件時,管理程序302可以向流510寫入事件。當管理程序在流510中記錄事件時,管理程序還可以記錄時間戳505。在一些實施例中,時間戳將對應于表示由虛擬機322運行的指令的數(shù)量的處理器指令計數(shù)器。應當理解,本領(lǐng)域普通技術(shù)人員可以認識到,管理程序302可以用可以監(jiān)視與計算環(huán)境相關(guān)聯(lián)的存儲器、處理器執(zhí)行和i/o設備的任何硬件或軟件機制來替換,并且不限于諸如管理程序302的管理程序或諸如虛擬機322的虛擬機。
管理程序302可以包括重復定時器。當定時器完成時,管理程序302可以在流510a中創(chuàng)建快照430和時間戳505a,從而產(chǎn)生以規(guī)則間隔創(chuàng)建的快照430。當創(chuàng)建快照時,管理程序可以進一步將所有存儲器標記為寫時復制或只讀。在創(chuàng)建快照后,當虛擬機322嘗試向存儲器寫入時,可能發(fā)生寫時復制或只讀異常。管理程序302可以捕獲該異常,將受影響的存儲器數(shù)據(jù)410和當前時間戳505b復制到流510b中,并將存儲器位置標記為讀/寫以防止進一步的中斷。該過程可以允許計算環(huán)境高效地創(chuàng)建不包含快照之間的重復存儲器頁面或存儲器條目的流。在一些實施例中,管理程序可以將所有存儲器寫入記錄到流,而不將存儲器標記為只讀或?qū)憰r復制。
在虛擬機322作出i/o請求的任何時間,管理程序302可以監(jiān)視該請求,在流510cd中創(chuàng)建i/o數(shù)據(jù)420和時間戳505c條目。當i/o設備觸發(fā)irq時,管理程序302可以攔截irq,在流510c中創(chuàng)建irq421和時間戳505c條目,并將irq轉(zhuǎn)發(fā)到虛擬機322。通過該過程,管理程序302可以創(chuàng)建按類型分類但仍根據(jù)時間戳505按時間組織的流510。在一些實施例中,快照數(shù)據(jù)430、存儲器數(shù)據(jù)410、i/o數(shù)據(jù)420和irq數(shù)據(jù)421也可以包含對流中的先前條目的引用以幫助對流的稍后遍歷。
在示例性實施例中,因為在每個快照之后記錄所有存儲器改變,所以流510b可以包含在創(chuàng)建每個快照之后更新的用于相同存儲器位置的存儲器數(shù)據(jù)。但是在回滾期間,管理程序僅需要加載在期望快照之后最近存儲的特定存儲器位置的數(shù)據(jù)。用于該存儲器位置的后續(xù)條目可能變得多余,因為它們可以被恢復,然后在向期望的快照回滾期間被重寫。在一些實施例中,可以以變化的時間周期創(chuàng)建快照430條目。例如,在這些實施例中,可以每秒取得一些快照,而每100毫秒取得其他快照。在這些實施例中,每組快照可以在該特定時間周期期間將與第一改變相關(guān)聯(lián)的存儲器頁面引用到特定存儲器位置。因此,在這些實施例中,較不頻繁的快照可以在與更頻繁的快照相同的時間量上包含用于相同位置的更少存儲器數(shù)據(jù)條目。使用用于快照的這些單獨的時間周期,管理程序302可以創(chuàng)建允許更高效地遍歷快照430和存儲器數(shù)據(jù)410的層次結(jié)構(gòu)。當在這些實施例中回滾存儲器狀態(tài)時,管理程序302可以使用較不頻繁的快照引用以遍歷更長的時間段,從而導致加載更少的存儲器數(shù)據(jù)410條目,并且然后可以在接近期望的快照時切換到更頻繁的快照。在這些實施例中,快照周期的混合使用可以平衡回滾操作的效率和更頻繁地存儲快照的有用性。
圖6是與本公開的實施例一致的用于生成流內(nèi)容的示例性方法的流程圖。將容易理解,所圖示的過程可以被改變?yōu)閯h除步驟或進一步包括附加步驟。在初始步驟601之后,計算環(huán)境(例如,管理程序302)可以等待(步驟602)定時器期滿、存儲器異?;騣/o操作。在發(fā)生這些之一后,計算環(huán)境可以生成(步驟603)時間戳(例如,時間戳505)。
如果計算環(huán)境檢測到定時器期滿(步驟605),則計算環(huán)境收集(步驟610)快照數(shù)據(jù)??煺諗?shù)據(jù)(例如,快照數(shù)據(jù)430)可以是允許計算環(huán)境、處理器、虛擬處理器或其他系統(tǒng)組件執(zhí)行運行過程所必需的任何數(shù)據(jù)。例如,快照數(shù)據(jù)可以包括所有當前寄存器值、存儲器指針和/或引用計數(shù)器。在收集快照數(shù)據(jù)之后,計算環(huán)境可以將所有存儲器標記(步驟611)為寫時復制或只讀。將所有存儲器標記為寫時復制或只讀將允許計算環(huán)境捕獲方法的其他分支中的存儲器改變。在標記所有存儲器之后,計算環(huán)境可以將快照數(shù)據(jù)和生成的時間戳寫入(612)到流(例如,流400和/或流510a)。在將數(shù)據(jù)寫入到流之后,計算環(huán)境可以繼續(xù)等待(步驟602)附加事件。
如果計算機環(huán)境檢測(步驟606)到存儲器異常(例如,只讀存儲器異常或?qū)憰r復制存儲器異常)而不是定時器期滿,則計算環(huán)境可以將已有的存儲器數(shù)據(jù)和先前生成的時間戳寫入(步驟620)到流(例如,流400和/或流510b)。在添加到流之后,計算環(huán)境可以從異常中檢索(步驟621)新的存儲器數(shù)據(jù)。計算環(huán)境可以將受影響的存儲器位置標記(步驟622)為讀/寫,并且可以用來自異常的存儲器值更新(步驟623)受影響的存儲器區(qū)域。該過程允許計算環(huán)境捕獲更新存儲器的所有嘗試,記錄這些嘗試,并確保更新該存儲器區(qū)域的未來嘗試不會生成附加的存儲器異常。在更新受影響的存儲器區(qū)域之后,計算環(huán)境可以繼續(xù)等待(步驟602)附加事件。
在一些實施例中,代替將所有存儲器標記為只讀(步驟611),計算環(huán)境可以將存儲器的子集標記為在多個快照的過程上只讀。在這些實施例中,計算環(huán)境可以選擇在其之上所有存儲器可以被標記為只讀的時間段。在這些實施例中,在該時間內(nèi)的每個快照期間,存儲器的非重疊子集可以被標記為只讀,使得在時間段結(jié)束之后,所有存儲器位置可以在該時間段期間被標記為只讀至少一次。因此,在這些實施例中,用于處理存儲器改變的資源可以通過一組快照而不是每個快照來分攤。
如果計算環(huán)境既未檢測到定時器期滿(步驟605)也未檢測到存儲器異常(步驟606),則發(fā)生了i/o操作。計算環(huán)境可以將i/o操作數(shù)據(jù)和先前生成的時間戳寫入(步驟630)到流(例如,流400和/或510c)。在記錄i/o事件信息之后,計算環(huán)境可以繼續(xù)等待(步驟602)附加的事件數(shù)據(jù)。
計算環(huán)境可以遵循該過程直到被中斷。由計算環(huán)境處置的每個事件都可以添加到流中,并可以在稍后的回滾過程期間使用。應當理解,該方法中的每個分支路徑可以取決于實施例而寫入到相同的流或不同的流。還應當理解,以不同次序執(zhí)行的一些步驟將仍然導致相同的結(jié)果。
圖7是與本公開的實施例一致的用于計算環(huán)境的回滾的示例性方法的流程圖。將容易理解,所圖示的過程可以被改變?yōu)閯h除步驟或進一步包括附加步驟。在初始步驟700之后,計算環(huán)境(例如,管理程序302)可以獲取(步驟710)一個或多個數(shù)據(jù)流(例如,流400或流510a、510b和510c)。作為整體取得的流可以包括快照數(shù)據(jù)(例如,快照數(shù)據(jù)430)、存儲器數(shù)據(jù)(例如,存儲器頁面410)和i/o數(shù)據(jù)(例如,i/o數(shù)據(jù)420和/或irq數(shù)據(jù)421)。此外,一個或多個流中的每個條目可以包括一個或多個快照。在一些實施例中,時間戳是計算環(huán)境的訪客處理器的退出指令計數(shù)。
在獲取一個或多個流之后,選擇期望的快照(步驟720)??梢匀我饣蛳到y(tǒng)地確定快照的選擇。在一些實施例中,用戶將選擇要使用的快照。在一些實施例中,算法可以分析環(huán)境并選擇快照。例如,如果計算環(huán)境經(jīng)歷災難性錯誤,則用戶或系統(tǒng)可能選擇最近的快照。
在選擇快照之后,計算環(huán)境可以將計算環(huán)境的當前存儲器狀態(tài)還原(步驟730)到在快照的時間處存在的狀態(tài)。系統(tǒng)可以收集具有期望快照之后的時間戳的流中的所有存儲器數(shù)據(jù),并將存儲器的那些區(qū)域還原為存儲在流中的值。在一些實施例中,可以通過向后遵循每個存儲器頁面之間的流中的引用來實現(xiàn)復原。在用創(chuàng)建快照后更新的那些值替換當前存儲器值之后,存儲器狀態(tài)可以反映所選快照的時間處的確切存儲器狀態(tài)。
在存儲器狀態(tài)還原之后,計算環(huán)境可以重新啟動(740)快照的時間處的處理器執(zhí)行。計算環(huán)境可以從流中加載快照數(shù)據(jù),并用快照值替換當前處理器狀態(tài)中的值。在一些實施例中,所替換的值可以是快照數(shù)據(jù)中存在的所有處理器寄存器的值。通過加載存儲在快照中的處理器狀態(tài),計算環(huán)境可以高效地將處理器置于在快照的時間處存在的確切狀態(tài)中。與存儲器復原組合,處理器然后可以開始執(zhí)行指令。因為存儲器和處理器狀態(tài)二者都可以被還原,所以處理器可以從快照點以與處理器最初從該同一時刻執(zhí)行的方式確切相同的方式開始執(zhí)行。在一些實施例中,處理器寄存器之一將是用于訪客操作系統(tǒng)的退出指令計數(shù)器。測量已經(jīng)由訪客操作系統(tǒng)運行的指令的數(shù)量的該寄存器可以存儲在快照中。在這些實施例中,當從流中加載快照時,退出指令計數(shù)寄存器的值被快照中的值替換。在這些實施例中,當訪客處理器完成執(zhí)行指令時,該值以與在運行過程的原始執(zhí)行中確切相同的方式遞增。
當處理器執(zhí)行指令并與存儲器交互時,計算環(huán)境可以監(jiān)視處理器時間戳并在處理器時間戳與流中記錄的時間戳匹配時執(zhí)行(步驟750)記錄在流中的任何i/o事件。當處理器時間戳值與流中的i/o事件的時間戳匹配時,該i/o事件在處理器上執(zhí)行。i/o事件(通常為執(zhí)行流水線的非確定性方面)可以以可預測和確定性的方式執(zhí)行。
在所有i/o數(shù)據(jù)被執(zhí)行之后,計算環(huán)境可以停止(步驟760)執(zhí)行。在一些實施例中,如果重新運行過程的執(zhí)行導致系統(tǒng)錯誤,則該過程可以在流中的所有條目被使用之前退出。還應當理解,所述方法可以由用戶或某個其他事件在任何步驟處中斷,并且使用不同的快照和相同或不同的流重新起動。此外,應當理解,該過程可以使用不同或相同的流以及使用相同或不同的快照來完全重復多次。
在前面的說明書中,已經(jīng)參考可以因?qū)崿F(xiàn)而異的許多具體細節(jié)來描述實施例??梢宰龀鰧λ枋龅膶嵤├哪承┻m應和修改。根據(jù)對本文公開的本發(fā)明的說明書和實踐的考慮,其他實施例對于本領(lǐng)域技術(shù)人員來說可以是顯然的。旨在將說明書和示例視為僅示例性的。還旨在圖中所示的步驟順序僅用于說明性目的,并不旨在限于任何特定的步驟序列。因此,本領(lǐng)域技術(shù)人員可以理解,這些步驟可以以不同的次序執(zhí)行而同時實現(xiàn)相同的方法。