專利名稱:虛擬機(jī)分支和并行執(zhí)行的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及虛擬機(jī)技術(shù),尤其涉及虛擬機(jī)分支。
背景技術(shù):
分支可以指代計(jì)算機(jī)程序中在那里執(zhí)行向下沿著多條可能的路徑繼續(xù)的任何點(diǎn)。 計(jì)算機(jī)科學(xué)中存在各種類型的分支。在機(jī)器級(jí),軟件匯編語(yǔ)言指令常常包含條件跳轉(zhuǎn)。如果條件成功,則處理器將執(zhí)行跳轉(zhuǎn)所指定的位置處的代碼。如果條件失敗,則處理器將繼續(xù)執(zhí)行跳轉(zhuǎn)之后的代碼。如今很大程度上被流水線化且多核的處理器常常開始推測(cè)性地執(zhí)行分支的兩條路徑。當(dāng)執(zhí)行到達(dá)分支條件并且該條件被評(píng)估時(shí),處理器保持該分支被采用并轉(zhuǎn)儲(chǔ)清除推測(cè)性執(zhí)行另一分支的中間結(jié)果。分支還在進(jìn)程級(jí)上發(fā)生。諸如UNIX之類的操作系統(tǒng)包括應(yīng)用編程接口(API),諸如創(chuàng)建進(jìn)程副本并繼續(xù)在新的進(jìn)程中執(zhí)行的fork O。這可用于多線程或用于追求進(jìn)程的分叉的可能路徑。測(cè)試復(fù)雜的系統(tǒng)常常涉及使系統(tǒng)到達(dá)特定條件的大量設(shè)置以及然后測(cè)試系統(tǒng)對(duì)各種刺激的反應(yīng)。刺激可包括以模糊測(cè)試的形式提供各種輸入,從而操縱連接的硬件來(lái)測(cè)試系統(tǒng)的反應(yīng)等。系統(tǒng)的某些功能可產(chǎn)生實(shí)質(zhì)的狀態(tài)改變,從而難以回到先前的條件。在其他情況下,復(fù)雜的系統(tǒng)可能花費(fèi)很長(zhǎng)的時(shí)間來(lái)處理一批數(shù)據(jù),卻只發(fā)現(xiàn)該數(shù)據(jù)是不需要的, 或者要采用的分支將使得該數(shù)據(jù)變得不重要。如今分支在太低的級(jí)別上應(yīng)用以致無(wú)法在這些情形中是有幫助的。復(fù)雜系統(tǒng)的測(cè)試以及其他領(lǐng)域需要這樣的一種方法從已知狀態(tài)開始并探索多個(gè)潛在的將來(lái)狀態(tài),而不必消耗太多時(shí)間和需要費(fèi)力的設(shè)置。如今,通常測(cè)試裝置(test harness)將串行地運(yùn)行多個(gè)可能的測(cè)試遍歷(test pass),或者在更高效的情況下,可充分利用多個(gè)機(jī)器來(lái)并行地運(yùn)行測(cè)試。這可能仍然是耗時(shí)的,尤其在測(cè)試裝置需要使每一機(jī)器到達(dá)共同狀態(tài)來(lái)開始多個(gè)測(cè)試的情況下。對(duì)于復(fù)雜的狀態(tài)評(píng)估,所涉及的時(shí)間可能意味著更少的時(shí)間用于測(cè)試如軟件開發(fā)者希望的那么多的排列的系統(tǒng),且結(jié)果在軟件產(chǎn)品中有更多的錯(cuò)誤。
發(fā)明內(nèi)容
本文描述了在充分利用投入的時(shí)間來(lái)設(shè)置開始狀態(tài)的同時(shí)允許復(fù)雜狀態(tài)轉(zhuǎn)換的并行執(zhí)行的狀態(tài)分支系統(tǒng)。該系統(tǒng)通過(guò)修改系統(tǒng)管理程序來(lái)允許在虛擬機(jī)級(jí)上進(jìn)行分支來(lái)工作。通過(guò)允許在虛擬機(jī)級(jí)上進(jìn)行分支,狀態(tài)分支系統(tǒng)允許在虛擬機(jī)中設(shè)置特定條件或狀態(tài),隨后復(fù)制虛擬機(jī)的并行實(shí)例并分支到虛擬機(jī)的并行實(shí)例以探索不同的可能的后續(xù)狀態(tài)。對(duì)于更大且更復(fù)雜的評(píng)估這種解決方案頻繁出現(xiàn),尤其在機(jī)器的狀態(tài)極大地受到這些評(píng)估的影響的情況下。在檢測(cè)到或被通知具有未知結(jié)果的大的狀態(tài)改變之后,狀態(tài)分支系統(tǒng)指令系統(tǒng)管理程序?qū)⒄趫?zhí)行的虛擬機(jī)復(fù)制到一個(gè)或多個(gè)分開的虛擬機(jī)中。該系統(tǒng)隨后允許在兩個(gè)或更多個(gè)虛擬機(jī)(原始的虛擬機(jī)和副本)之間的分叉分支以探索從相似開始點(diǎn)的不同狀態(tài)。一旦執(zhí)行已經(jīng)到達(dá)了下一狀態(tài),系統(tǒng)就進(jìn)行協(xié)調(diào)以確定哪一個(gè)或哪些副本要繼續(xù)執(zhí)行。因此,狀態(tài)分支系統(tǒng)允許對(duì)實(shí)質(zhì)修改了計(jì)算機(jī)系統(tǒng)的狀態(tài)的復(fù)雜狀態(tài)改變的更快速的探索。提供本發(fā)明內(nèi)容以便以簡(jiǎn)化形式介紹將在以下的具體實(shí)施方式
中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標(biāo)識(shí)所要求保護(hù)主題的關(guān)鍵特征或必要特征,也不旨在用于限制所要求保護(hù)主題的范圍。
圖I是示出在一個(gè)實(shí)施例中的狀態(tài)分支系統(tǒng)的組件的框圖。圖2是示出在一個(gè)實(shí)施例中的狀態(tài)分支系統(tǒng)從原始虛擬機(jī)分支到一個(gè)或多個(gè)克隆虛擬機(jī)以考慮分叉狀態(tài)的處理的流程圖。圖3是示出在一個(gè)實(shí)施例中的狀態(tài)分支系統(tǒng)退出一個(gè)或多個(gè)克隆虛擬機(jī)并將執(zhí)行會(huì)聚回原始虛擬機(jī)的處理的流程圖。圖4是示出在一個(gè)實(shí)施例中的狀態(tài)分支系統(tǒng)對(duì)分支路徑的并行處理的時(shí)間線圖。
具體實(shí)施例方式本文描述了在充分利用投入的時(shí)間來(lái)設(shè)置開始狀態(tài)的同時(shí)允許復(fù)雜狀態(tài)轉(zhuǎn)換的并行執(zhí)行的狀態(tài)分支系統(tǒng)。該系統(tǒng)通過(guò)修改系統(tǒng)管理程序來(lái)允許在虛擬機(jī)級(jí)上進(jìn)行分支來(lái)工作。系統(tǒng)管理程序管理共享物理機(jī)的資源(例如,處理器、存儲(chǔ)器、盤和網(wǎng)絡(luò))的一個(gè)或多個(gè)虛擬機(jī)進(jìn)程。雖然所有的虛擬機(jī)運(yùn)行在同一物理機(jī)上,但每一虛擬機(jī)一般是不知道其他虛擬機(jī)的且是和其他虛擬機(jī)隔離的。通過(guò)允許在虛擬機(jī)級(jí)上進(jìn)行分支,狀態(tài)分支系統(tǒng)允許在虛擬機(jī)中設(shè)置特定條件或狀態(tài),隨后復(fù)制虛擬機(jī)的并行實(shí)例并分支到虛擬機(jī)的并行實(shí)例以探索不同的可能的后續(xù)狀態(tài)。對(duì)于更大且更復(fù)雜的評(píng)估這種解決方案頻繁出現(xiàn),尤其在機(jī)器的狀態(tài)極大地受到這些評(píng)估的影響的情況下。一個(gè)示例是模糊,其中能夠在虛擬機(jī)中分支整個(gè)操作系統(tǒng)允許軟件開發(fā)者極大地降低設(shè)置要模糊的下一迭代所花費(fèi)的時(shí)間并允許對(duì)要被模糊的可能的執(zhí)行路徑的更快速的探索。在檢測(cè)到或被通知具有未知結(jié)果的大的狀態(tài)改變之后,狀態(tài)分支系統(tǒng)指令系統(tǒng)管理程序?qū)⒄趫?zhí)行的虛擬機(jī)復(fù)制到一個(gè)或多個(gè)分開的虛擬機(jī)中。該系統(tǒng)隨后允許在兩個(gè)或更多個(gè)虛擬機(jī)(原始的虛擬機(jī)和副本)之間的分叉分支以探索從相似開始點(diǎn)的不同狀態(tài)。 在某些實(shí)施例中,應(yīng)用可調(diào)用系統(tǒng)管理程序以允許系統(tǒng)管理程序派生現(xiàn)有虛擬機(jī)的狀態(tài)并將一個(gè)或多個(gè)重復(fù)的副本派生到新的虛擬機(jī)中。該系統(tǒng)隨后允許各副本協(xié)調(diào)它們的判定樹從而它們不重疊。一旦執(zhí)行已經(jīng)到達(dá)了下一狀態(tài),系統(tǒng)就進(jìn)行協(xié)調(diào)以確定哪一個(gè)或哪些副本要繼續(xù)執(zhí)行。在某些情況下,系統(tǒng)可簡(jiǎn)單地分支到多個(gè)虛擬機(jī)中、探索若干狀態(tài)、隨后將結(jié)果組合回到原始虛擬機(jī)直到下一重大狀態(tài)改變重復(fù)該過(guò)程。在某些實(shí)施例中,狀態(tài)分支系統(tǒng)取決于系統(tǒng)管理程序和操作系統(tǒng)修改兩者來(lái)允許虛擬機(jī)級(jí)的分支。操作系統(tǒng)包括檢測(cè)何時(shí)需要分支的能力。這可涉及許多可能的觸發(fā),諸如第一機(jī)會(huì)異常通知、應(yīng)用請(qǐng)求、用戶模式第二機(jī)會(huì)異常等等。操作還可包括應(yīng)用的API或其他手段來(lái)指定每個(gè)分支實(shí)例應(yīng)該修改哪個(gè)判定點(diǎn)。修改系統(tǒng)管理程序以揭示允許主操作系統(tǒng)或客操作系統(tǒng)請(qǐng)求對(duì)現(xiàn)有客操作系統(tǒng)實(shí)例的復(fù)制的命令。系統(tǒng)管理程序還可凍結(jié)客操作系統(tǒng)的執(zhí)行,從而阻止來(lái)自引起客操作系統(tǒng)上的執(zhí)行的任何硬件中斷。另外,系統(tǒng)管理程序指令存儲(chǔ)器管理單元(MMU)為新的分支實(shí)例復(fù)制整個(gè)客操作存儲(chǔ)器分配。在某些情況下,系統(tǒng)可不復(fù)制所有的存儲(chǔ)器,而是只復(fù)制某些數(shù)據(jù)頁(yè)以及可能的不復(fù)制可執(zhí)行頁(yè),這取決于系統(tǒng)管理程序提供的分支支持的級(jí)別。以此方式,主操作或客操作確定何時(shí)到達(dá)了將受益于分叉路徑的并行評(píng)估的判定點(diǎn),并向系統(tǒng)管理程序和/或操作系統(tǒng)請(qǐng)求虛擬機(jī)級(jí)上的分支。因此,狀態(tài)分支系統(tǒng)允許對(duì)實(shí)質(zhì)修改了計(jì)算機(jī)系統(tǒng)的狀態(tài)的復(fù)雜狀態(tài)改變的更快速的探索。圖I是示出在一個(gè)實(shí)施例中的狀態(tài)分支系統(tǒng)的組件的框圖。系統(tǒng)100包括系統(tǒng)管理程序組件110、調(diào)度組件120、VM通信組件130、分支標(biāo)識(shí)組件140、狀態(tài)克隆組件150、VM 分支組件160、克隆協(xié)調(diào)組件170和結(jié)果處理組件180。這些組件中的每一個(gè)都在此處進(jìn)一步詳細(xì)討論。系統(tǒng)管理程序組件110在兩個(gè)或更多個(gè)虛擬計(jì)算設(shè)備之間共享物理計(jì)算設(shè)備的資源。許多數(shù)據(jù)中心現(xiàn)在使用虛擬機(jī)來(lái)允許多個(gè)生產(chǎn)應(yīng)用來(lái)在單個(gè)服務(wù)器上運(yùn)行,每個(gè)應(yīng)用在虛擬環(huán)境中,使得每個(gè)應(yīng)用認(rèn)為它具有對(duì)該機(jī)器的獨(dú)占使用。相反,應(yīng)用通常具有對(duì)虛擬機(jī)的獨(dú)占使用,但共享物理資源。虛擬機(jī)向應(yīng)用提供了有保證的硬件資源量,諸如中央處理單元(CPU)速度、存儲(chǔ)器大小、盤容量、網(wǎng)絡(luò)帶寬等。系統(tǒng)管理程序廣泛用于可允許多個(gè)虛擬機(jī)在同一計(jì)算機(jī)上并排運(yùn)行的商用硬件(例如,XeruHyper-V和VMWare)。系統(tǒng)管理程序復(fù)用(并且有時(shí)調(diào)度)對(duì)諸如CPU、存儲(chǔ)器、盤、網(wǎng)絡(luò)的物理資源的訪問(wèn)。系統(tǒng)管理程序提供了用于CPU和I/O資源兩者的調(diào)度程序,該調(diào)度程序能夠提供全部資源在兩個(gè)或更多個(gè)虛擬機(jī)之間的固定劃分。這可以以許多方式完成,例如使用硬實(shí)時(shí)調(diào)度算法。調(diào)度組件120提供對(duì)物理機(jī)上的資源使用的調(diào)度以及在兩個(gè)或更多個(gè)虛擬機(jī)之間的資源隔離的調(diào)度,該兩個(gè)或更多個(gè)虛擬機(jī)包括原始虛擬機(jī)和克隆虛擬機(jī)。調(diào)度組件 120可以在系統(tǒng)管理程序中操作,并且提供了虛擬機(jī)隔離,從而使得每個(gè)虛擬機(jī)可以以滿足提供給每個(gè)虛擬機(jī)的資源可用性的任意保證的方式來(lái)使用物理機(jī)的資源。例如,如果物理機(jī)具有2GHz處理器,并且,兩個(gè)虛擬機(jī)中的每一個(gè)被保證有相等的特定部分的處理器的時(shí)間,則調(diào)度組件120可以確保每個(gè)虛擬機(jī)獲得使用一半的物理機(jī)處理器時(shí)間。調(diào)度組件120 可以提供對(duì)物理機(jī)存儲(chǔ)器、盤空間、網(wǎng)絡(luò)帶寬以及其它資源的類似劃分。VM通信組件130提供兩個(gè)或更多個(gè)虛擬機(jī)之間的一個(gè)或多個(gè)通信信道。對(duì)于交叉-VM通信存在各種技術(shù),包括共享物理存儲(chǔ)器、調(diào)用系統(tǒng)管理程序的超調(diào)用、將文件存儲(chǔ)在物理盤上的公共位置等等。VM通信組件130可從原始虛擬機(jī)接收協(xié)調(diào)信息并將協(xié)調(diào)指令提供給一個(gè)或多個(gè)克隆虛擬機(jī)。協(xié)調(diào)信息可確保每一虛擬機(jī)遵循不同的分支以評(píng)估多個(gè)可能的狀態(tài)。系統(tǒng)管理程序可以管理共享通信信道,并且對(duì)虛擬機(jī)實(shí)施安全或其它限制。原始虛擬機(jī)可充分利用系統(tǒng)管理程序內(nèi)對(duì)創(chuàng)建克隆并協(xié)調(diào)這些克隆之間的活動(dòng)的支持。分支標(biāo)識(shí)組件140標(biāo)識(shí)軟件代碼的當(dāng)前狀態(tài)以及作為候選的一個(gè)或多個(gè)后續(xù)狀態(tài),以用于分支運(yùn)行該軟件代碼的原始虛擬機(jī)以評(píng)估一個(gè)或多個(gè)克隆虛擬機(jī)中的后續(xù)狀態(tài)。組件140可通過(guò)分析軟件代碼來(lái)自動(dòng)標(biāo)識(shí)可能的分支,或者可由應(yīng)用定向到要分支到的位置。分支的自動(dòng)標(biāo)識(shí)與如今的CPU相似地發(fā)生,其中分析引擎可查看即將到來(lái)的指令流中的多個(gè)步驟并標(biāo)識(shí)將實(shí)質(zhì)地變更機(jī)器的狀態(tài)的指令、函數(shù)或其他行為。手動(dòng)標(biāo)識(shí)可由軟件開發(fā)者編寫測(cè)試程序或其他應(yīng)用以請(qǐng)求在特定位置進(jìn)行分支來(lái)發(fā)生。例如,測(cè)試可設(shè)置對(duì)若干測(cè)試共同的狀態(tài),然后通知主操作系統(tǒng)以請(qǐng)求分支執(zhí)行每個(gè)測(cè)試追求的分叉路徑。
狀態(tài)克隆組件150復(fù)制來(lái)自原始虛擬機(jī)的狀態(tài)信息以創(chuàng)建具有類似狀態(tài)的一個(gè)或多個(gè)克隆虛擬機(jī)。復(fù)制可復(fù)制原始虛擬機(jī)的整個(gè)存儲(chǔ)器和其他虛擬硬件,或者可只選擇要用于探索每個(gè)克隆將追求的分叉狀態(tài)的子集。例如,測(cè)試可關(guān)閉花很長(zhǎng)時(shí)間打開的各種類型的多個(gè)操作系統(tǒng)句柄。原始虛擬機(jī)可執(zhí)行打開所有句柄的工作,而克隆虛擬機(jī)各自關(guān)閉特定類型的句柄來(lái)測(cè)試各種條件。在該示例中,每一克隆虛擬機(jī)追求獨(dú)立的狀態(tài),但可只需要與句柄有關(guān)的的狀態(tài)的一個(gè)副本,或者更一般地與在虛擬機(jī)上運(yùn)行的測(cè)試應(yīng)用有關(guān)的狀態(tài)的一個(gè)副本,而非所有狀態(tài)信息或其他應(yīng)用。VM分支組件160通過(guò)啟動(dòng)每一創(chuàng)建的克隆虛擬機(jī)并標(biāo)識(shí)每一克隆要追求的執(zhí)行的分支來(lái)執(zhí)行分支。例如,如果分支標(biāo)識(shí)組件140標(biāo)識(shí)軟件代碼中出現(xiàn)的各自得到實(shí)質(zhì)不同的狀態(tài)的5個(gè)可能的路徑,則測(cè)試應(yīng)用可引導(dǎo)狀態(tài)克隆組件150以創(chuàng)建4個(gè)克隆,其中原始虛擬機(jī)將追求這些狀態(tài)中的一個(gè)而4個(gè)克隆虛擬機(jī)將追求剩余的4個(gè)狀態(tài)。VM分支組件160通知每一克隆虛擬機(jī)它將要考慮的分支,諸如通過(guò)直接將指令指針和其他機(jī)器狀態(tài)設(shè)置為該分支周圍的位置和狀態(tài)。VM分支組件160隨后允許每一虛擬機(jī)執(zhí)行以探索分叉狀態(tài)。克隆協(xié)調(diào)組件170協(xié)調(diào)每一克隆虛擬機(jī)和原始虛擬機(jī)的動(dòng)作以允許丟棄不需要的分支或合并分支結(jié)果。執(zhí)行不同分支的目的在于找出執(zhí)行在哪里結(jié)束。在許多情況下, 軟件代碼可追求若干分支中的一個(gè),然后在共同的位置處結(jié)束但具有基于所采用的分支而得到不同的結(jié)果。因此,在分支之后的短暫時(shí)間段內(nèi)執(zhí)行分叉很大的代碼,但隨后在公共位置處進(jìn)行會(huì)聚以考慮結(jié)果是常見的??寺f(xié)調(diào)組件170允許測(cè)試或其他應(yīng)用代碼派遣多個(gè)克隆虛擬機(jī)進(jìn)行某些工作以考慮各種狀態(tài),但隨后通過(guò)考慮每一克隆虛擬機(jī)的結(jié)果并在狀態(tài)探索完成時(shí)將執(zhí)行傳送回原始虛擬機(jī)來(lái)完成周期。這與如今的CPU如何推測(cè)性地執(zhí)行若干分支然后轉(zhuǎn)儲(chǔ)清除那些最后沒有被采用的分支相類似,只是由狀態(tài)分支系統(tǒng)100在虛擬機(jī)級(jí)上在更廣大的范圍上應(yīng)用。結(jié)果處理組件180處理每一虛擬機(jī)產(chǎn)生的結(jié)果并將結(jié)果提供給克隆協(xié)調(diào)組件 170。每一虛擬機(jī)(原始的和克隆的)可產(chǎn)生各種結(jié)果,包括簡(jiǎn)單的數(shù)字或文本結(jié)果,或者諸如發(fā)生在虛擬機(jī)上的進(jìn)一步狀態(tài)改變的復(fù)雜結(jié)果。作為一個(gè)示例,反病毒程序可能想要執(zhí)行在計(jì)算設(shè)備上找到的若干所標(biāo)識(shí)的軟件代碼模塊,對(duì)計(jì)算設(shè)備掃描以尋找惡意代碼來(lái)確定這些代碼模塊是否對(duì)計(jì)算設(shè)備進(jìn)行任何破壞。反病毒程序可將每一軟件代碼模塊派生到具有原始計(jì)算設(shè)備的所有特性的克隆虛擬機(jī)中,而結(jié)果就是軟件代碼對(duì)克隆作出的任何改變。反病毒程序可掃描結(jié)果以確定是否有任何改變是有害的(例如,刪除重要的文件或發(fā)送垃圾郵件的聯(lián)系人),并且可向原始應(yīng)用提供指示是否找到有害結(jié)果的布爾結(jié)果。這允許每一克隆可能以某種方式混亂了克隆虛擬機(jī)的狀態(tài),但隨后在獲得特定結(jié)果之后被反病毒程序丟棄。作為另一示例,使用該系統(tǒng)的嵌入式設(shè)備可被設(shè)計(jì)成查驗(yàn)(Ping)網(wǎng)絡(luò)以確定它是否應(yīng)該執(zhí)行某種復(fù)雜動(dòng)作以及如何執(zhí)行。這一分支將允許該設(shè)備使用物理設(shè)備的空閑處理能力同時(shí)作出高等待時(shí)間請(qǐng)求??赡苓@涉及計(jì)算以重新校準(zhǔn)傳感器或天線陣列,且嵌入式設(shè)備可在接收到網(wǎng)絡(luò)響應(yīng)之前開始可能的計(jì)算。在其上實(shí)現(xiàn)狀態(tài)分支系統(tǒng)的計(jì)算設(shè)備可包括中央處理單元、存儲(chǔ)器、輸入設(shè)備 (例如,鍵盤和定點(diǎn)設(shè)備)、輸出設(shè)備(例如,顯示設(shè)備),以及存儲(chǔ)設(shè)備(例如,磁盤驅(qū)動(dòng)器或其他非易失性存儲(chǔ)介質(zhì))。存儲(chǔ)器和存儲(chǔ)設(shè)備是可以用實(shí)現(xiàn)或啟用該系統(tǒng)的計(jì)算機(jī)可執(zhí)行指令(例如,軟件)來(lái)編碼的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。另外,數(shù)據(jù)結(jié)構(gòu)和消息結(jié)構(gòu)可被存儲(chǔ)或經(jīng)由諸如通信鏈路上的信號(hào)等數(shù)據(jù)傳送介質(zhì)發(fā)送。可以使用各種通信鏈路,諸如因特網(wǎng)、 局域網(wǎng)、廣域網(wǎng)、點(diǎn)對(duì)點(diǎn)撥號(hào)連接、蜂窩電話網(wǎng)絡(luò)等。該系統(tǒng)的實(shí)施例可以在各種操作環(huán)境中實(shí)現(xiàn),這些操作環(huán)境包括個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持式或膝上型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程消費(fèi)電子產(chǎn)品、數(shù)碼照相機(jī)、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、包括任何上述系統(tǒng)或設(shè)備、機(jī)頂盒、片上系統(tǒng)(SOC)等中任一種的分布式計(jì)算環(huán)境等。計(jì)算機(jī)系統(tǒng)可以是蜂窩電話、個(gè)人數(shù)字助理、智能電話、個(gè)人計(jì)算機(jī)、可編程消費(fèi)電子設(shè)備、數(shù)碼相機(jī)等。該系統(tǒng)可以在由一個(gè)或多個(gè)計(jì)算機(jī)或其他設(shè)備執(zhí)行的諸如程序模塊等計(jì)算機(jī)可執(zhí)行指令的通用上下文中描述。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。通常,程序模塊的功能可在各個(gè)實(shí)施例中按需進(jìn)行組合或分布。圖2是示出在一個(gè)實(shí)施例中的狀態(tài)分支系統(tǒng)從原始虛擬機(jī)分支到一個(gè)或多個(gè)克隆虛擬機(jī)以考慮分叉狀態(tài)的處理的流程圖。在框210中開始,系統(tǒng)接收應(yīng)用代碼以供在原始虛擬機(jī)上執(zhí)行,其中該應(yīng)用代碼包括得到虛擬機(jī)的兩個(gè)或更多個(gè)可能的狀態(tài)的至少一個(gè)分支。該系統(tǒng)可接收改變機(jī)器的狀態(tài)的測(cè)試或其他應(yīng)用代碼,且分支可基于運(yùn)行時(shí)評(píng)估的條件發(fā)生。系統(tǒng)標(biāo)識(shí)實(shí)質(zhì)上變更原始虛擬機(jī)的狀態(tài)的分支,并并行地執(zhí)行一個(gè)或多個(gè)克隆虛擬機(jī)以評(píng)估該分支弓I出的路徑。在框220中繼續(xù),系統(tǒng)執(zhí)行原始虛擬機(jī),包括接收到的應(yīng)用代碼。例如,系統(tǒng)可在系統(tǒng)管理程序內(nèi)操作,并引導(dǎo)共享同一物理資源的多個(gè)虛擬機(jī)的執(zhí)行。系統(tǒng)執(zhí)行原始虛擬機(jī)直到標(biāo)識(shí)了可能顯著改變虛擬機(jī)狀態(tài)的分支。例如,分支可刪除文件、執(zhí)行長(zhǎng)的計(jì)算、創(chuàng)建大量的數(shù)據(jù)或執(zhí)行其他狀態(tài)改變操作。在框230中繼續(xù),系統(tǒng)標(biāo)識(shí)在原始虛擬機(jī)上運(yùn)行的應(yīng)用代碼中得到虛擬機(jī)的兩個(gè)或更多個(gè)可能的狀態(tài)的分支。例如,系統(tǒng)可通過(guò)使用本領(lǐng)域公知的代碼分析工具來(lái)自動(dòng)標(biāo)識(shí)分支以尋找軟件代碼中的分叉路徑。許多靜態(tài)和運(yùn)行時(shí)分析工具在二進(jìn)制代碼級(jí)和/或源代碼級(jí)上檢查軟件代碼并標(biāo)識(shí)應(yīng)用狀態(tài)中顯著分叉的位置。在某些實(shí)施例中,系統(tǒng)可允許應(yīng)用指示出該應(yīng)用將分叉到多個(gè)可能狀態(tài)的位置。例如,測(cè)試應(yīng)用可調(diào)用操作系統(tǒng)API, 該操作系統(tǒng)API標(biāo)識(shí)兩個(gè)或更多個(gè)分支路徑以使得系統(tǒng)可克隆虛擬機(jī)并并行地執(zhí)行這些路徑。在框240中繼續(xù),系統(tǒng)創(chuàng)建復(fù)制原始虛擬機(jī)的當(dāng)前狀態(tài)的一個(gè)或多個(gè)克隆虛擬機(jī),然后在所創(chuàng)建的克隆虛擬機(jī)中處理分支的一條路徑以探索后續(xù)狀態(tài)??寺】砂ㄔO(shè)置標(biāo)識(shí)虛擬硬件的虛擬機(jī)規(guī)范、復(fù)制原始虛擬機(jī)的存儲(chǔ)器狀態(tài)、復(fù)制附連到原始虛擬機(jī)的盤等等。某種虛擬化軟件將虛擬機(jī)存儲(chǔ)在單個(gè)文件中,包括任何嵌入式文件系統(tǒng)(例如,微軟 TM Virtual PC和Hyper-V使用的VHD文件)。系統(tǒng)可通過(guò)暫停原始虛擬機(jī)的執(zhí)行并復(fù)制與虛擬機(jī)相關(guān)聯(lián)的一個(gè)或多個(gè)文件來(lái)克隆虛擬機(jī)。在框250中繼續(xù),系統(tǒng)將每一克隆虛擬機(jī)設(shè)置為執(zhí)行所標(biāo)識(shí)的分支的不同路徑。 如果克隆是原始的完美克隆,則它們各自都將如原始接下來(lái)做的那樣做相同的事。然而,狀態(tài)分支系統(tǒng)的一個(gè)目的是允許每一克隆并行地追求分支的不同路徑。因此,系統(tǒng)將每一克隆設(shè)置為具有關(guān)于它負(fù)責(zé)探索哪條路徑的信息,然后執(zhí)行每一克隆和原始以允許它探索它的分配的路徑。設(shè)置每一克隆可包括標(biāo)識(shí)虛擬機(jī)將運(yùn)行的軟件代碼、將指令指針和寄存器狀態(tài)設(shè)到特定位置等等。在框260中繼續(xù),系統(tǒng)執(zhí)行原始虛擬機(jī)和克隆的虛擬機(jī)以并行地探索所標(biāo)識(shí)的分支的至少兩條路徑。如果分支的特定路徑顯著地變更了機(jī)器狀態(tài),只有執(zhí)行該分支的虛擬機(jī)受到影響。同時(shí),原始虛擬機(jī)可等待以確定執(zhí)行克隆的虛擬機(jī)的效果,以收集關(guān)于分支路徑的信息而不影響原始虛擬機(jī)狀態(tài)。如果應(yīng)用代碼確定未滿足采用分支路徑的條件,則可簡(jiǎn)單地丟棄與該路徑有關(guān)的虛擬機(jī)而原始虛擬機(jī)可繼續(xù)。在某些情況下,系統(tǒng)可選擇克隆虛擬機(jī)作為主虛擬機(jī)來(lái)繼續(xù)(即,接管原始虛擬機(jī)的角色),而原始虛擬機(jī)可終止。在框270中繼續(xù),系統(tǒng)從克隆的虛擬機(jī)接收至少一個(gè)執(zhí)行結(jié)果。該結(jié)果可指示克隆的虛擬機(jī)到達(dá)的狀態(tài)、通過(guò)跨VM通信信道從克隆的虛擬機(jī)傳遞的信息、由克隆的虛擬機(jī)通過(guò)執(zhí)行分支路徑產(chǎn)生的輸出等等。原始虛擬機(jī)可使用該執(zhí)行結(jié)果來(lái)確定接下來(lái)要做什么或者選擇原始虛擬機(jī)將繼續(xù)處理它的結(jié)果的虛擬機(jī)。因?yàn)榭寺〉奶摂M機(jī)被并行地執(zhí)行,所以系統(tǒng)很可能比原本可能在原始虛擬機(jī)中嘗試每一分支更快地到達(dá)結(jié)果。在框270之后, 這些步驟結(jié)束。圖3是示出在一個(gè)實(shí)施例中的狀態(tài)分支系統(tǒng)退出一個(gè)或多個(gè)克隆虛擬機(jī)并將執(zhí)行會(huì)聚回原始虛擬機(jī)的處理的流程圖。在框310中開始,系統(tǒng)選擇第一克隆的虛擬機(jī),該第一克隆的虛擬機(jī)通過(guò)先前檢測(cè)原始虛擬機(jī)中的應(yīng)用代碼的分支并派生克隆的虛擬機(jī)以執(zhí)行每一分支路徑來(lái)創(chuàng)建。在后續(xù)迭代中,系統(tǒng)選擇下一個(gè)克隆的虛擬機(jī)。在框320中繼續(xù),系統(tǒng)檢測(cè)到所選克隆的虛擬機(jī)已經(jīng)完成了它被分配的分支路徑的執(zhí)行。在某些情況下,分支路徑可表示較大的代碼主體的一小節(jié),其中該小節(jié)以有用于隔離分支的執(zhí)行以確定它在較大的代碼主體之外的結(jié)果的方式來(lái)產(chǎn)生結(jié)果或改變狀態(tài)。在克隆的虛擬機(jī)的設(shè)置期間,系統(tǒng)可在克隆的虛擬機(jī)將已經(jīng)完成分支路徑的執(zhí)行的點(diǎn)處插入指令(例如,停機(jī)或中斷)或其他指示。系統(tǒng)管理程序或其他代碼可監(jiān)視并檢測(cè)該指令以檢測(cè)克隆的虛擬機(jī)的完成。在框330中繼續(xù),系統(tǒng)標(biāo)識(shí)執(zhí)行克隆的虛擬機(jī)的結(jié)果狀態(tài)。結(jié)果可包括數(shù)字結(jié)果、 克隆的虛擬機(jī)產(chǎn)生的數(shù)據(jù)、對(duì)克隆的虛擬機(jī)的狀態(tài)改變等等。系統(tǒng)可將克隆的虛擬機(jī)與原始虛擬機(jī)進(jìn)行比較以標(biāo)識(shí)通過(guò)探索由克隆的虛擬機(jī)執(zhí)行的分支路徑而產(chǎn)生的改變。如果原始虛擬機(jī)決定采用該分支推測(cè)性地執(zhí)行的路徑,則原始虛擬機(jī)可復(fù)制所選的克隆的虛擬機(jī)的狀態(tài)差異或所標(biāo)識(shí)的結(jié)果。在判定框340中繼續(xù),系統(tǒng)確定是否存在與當(dāng)前分支相關(guān)聯(lián)的更多個(gè)克隆的虛擬機(jī)。如果是,則系統(tǒng)循環(huán)到框310以選擇下一個(gè)克隆的虛擬機(jī),否則在每一克隆的虛擬機(jī)完成處理之后系統(tǒng)在框350繼續(xù)。在框350中繼續(xù),系統(tǒng)基于在原始虛擬機(jī)上運(yùn)行的應(yīng)用代碼中的一個(gè)或多個(gè)條件來(lái)選擇要采用的分支。在某些實(shí)施例中,克隆的虛擬機(jī)作為推測(cè)性執(zhí)行引擎來(lái)操作,以推測(cè)性地執(zhí)行原始虛擬機(jī)可能采用的分支路徑。在原始虛擬機(jī)執(zhí)行到已經(jīng)評(píng)估了所有條件來(lái)了解將采用哪條路徑的點(diǎn)之后,原始虛擬機(jī)可選擇分支中的一個(gè)作為正確分支并丟棄其他分支。在其他實(shí)施例中,克隆的虛擬機(jī)可表示全部由原始虛擬機(jī)使用的但被并行地執(zhí)行以更快地到達(dá)結(jié)果的累計(jì)結(jié)果。在這樣的情況下,原始虛擬機(jī)從每一克隆的虛擬機(jī)接收結(jié)果、對(duì)接收到的結(jié)果執(zhí)行任何進(jìn)一步的處理以及在克隆的虛擬機(jī)完成之后繼續(xù)。
在框360中繼續(xù),系統(tǒng)復(fù)制來(lái)自執(zhí)行所選分支的克隆的虛擬機(jī)的所標(biāo)識(shí)的結(jié)果狀態(tài)。以此方式,原始虛擬機(jī)受益于由各個(gè)克隆的虛擬機(jī)執(zhí)行的并行執(zhí)行。無(wú)論采用哪個(gè)分支,原始虛擬機(jī)不會(huì)受到測(cè)試每一分支的打擾并且不必在先前代碼完成之后等待串行地執(zhí)行分支。相反,在原始虛擬機(jī)中完成先前代碼的同時(shí),克隆的虛擬機(jī)各自執(zhí)行各分支中的一個(gè),并且所選的虛擬機(jī)在它準(zhǔn)備好之后(并且在原始虛擬機(jī)本身原本能夠獲得結(jié)果之前) 立即將結(jié)果提供給原始虛擬機(jī)。在框370中繼續(xù),系統(tǒng)使用來(lái)自克隆的虛擬機(jī)的復(fù)制結(jié)果來(lái)繼續(xù)原始虛擬機(jī)的執(zhí)行。在某些實(shí)施例中,系統(tǒng)可丟棄原始虛擬機(jī)并通過(guò)所選的克隆的虛擬機(jī)繼續(xù)執(zhí)行。系統(tǒng)可丟棄或“轉(zhuǎn)儲(chǔ)清除”表示未被采用的分支路徑的任何克隆的虛擬機(jī)。在框370之后,這些步驟結(jié)束。圖4是示出在一個(gè)實(shí)施例中的狀態(tài)分支系統(tǒng)對(duì)分支路徑的并行處理的時(shí)間線圖。 時(shí)間線的第一行410表示本文描述的原始虛擬機(jī)的處理。在傳統(tǒng)系統(tǒng)中,原始虛擬機(jī)或物理機(jī)將執(zhí)行全部的處理。原始虛擬機(jī)在遇到原始虛擬機(jī)正在執(zhí)行的應(yīng)用代碼中的分支450 之前處理一個(gè)或多個(gè)任務(wù)440。在分支之前的某一點(diǎn)處,原始虛擬機(jī)標(biāo)識(shí)分支并派生并行地執(zhí)行分支的可能路徑的兩個(gè)克隆的虛擬機(jī)。第二行420表示第一克隆的虛擬機(jī)的處理,而第三行430表示第二克隆的虛擬機(jī)的處理。在原始虛擬機(jī)完成預(yù)分支任務(wù)440的同時(shí),第一克隆的虛擬機(jī)執(zhí)行與第一分支路徑460相關(guān)聯(lián)的代碼,而第二克隆的虛擬機(jī)并行地執(zhí)行與第二分支路徑470相關(guān)聯(lián)的代碼。當(dāng)原始虛擬機(jī)到達(dá)分支450時(shí),它基于原始虛擬機(jī)的當(dāng)前狀態(tài)以及分支450的任何條件來(lái)確定要采用的分支的路徑。原始虛擬機(jī)選擇勝利的分支并將結(jié)果480復(fù)制到原始虛擬機(jī)。隨后原始虛擬機(jī)繼續(xù)執(zhí)行,丟棄克隆的虛擬機(jī)。以此方式,克隆的虛擬機(jī)并行地準(zhǔn)備原始虛擬機(jī)的將來(lái)狀態(tài)并將原始虛擬機(jī)與在評(píng)估每一分支路徑時(shí)可能已經(jīng)涉及的侵入性狀態(tài)改變隔離開。在某些實(shí)施例中,狀態(tài)分支系統(tǒng)提供了用于設(shè)備驅(qū)動(dòng)器測(cè)試的框架。設(shè)備驅(qū)動(dòng)器測(cè)試常常是困難的,因?yàn)樗婕拔锢碛布蜖顟B(tài)改變,且如果不正確地處理物理硬件和狀態(tài)改變,則可能在操作系統(tǒng)的內(nèi)核空間中發(fā)生死鎖。狀態(tài)分支系統(tǒng)允許虛擬化物理硬件的狀態(tài)改變,從而使得并行操作的多個(gè)克隆虛擬機(jī)可評(píng)估各個(gè)可能的硬件輸入的結(jié)果和相應(yīng)的驅(qū)動(dòng)器響應(yīng)。這促進(jìn)了對(duì)設(shè)備驅(qū)動(dòng)器軟件代碼的更快且更穩(wěn)健的開發(fā)。在某些實(shí)施例中,狀態(tài)分支系統(tǒng)確定用于派生附加虛擬機(jī)以用于探索分支路徑的閾值。虛擬機(jī)的創(chuàng)建和設(shè)置招致時(shí)間和資源使用方面的某種成本。對(duì)于小的分支,設(shè)置克隆的虛擬機(jī)所涉及的時(shí)間可能不值得從它們所獲得的益處。因此,系統(tǒng)可確定與使用克隆的虛擬機(jī)的益處有關(guān)的閾值,并且僅在折衷最終將節(jié)約執(zhí)行時(shí)間或提供其他正面結(jié)果時(shí)派生新的克隆的虛擬機(jī)。應(yīng)用能夠基于應(yīng)用專用的考慮來(lái)設(shè)置或微調(diào)該閾值。類似地,在某些實(shí)施例中,狀態(tài)分支系統(tǒng)在評(píng)估使用克隆的虛擬機(jī)以用于探索分支路徑的益處時(shí)可考慮克隆的虛擬機(jī)是否會(huì)影響克隆的虛擬機(jī)外部的任何資源(即,向外部或鏈接的物理設(shè)備發(fā)出命令、通過(guò)網(wǎng)絡(luò)發(fā)送分組等)。在某些實(shí)施例中,狀態(tài)分支系統(tǒng)在與原始虛擬機(jī)不同的物理機(jī)上派生克隆的虛擬機(jī)。虛擬機(jī)很好地適于物理機(jī)之間的簡(jiǎn)單移動(dòng),且該系統(tǒng)可通過(guò)在分開的物理機(jī)上執(zhí)行克隆的虛擬機(jī)的部分或全部來(lái)將對(duì)各個(gè)分支路徑的探索卸載到其他物理機(jī)。如果需要,克隆的虛擬機(jī)可經(jīng)由網(wǎng)絡(luò)或物理機(jī)之間的其他通信信道與原始虛擬機(jī)通信。
在某些實(shí)施例中,在系統(tǒng)管理程序檢測(cè)到使用克隆的虛擬機(jī)以用于探索分支路徑的機(jī)會(huì)時(shí),狀態(tài)分支系統(tǒng)提供來(lái)自系統(tǒng)管理程序的通知。系統(tǒng)管理程序可監(jiān)視虛擬機(jī)中每一個(gè)正在運(yùn)行的進(jìn)程,并自動(dòng)地檢測(cè)其中分開的虛擬機(jī)可準(zhǔn)備以用于并行的分支路徑的情況。在這樣的情況下,系統(tǒng)管理程序可提供應(yīng)用通知,應(yīng)用可對(duì)該應(yīng)用通知注冊(cè)并作出響應(yīng)以指示該應(yīng)用是否想要系統(tǒng)管理程序派生克隆的虛擬機(jī)。在某些實(shí)施例中,狀態(tài)分支系統(tǒng)提供一種新形式的調(diào)試,該調(diào)試提供了在時(shí)間上往返于在虛擬機(jī)上運(yùn)行的應(yīng)用的各個(gè)狀態(tài)的效果。該系統(tǒng)在應(yīng)用執(zhí)行中的各個(gè)點(diǎn)處以克隆的虛擬機(jī)的形式創(chuàng)建各檢查點(diǎn)。每一克隆的虛擬機(jī)表示在特定時(shí)間點(diǎn)上的應(yīng)用的狀態(tài),且與發(fā)生在應(yīng)用上的任何后續(xù)改變隔離開。這允許軟件開發(fā)者附連調(diào)試程序,并在問(wèn)題發(fā)生之前或期間的一個(gè)或多個(gè)時(shí)間點(diǎn)上檢查應(yīng)用狀態(tài)。在某些實(shí)施例中,狀態(tài)分支系統(tǒng)提供了用于比較用于執(zhí)行各種任務(wù)的類似算法的 A-B測(cè)試。例如,該系統(tǒng)可通過(guò)下列方法來(lái)測(cè)試操作系統(tǒng)分頁(yè)或調(diào)度算法將測(cè)試操作系統(tǒng)分頁(yè)或調(diào)度算法各自設(shè)置在要管理一組相似進(jìn)程的分開的克隆的虛擬機(jī)中,然后并行地執(zhí)行每一克隆的虛擬機(jī)以確定就更快速的執(zhí)行或其他因素而言,哪個(gè)算法提供更好的結(jié)果。 如今串行地重新運(yùn)行這些測(cè)試引入新的狀態(tài)。盡管測(cè)試裝置試圖每次都設(shè)置相同的狀態(tài), 但某些總是改變的事物使得比較變得困難。通過(guò)使用狀態(tài)分支系統(tǒng),每一測(cè)試開始于已知的克隆狀態(tài),且可比較結(jié)果,從而較少受到非預(yù)期的狀態(tài)改變的影響。從前面的描述中可以看出,可以理解,此處描述的狀態(tài)分支系統(tǒng)的特定實(shí)施例只是為了說(shuō)明,但是,在不偏離本發(fā)明的精神和范圍的情況下,可以進(jìn)行各種修改。因此,本發(fā)明只受所附權(quán)利要求限制。
權(quán)利要求
1.一種用于從原始虛擬機(jī)分支到一個(gè)或多個(gè)克隆虛擬機(jī)以考慮分叉狀態(tài)的計(jì)算機(jī)實(shí)現(xiàn)的方法,所述方法包括接收(210)應(yīng)用代碼以供在所述原始虛擬機(jī)上執(zhí)行,其中所述應(yīng)用代碼包括得到虛擬機(jī)的兩個(gè)或更多個(gè)可能的狀態(tài)的至少一個(gè)分支;執(zhí)行(220)包括接收到的應(yīng)用代碼的所述原始虛擬機(jī);標(biāo)識(shí)(230)在所述原始虛擬機(jī)上運(yùn)行的應(yīng)用代碼中得到所述虛擬機(jī)的兩個(gè)或更多個(gè)可能的狀態(tài)的分支;創(chuàng)建(240)復(fù)制所述原始虛擬機(jī)的當(dāng)前狀態(tài)的一個(gè)或多個(gè)克隆虛擬機(jī),然后每一克隆虛擬機(jī)在所創(chuàng)建的克隆虛擬機(jī)中處理所述分支的一條路徑以探索后續(xù)狀態(tài);將每一克隆虛擬機(jī)設(shè)置(250)為執(zhí)行所標(biāo)識(shí)的分支的不同路徑;執(zhí)行(260)所述原始虛擬機(jī)和克隆的虛擬機(jī)以并行地探索所標(biāo)識(shí)的分支的至少兩條路徑;以及從所述克隆的虛擬機(jī)接收(270)至少一個(gè)執(zhí)行結(jié)果,其中,前面的步驟由至少一個(gè)處理器執(zhí)行。
2.如權(quán)利要求I所述的方法,其特征在于,接收所述應(yīng)用代碼包括接收改變機(jī)器的狀態(tài)的且基于運(yùn)行時(shí)評(píng)估的條件包括分支的應(yīng)用代碼。
3.如權(quán)利要求I所述的方法,其特征在于,執(zhí)行所述原始虛擬機(jī)包括系統(tǒng)管理程序引導(dǎo)共享同一物理資源的多個(gè)虛擬機(jī)的執(zhí)行。
4.如權(quán)利要求I所述的方法,其特征在于,執(zhí)行所述原始虛擬機(jī)包括執(zhí)行所述原始虛擬機(jī)直到標(biāo)識(shí)出可能改變所述虛擬機(jī)的狀態(tài)超過(guò)預(yù)定閾值的分支,并確定所述克隆的虛擬機(jī)是否將影響所述原始虛擬機(jī)實(shí)例以外的任何資源。
5.如權(quán)利要求I所述的方法,其特征在于,標(biāo)識(shí)所述分支包括使用代碼分析工具自動(dòng)標(biāo)識(shí)所述分支。
6.如權(quán)利要求I所述的方法,其特征在于,標(biāo)識(shí)所述分支包括從所述應(yīng)用代碼接收指示在那里所述應(yīng)用將分支到多個(gè)可能的狀態(tài)的位置的信息。
7.如權(quán)利要求I所述的方法,其特征在于,標(biāo)識(shí)所述分支包括接收對(duì)標(biāo)識(shí)兩個(gè)或更多個(gè)分支路徑的應(yīng)用編程接口(API)的調(diào)用,所述系統(tǒng)借此能克隆所述虛擬機(jī)并并行地執(zhí)行路徑。
8.如權(quán)利要求I所述的方法,其特征在于,創(chuàng)建克隆虛擬機(jī)包括設(shè)置標(biāo)識(shí)虛擬硬件的一個(gè)或多個(gè)虛擬機(jī)規(guī)范、復(fù)制所述原始虛擬機(jī)的存儲(chǔ)器狀態(tài)以及復(fù)制附連到所述原始虛擬機(jī)的一個(gè)或多個(gè)盤。
9.如權(quán)利要求I所述的方法,其特征在于,創(chuàng)建克隆虛擬機(jī)包括暫停所述原始虛擬機(jī)的執(zhí)行并復(fù)制與所述虛擬機(jī)相關(guān)聯(lián)的一個(gè)或多個(gè)物理機(jī)文件。
10.如權(quán)利要求I所述的方法,其特征在于,設(shè)置每一克隆包括用關(guān)于它要負(fù)責(zé)探索哪條路徑的信息來(lái)設(shè)置每一克隆,然后執(zhí)行每一克隆和所述原始虛擬機(jī)以允許它們各自探索它被分配的路徑。
11.如權(quán)利要求I所述的方法,其特征在于,設(shè)置每一克隆包括標(biāo)識(shí)所述克隆虛擬機(jī)將運(yùn)行的軟件代碼、以及將所述克隆虛擬機(jī)的指令指針和寄存器狀態(tài)設(shè)置到特定位置。
12.如權(quán)利要求I所述的方法,其特征在于,接收至少一個(gè)執(zhí)行結(jié)果包括接收所述克隆的虛擬機(jī)到達(dá)的狀態(tài)的指示。
13.一種用于虛擬機(jī)分支和并行執(zhí)行的計(jì)算機(jī)系統(tǒng),所述系統(tǒng)包括被配置成執(zhí)行包含在以下組件內(nèi)的軟件指令的處理器和存儲(chǔ)器;系統(tǒng)管理程序組件(110),所述系統(tǒng)管理程序組件在兩個(gè)或更多個(gè)虛擬機(jī)之間共享物理計(jì)算設(shè)備的資源并提供對(duì)克隆虛擬機(jī)的支持;調(diào)度組件(120),所述調(diào)度組件提供對(duì)物理機(jī)上的資源使用的調(diào)度以及在兩個(gè)或更多個(gè)虛擬機(jī)之間的資源隔離的調(diào)度,所述兩個(gè)或更多個(gè)虛擬機(jī)包括原始虛擬機(jī)和克隆的虛擬機(jī);VM通信組件(130),所述VM通信組件提供兩個(gè)或更多個(gè)虛擬機(jī)之間的一個(gè)或多個(gè)通信信道;分支標(biāo)識(shí)組件(140),所述分支標(biāo)識(shí)組件標(biāo)識(shí)軟件代碼的當(dāng)前狀態(tài)以及作為候選的一個(gè)或多個(gè)后續(xù)狀態(tài),以用于分支運(yùn)行所述軟件代碼的原始虛擬機(jī)以評(píng)估一個(gè)或多個(gè)克隆虛擬機(jī)中的所述后續(xù)狀態(tài);狀態(tài)克隆組件(150),所述狀態(tài)克隆組件復(fù)制來(lái)自所述原始虛擬機(jī)的狀態(tài)信息以創(chuàng)建具有類似狀態(tài)的一個(gè)或多個(gè)克隆虛擬機(jī);VM分支組件(160),所述VM分支組件通過(guò)啟動(dòng)每一創(chuàng)建的克隆虛擬機(jī)并標(biāo)識(shí)每一克隆要追求的執(zhí)行的分支來(lái)執(zhí)行所述分支;克隆協(xié)調(diào)組件(170),所述克隆協(xié)調(diào)組件協(xié)調(diào)每一克隆虛擬機(jī)和所述原始虛擬機(jī)的動(dòng)作以允許丟棄不需要的分支或合并分支結(jié)果;以及結(jié)果處理組件(180),所述結(jié)果處理組件處理每一虛擬機(jī)產(chǎn)生的結(jié)果并將所述結(jié)果提供給所述克隆協(xié)調(diào)組件。
14.如權(quán)利要求13所述的系統(tǒng),其特征在于,所述VM通信組件從所述原始虛擬機(jī)接收協(xié)調(diào)信息并將協(xié)調(diào)指令提供給一個(gè)或多個(gè)克隆虛擬機(jī)。
15.如權(quán)利要求13所述的系統(tǒng),其特征在于,所述分支標(biāo)識(shí)組件經(jīng)由所述系統(tǒng)管理程序通過(guò)分析所述軟件代碼來(lái)自動(dòng)標(biāo)識(shí)可能的分支。
全文摘要
本發(fā)明描述了虛擬機(jī)分支和并行執(zhí)行。本文描述了在充分利用投入的時(shí)間來(lái)設(shè)置開始狀態(tài)的同時(shí)允許復(fù)雜狀態(tài)轉(zhuǎn)換的并行執(zhí)行的狀態(tài)分支系統(tǒng)。通過(guò)允許在虛擬機(jī)級(jí)上進(jìn)行分支,狀態(tài)分支系統(tǒng)允許在虛擬機(jī)中設(shè)置特定條件或狀態(tài),隨后復(fù)制虛擬機(jī)的并行實(shí)例并分支到虛擬機(jī)的并行實(shí)例以探索不同的可能的后續(xù)狀態(tài)。在檢測(cè)到具有未知結(jié)果的大的狀態(tài)改變之后,狀態(tài)分支系統(tǒng)指令系統(tǒng)管理程序?qū)⒄趫?zhí)行的虛擬機(jī)復(fù)制到一個(gè)或多個(gè)分開的虛擬機(jī)中。該系統(tǒng)隨后允許在兩個(gè)或更多個(gè)虛擬機(jī)之間的分叉分支以探索從相似開始點(diǎn)的不同狀態(tài)。一旦執(zhí)行已經(jīng)到達(dá)了下一狀態(tài),系統(tǒng)就進(jìn)行協(xié)調(diào)以確定哪些副本要繼續(xù)執(zhí)行。因此,狀態(tài)分支系統(tǒng)允許對(duì)復(fù)雜狀態(tài)改變的更快速的探索。
文檔編號(hào)G06F9/46GK102609296SQ20111044342
公開日2012年7月25日 申請(qǐng)日期2011年12月16日 優(yōu)先權(quán)日2010年12月17日
發(fā)明者D·福蒂爾, J·C·斯普拉德林 申請(qǐng)人:微軟公司