專利名稱:虛擬化存儲分配方法
技術(shù)領(lǐng)域:
目前所公開的主題涉及計算領(lǐng)域,尤其涉及計算機(jī)虛擬化,雖然虛擬化只是示例性且非限制性領(lǐng)域。背景虛擬機(jī)系統(tǒng)可遭受關(guān)于輸入/輸出(I/O)功能的差性能,因為在完全虛擬化系統(tǒng)中,每個I/O操作通常是由系統(tǒng)管理程序(hypervisor)、主操作系統(tǒng)或由機(jī)器上執(zhí)行的不同的虛擬機(jī)間接處理的,從而增加了執(zhí)行I/O功能的代價。緩解這些性能問題的一種方式是通過允許虛擬機(jī)直接控制系統(tǒng)中的某些物理硬件資源。然而,提供這種直接控制可具有致使虛擬機(jī)不完全被虛擬化的效果,而且與虛擬化相關(guān)聯(lián)的許多特征(保存、遷移、快照等)可變得難以完成。解決這些I/O性能問題的另一種方式是創(chuàng)建到I/O設(shè)備的多條路徑,其中一條路徑可直接行進(jìn)到硬件,另一條路徑可經(jīng)另一虛擬機(jī)間接地行進(jìn)到硬件。當(dāng)希望完全封裝虛擬機(jī)的狀態(tài)使得它能夠被保存或遷移時,直接路徑可被拆毀且可使用間接路徑。與創(chuàng)建多條路徑有關(guān)的一個問題是通常難以設(shè)置第二路徑而不將設(shè)備的控制給于第二路徑作為設(shè)置過程的一部分。如果I/O設(shè)備用于分頁代碼或數(shù)據(jù)且對分頁設(shè)備的控制在分頁設(shè)備完全可操作之前被傳遞到第二路徑,則分頁可停止并使得系統(tǒng)崩潰。因此,需要其他技術(shù)來解決上文所描述的問題。概述本文揭示了用于在虛擬機(jī)分區(qū)中構(gòu)建設(shè)備驅(qū)動器棧的各種方法和系統(tǒng),該虛擬機(jī)分區(qū)物理上不控制由所述棧所表示的設(shè)備。在一實施例中,可實例化用于I/O設(shè)備的輔助接口和相關(guān)聯(lián)的驅(qū)動器??烧埱髞碜訧/O虛擬化層的信息,該信息描述相關(guān)聯(lián)的驅(qū)動器可控制的設(shè)備。多路徑重定向?qū)涌商峁┑桨ㄓ糜谠揑/O設(shè)備的驅(qū)動器的現(xiàn)有棧的句柄。該現(xiàn)有棧然后可用于與設(shè)備通信并允許創(chuàng)建包括表示該設(shè)備和用于該設(shè)備的新的驅(qū)動器的對象的新棧。多通路重定向?qū)尤缓罂纱蜷_到新棧的句柄并通知設(shè)備虛擬化層,設(shè)備虛擬化層然后可向現(xiàn)有設(shè)備接口發(fā)送將對設(shè)備的控制讓于新創(chuàng)建的接口的請求。設(shè)備現(xiàn)在可由新接口控制,且I/O可經(jīng)新的驅(qū)動器和接口被重定向到設(shè)備。除前述的之外,在構(gòu)成本發(fā)明的一部分的權(quán)利要求書、附圖,以及文本中描述了其他方面。本領(lǐng)域技術(shù)人員將理解,本發(fā)明的一個或多個方面可包括但不限于用于實現(xiàn)本發(fā)明的本文所述方面的電路和/或編程;該電路和/或編程實質(zhì)上可以是配置成實現(xiàn)本文所述方面的硬件、軟件和/或固件的任何組合,這取決于系統(tǒng)設(shè)計者的設(shè)計選擇。應(yīng)該注意,提供本概述是為了以簡化的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一些代表性的概念。本發(fā)明內(nèi)容并不旨在標(biāo)識出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。附圖簡述當(dāng)結(jié)合附圖閱讀時,可以更好地了解前面的摘要,以及下面的詳細(xì)描述。為了說明本發(fā)明,示出了本發(fā)明的各個方面。然而,本發(fā)明不限于所示出的特定方面。包括了下面的圖形圖Ia示出了具有包括多個虛擬處理器以及對應(yīng)的客操作系統(tǒng)的多個虛擬機(jī)的虛擬機(jī)環(huán)境;虛擬機(jī)由可包括調(diào)度器和其他組件的虛擬化層來維護(hù),其中虛擬化層虛擬化多個虛擬機(jī)的硬件;圖Ib示出了表示計算機(jī)系統(tǒng)中用于虛擬化環(huán)境的硬件和軟件體系結(jié)構(gòu)的邏輯分層的框圖;圖Ic描繪了其中可實現(xiàn)本發(fā)明的各方面的示例計算機(jī)系統(tǒng);圖2示出了示例性虛擬化計算系統(tǒng);圖3示出了替換虛擬化計算系統(tǒng);圖4描繪了示出用于實現(xiàn)本發(fā)明的過程的示例性系統(tǒng)框圖;圖5描繪了示出用于實現(xiàn)本發(fā)明的過程的示例性系統(tǒng)框圖;圖6描繪了示出用于實現(xiàn)本發(fā)明的過程的示例性系統(tǒng)框圖;圖7描繪了示出用于實現(xiàn)本發(fā)明的過程的示例性系統(tǒng)框圖;圖8描繪了示出用于實現(xiàn)本發(fā)明的過程的示例性系統(tǒng)框圖;圖9描繪了示出用于實現(xiàn)本發(fā)明的過程的示例性系統(tǒng)框圖;
圖10描繪了示出用于實現(xiàn)本發(fā)明的過程的示例性系統(tǒng)框圖;圖11示出用于在虛擬機(jī)中構(gòu)造設(shè)備驅(qū)動器棧的操作過程的示例,該虛擬機(jī)不控制與棧相關(guān)聯(lián)的設(shè)備;圖12示出用于在虛擬機(jī)中構(gòu)造設(shè)備驅(qū)動器棧的操作過程的示例,該虛擬機(jī)不控制與棧相關(guān)聯(lián)的設(shè)備;圖13示出用于創(chuàng)建到用于在虛擬機(jī)環(huán)境中分頁代碼或數(shù)據(jù)的I/O設(shè)備的多條路徑的操作過程的示例;圖14示出用于創(chuàng)建到用于在虛擬機(jī)環(huán)境中分頁代碼或數(shù)據(jù)的I/O設(shè)備的多條路徑的操作過程的示例;圖15示出了承載參考以上圖1-10討論的計算機(jī)可執(zhí)行指令的計算機(jī)可讀介質(zhì)。詳細(xì)描述虛擬機(jī)概述在下面的描述和圖形中闡述某些具體細(xì)節(jié),以提供對本發(fā)明的各實施例的全面的理解。在下面的公開中沒有闡述常常與計算和軟件技術(shù)相關(guān)聯(lián)的某些公知的細(xì)節(jié),以避免不必要地使本發(fā)明的各實施例模糊。進(jìn)一步地,那些相關(guān)領(lǐng)域普通技術(shù)人員將理解,他們可以在沒有下面所描述的細(xì)節(jié)中的一個或多個的情況下實施本發(fā)明的其他實施例。最后,盡管在下面的公開中參考步驟和序列描述了各種方法,但是,如此的描述用于提供本發(fā)明的各實施例的清楚的實現(xiàn),且步驟和步驟的序列不應(yīng)該理解為實施本發(fā)明所必需的。應(yīng)該理解,此處所描述的各種技術(shù)可以結(jié)合硬件或軟件或,在適當(dāng)?shù)那闆r下,結(jié)合兩者的組合來實現(xiàn)。因此,本發(fā)明的方法和裝置,或其某些方面或部分,也可以以在有形的介質(zhì)(如軟盤、CD-ROM、硬盤驅(qū)動器,或任何其他機(jī)器可讀的存儲介質(zhì))中實現(xiàn)的程序代碼 (即,指令)的形式來實現(xiàn),其中當(dāng)程序代碼被加載到諸如計算機(jī)之類的機(jī)器中并由它們執(zhí)行時,機(jī)器變?yōu)橛糜趯嵤┰摪l(fā)明的裝置。在程序代碼在可編程計算機(jī)上執(zhí)行的情況下,計算設(shè)備一般包括處理器、可由處理器讀取的存儲介質(zhì)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設(shè)備,以及至少一個輸出設(shè)備。一個或多個程序可以例如,通過使用API、可重用控件等來實現(xiàn)或利用結(jié)合本發(fā)明描述的過程。這樣的程序優(yōu)選地以高級別過程或面向?qū)ο缶幊陶Z言來實現(xiàn),以與計算機(jī)系統(tǒng)進(jìn)行通信。然而,若有需要,程序也可以以以匯編或機(jī)器語言來實現(xiàn)。在任一情況下,語言都可以是編譯的或解釋的語言,并與硬件實現(xiàn)相結(jié)合。利用虛擬機(jī),單個物理機(jī)器可支持多個客操作系統(tǒng),每個客操作系統(tǒng)運行于其自己的、底層物理機(jī)器的完整的虛擬實例上??筒僮飨到y(tǒng)(OS)可以是一個OS的單個版本的實例、同一 OS的不同發(fā)行版本、或完全不同的OS。稱為虛擬機(jī)監(jiān)控程序(VMM)或系統(tǒng)管理程序的瘦軟件層可創(chuàng)建并控制虛擬機(jī)和其他虛擬子系統(tǒng)。VMM也可完全控制物理機(jī)器并為每個客OS提供對CPU、存儲器、存儲空間和I/O帶寬的資源保證。圖Ia示出了具有包括多個虛擬處理器110、112、114、116以及對應(yīng)的客操作系統(tǒng) 130、132的多個虛擬機(jī)120、121的虛擬機(jī)環(huán)境100。虛擬機(jī)120、121由虛擬化層140來維護(hù),該虛擬化層140可以包括調(diào)度器142及其他組件(未示出),其中虛擬化層140為多個虛擬機(jī)120、121虛擬化硬件150。多個虛擬處理器110、112、114、116可以是底層硬件物理處理器160、162的虛擬對應(yīng)物。圖Ib是表示計算機(jī)系統(tǒng)中的虛擬化環(huán)境的硬件和軟件體系結(jié)構(gòu)的邏輯層的示圖。在圖Ib中,虛擬化程序180直接或間接地在物理硬件體系結(jié)構(gòu)182上運行。虛擬化程序180可以是(a)與主機(jī)操作系統(tǒng)并排運行的虛擬機(jī)監(jiān)控程序,(b)具有系統(tǒng)管理程序組件的主操作系統(tǒng),所述系統(tǒng)管理程序組件執(zhí)行虛擬化,(c)硬件,或(d)微碼。虛擬化程序也可以是與任何操作系統(tǒng)分開地運行的系統(tǒng)管理程序。換言之,系統(tǒng)管理程序虛擬化程序不必作為任何操作系統(tǒng)的一部分來運行,也不必與任何操作系統(tǒng)一起運行。管理程序虛擬化程序相反可在所有操作系統(tǒng)“之下”運行,包括“根分區(qū)”。虛擬化程序180虛擬化客硬件體系結(jié)構(gòu)178 (被示為虛線以示出該組件是“分區(qū)”或“虛擬機(jī)”的事實),即,實際上并不存在而是由虛擬化程序180虛擬化的硬件。客操作系統(tǒng)176在客硬件體系結(jié)構(gòu)178上執(zhí)行,而軟件應(yīng)用174可以在客操作系統(tǒng)176上運行。在圖Ib的虛擬化操作環(huán)境中,軟件應(yīng)用174 可以在計算機(jī)系統(tǒng)中運行,即使軟件應(yīng)用174被設(shè)計成在一般與主操作系統(tǒng)和硬件體系結(jié)構(gòu)182不兼容的操作系統(tǒng)上運行。虛擬機(jī)通常包含整個操作系統(tǒng)和一組應(yīng)用,它們一起構(gòu)成許多過程,其整體可以在虛擬機(jī)的上下文中被稱為“工作負(fù)載”或“過程”。在本發(fā)明中,術(shù)語“過程”和“工作負(fù)載”在虛擬機(jī)上下文中可被互換地使用,并且本領(lǐng)域技術(shù)人員可以容易地理解,“過程”可指代包括可在虛擬機(jī)中被實例化的所有系統(tǒng)和應(yīng)用的多個過程。接下來,圖2示出了虛擬化計算系統(tǒng),包括直接地在物理計算機(jī)硬件202之上運行的主操作系統(tǒng)(主OS)軟件層204,其中主OS 204通過暴露與分區(qū)A 208和B 210的接口以分別供操作系統(tǒng)A 212和B 214使用,來提供對物理計算機(jī)硬件202的資源的訪問。這允許主OS 204不被運行在它上面的操作系統(tǒng)層212和214注意。再次地,為了執(zhí)行虛擬化,主OS 204可以是專門設(shè)計的帶有本機(jī)虛擬化能力的操作系統(tǒng),或者,可另選地,它可以是帶有用于執(zhí)行虛擬化的結(jié)合的系統(tǒng)管理程序組件(未示出)的標(biāo)準(zhǔn)操作系統(tǒng)。再次參考圖2,在主OS 204的上面有兩個分區(qū),分區(qū)A 208 (其可以是例如,虛擬化的htel 386處理器),以及分區(qū)B 210(其可以是例如,Motorola 680X0系列處理器中的一種處理器的虛擬化版本)。在每一分區(qū)208和210內(nèi)分別有客操作系統(tǒng)(客OS) A 212和 B 214。在客OS A 212上運行的是兩個應(yīng)用,應(yīng)用Al 216和應(yīng)用A2 218,而在客OS B 214 的上運行的是應(yīng)用Bl 220。對于圖2,值得注意的是,分區(qū)A 208和分區(qū)B 214(以虛線示出)是可以僅僅作為軟件構(gòu)造而存在的虛擬化計算機(jī)硬件表示。由于專門虛擬化軟件的執(zhí)行,使得它們可能被實現(xiàn),專門虛擬化軟件不僅分別向客OS A 212和客OS B 214呈現(xiàn)分區(qū)A 208和分區(qū)B 210,而且還執(zhí)行客OS A 212和客OS B 214與真實物理計算機(jī)硬件202間接地進(jìn)行交互所需的所有軟件步驟。圖3示出了其中虛擬化由與主操作系統(tǒng)204—起運行的虛擬機(jī)監(jiān)控程序(VMM) 204 執(zhí)行的替換虛擬化計算系統(tǒng)。在某些情況下,VMM 204可以是在主操作系統(tǒng)204上運行并僅通過主操作系統(tǒng)204來與計算機(jī)硬件202交互的應(yīng)用。在其他情況下,諸如圖3所示,VMM 204可替代地包括部分獨立的軟件系統(tǒng),其在某些層上經(jīng)由主操作系統(tǒng)204來間接地與計算機(jī)硬件202交互,但在其他層上VMM 204直接與計算機(jī)硬件202交互(類似于主操作系統(tǒng)直接與計算機(jī)硬件交互的方式)。并且在又一些情況下,VMM 204可包括完全獨立的軟件系統(tǒng),其在所有層上直接與計算機(jī)硬件202交互(類似于主操作系統(tǒng)直接與計算機(jī)硬件交互的方式)而不利用主操作系統(tǒng)204(但仍舊與主操作系統(tǒng)204交互以協(xié)調(diào)對計算機(jī)硬件 202的使用并避免沖突等)。用于實現(xiàn)上文所提及的分區(qū)的所有這些方案只是示例性實現(xiàn),且此處沒有任何東西應(yīng)該解釋為將本公開限制為任何特定虛擬化方面。虛擬化存儲分配I/O虛擬化(IOV)指的是單個物理I/O設(shè)備要由一個以上虛擬機(jī)或在系統(tǒng)管理程序(或VMM等)和虛擬機(jī)之間共享的能力。虛擬機(jī)系統(tǒng)可遭受關(guān)于I/O虛擬化的差性能。 這是因為使虛擬化有用的虛擬化的特征(例如與物理硬件隔離)可在虛擬機(jī)中運行工作負(fù)載時具有負(fù)面效應(yīng)。在完全虛擬化系統(tǒng)中,每個I/O操作通常間接地由系統(tǒng)管理程序、或者主操作系統(tǒng)、或者由運行在機(jī)器上的不同的虛擬機(jī)來處理。緩解差I(lǐng)/O性能的一種方式可以是允許虛擬機(jī)直接控制系統(tǒng)中的某些物理硬件。然而,允許直接控制可具有致使虛擬機(jī)不被完全虛擬化的效果,在這種情況下與虛擬化相關(guān)聯(lián)的許多特征(例如保存、遷移、快照等)可變得難以完成。共同轉(zhuǎn)讓的美國專利申請?zhí)朳代理人檔案號MSFT_5556/316010. 01]描述了用于解決上述問題的技術(shù)。例如,可創(chuàng)建到I/O設(shè)備的多條路徑。一條路徑可直接行進(jìn)到硬件, 另一條路徑可經(jīng)另一虛擬機(jī)間接地行進(jìn)到硬件。當(dāng)希望完全封裝虛擬機(jī)的狀態(tài)使得它能夠被保存或遷移時,直接路徑可被拆毀且可使用間接路徑。間接路徑固有地是可虛擬化的。然而,在構(gòu)建這兩條路徑時可產(chǎn)生問題,特別是如果I/O設(shè)備被用于分頁代碼或數(shù)據(jù)的情況。通常難以設(shè)置第二路徑而不將設(shè)備的控制給于第二路徑作為設(shè)置過程的一部分。如果在分頁設(shè)備完全可操作之前將分頁設(shè)備的控制給于第二路徑,則可發(fā)生差錯且分頁可停止。在許多情況下,如果分頁停止,則系統(tǒng)可崩潰。參考圖4,示出的是純“合成”存儲子系統(tǒng)的框圖。合成棧是由通常為在虛擬機(jī)中使用而設(shè)計的驅(qū)動器組成的I/O棧。根據(jù)具體系統(tǒng),可使用其他術(shù)語來指代合成棧。例如, 在替換系統(tǒng)中用于類似的I/O棧的術(shù)語是“類虛擬化”。參考圖4,圖示出兩個分區(qū)。一個分區(qū)是具有對盤460的直接物理訪問的特權(quán)分區(qū)410。另一個分區(qū)是可請求對盤460的訪問的非特權(quán)分區(qū)470。例如,文件系統(tǒng)475可請求對文件的訪問,要求合成SCSI總線驅(qū)動器480與盤驅(qū)動器485通信,盤驅(qū)動器隨后在VM總線(虛擬機(jī)總線)465上通信。存儲虛擬化服務(wù)提供者420可提供虛擬化的存儲服務(wù)。存儲虛擬化服務(wù)提供者420可與盤驅(qū)動器 430通信以訪問物理SCSI總線設(shè)備驅(qū)動器440。SCSI總線設(shè)備驅(qū)動器440可提供對SCSI 控制器450并最終對駐留在盤460上的文件的訪問(通常發(fā)生在塊設(shè)備層)。于是,指示為特權(quán)分區(qū)410的一個虛擬機(jī)具有對是SCSI控制器450的物理存儲設(shè)備的控制。指示為非特權(quán)分區(qū)470的另一虛擬機(jī)可尋求對SCSI控制器450的訪問?,F(xiàn)在參考圖5,示出的是構(gòu)建了到盤460的第二路徑之后的示例性結(jié)束狀態(tài)。非特權(quán)分區(qū)470經(jīng)輔助SCSI控制器520具有對盤460的物理控制。該訪問是由包括物理SCSI 總線設(shè)備驅(qū)動器510和盤驅(qū)動器505的輔助棧提供的。提供第一路徑的合成棧包括盤驅(qū)動器485和合成SCSI總線驅(qū)動器480,合成SCSI總線驅(qū)動器隨后在VM總線465上通信。存儲虛擬化服務(wù)提供者420可提供虛擬化的存儲服務(wù)。存儲虛擬化服務(wù)提供者420可與盤驅(qū)動器430通信以訪問物理SCSI總線設(shè)備驅(qū)動器440。SCSI總線設(shè)備驅(qū)動器440可提供對 SCSI控制器450的訪問,SCSI控制器提供對盤460的主接口。多路徑重定向?qū)?00提供在非特權(quán)分區(qū)470中,并管理和控制對兩個棧的訪問??梢鸬囊粋€問題是為了在非特權(quán)分區(qū)中在操作系統(tǒng)實例內(nèi)的任一條路徑中構(gòu)建盤驅(qū)動器層,可要求對存儲盤460的控制。構(gòu)建兩個設(shè)備驅(qū)動器棧所需的過程將通常要求從作為引導(dǎo)設(shè)備的盤進(jìn)行讀取,并通過分頁代碼和數(shù)據(jù)使盤活動生效。盡管這可是可能的,但是在大多數(shù)配置中,SCSI控制器不能從其主和輔助接口兩者同時控制盤。本領(lǐng)域的技術(shù)人員將認(rèn)識到將當(dāng)前公開的技術(shù)應(yīng)用于SCSI設(shè)備是示例性的,且所公開的方法和系統(tǒng)可應(yīng)用于諸如但不限于,串行附加SCSI (SAS)、互聯(lián)網(wǎng)SCSI (iSCSI)以及光纖通道等其他 I/O設(shè)備。在各實施例中,此處公開的是用于構(gòu)造第二 I/O路徑或棧的過程。盡管下文將描述以合成I/O棧為開始并構(gòu)建物理棧的過程,但本領(lǐng)域的技術(shù)人員將認(rèn)識到可使用類似的過程來以合成I/O棧為開始并構(gòu)建物理棧。在某些實施例中,可要求SCSI控制器創(chuàng)建對其自己的輔助接口。某些設(shè)備能夠執(zhí)行此類操作,特別是與外圍組件互聯(lián)(PCI)專門興趣組(SIG)的單根(SR) I/O虛擬化(IOV) 規(guī)范兼容的那些設(shè)備。參考圖6,提供了可管理對虛擬機(jī)的資源分配以及隔離分配給虛擬機(jī)的資源不被其他虛擬機(jī)訪問的虛擬存儲管理器600。虛擬存儲管理器600可經(jīng)其物理SCSI 總線設(shè)備驅(qū)動器440向SCSI控制器450發(fā)送消息。SCSI控制器450然后可創(chuàng)建輔助SCSI 控制器接口 520。如上所述,本發(fā)明考慮了將所公開的方法應(yīng)用于除了 SCSI控制器之外的各種存儲控制器。某些控制器可以多種方式連接到存儲介質(zhì),例如以存儲區(qū)域網(wǎng)絡(luò)(SAN) 的方式,使得多個控制器而不是單個SR-IOV兼容的控制器可被使用。參考圖7,示出的是用于設(shè)置第二 I/O棧的進(jìn)一步的示例性過程。存儲設(shè)備驅(qū)動器 700可被設(shè)置用于輔助控制器接口 520。使用合成存儲棧710,可對引導(dǎo)設(shè)備搜索與設(shè)備驅(qū)動器有關(guān)的文件。非特權(quán)分區(qū)470中的SCSI總線設(shè)備驅(qū)動器700現(xiàn)在可創(chuàng)建表示盤的子設(shè)備。然而,非特權(quán)分區(qū)470當(dāng)前不擁有特權(quán)分區(qū)410的控制下的盤460。結(jié)果,用于創(chuàng)建這一部分棧的常規(guī)的方法可能無效,因為設(shè)備不能將I/O發(fā)送到盤以找到其特性。參考圖8,SCSI總線設(shè)備驅(qū)動器700可向多路徑重定向?qū)?00發(fā)送對關(guān)于SCSI總線設(shè)備驅(qū)動器700可最終擁有的盤的信息的請求。多路徑重定向?qū)?00然后可用到現(xiàn)有盤驅(qū)動器485的句柄來響應(yīng)。操作系統(tǒng)I/O管理器可管理應(yīng)用和設(shè)備驅(qū)動器提供的接口之間的通信。I/O管理器還可包括即插即用管理器,用于管理I/O功能和識別設(shè)備何時被添加到系統(tǒng)。參考圖9, 非特權(quán)分區(qū)470中的SCSI總線驅(qū)動器700可創(chuàng)建表示盤460的對象并將該對象報告給即插即用管理器,即插即用管理器可隨后設(shè)置用于盤460的驅(qū)動器900。通常,在沒有SCSI控制器接口 520發(fā)送I/O到盤460的情況下,驅(qū)動器900不能被設(shè)置。在該情況下,驅(qū)動器900 可被設(shè)置,因為使用到盤驅(qū)動器485的句柄將必要的I/O向下重定向到合成存儲棧910,該句柄是由多路徑重定向?qū)?00提供給SCSI控制器接口 520的。多路徑重定向?qū)?00可然后打開到新的盤對象900及其相關(guān)聯(lián)的驅(qū)動器的句柄。參考圖10,多路徑重定向?qū)?00可向虛擬存儲管理器600發(fā)送消息。虛擬存儲管理器600可向SCSI總線設(shè)備驅(qū)動器440發(fā)送對SCSI控制器的主接口 450的消息。SCSI控制器的主接口 450然后可將對盤460的控制讓于SCSI控制器的輔助接口 520,如所示。此時,多路徑重定向?qū)?00可引導(dǎo)I/O從文件系統(tǒng)475向下通過非特權(quán)分區(qū)470中的物理棧 1000。目前所公開的各方面可被實現(xiàn)為系統(tǒng)、方法,駐留在計算機(jī)可讀介質(zhì)中的計算機(jī)可執(zhí)行指令等等。如此,對任何特定系統(tǒng)、方法或計算機(jī)可讀介質(zhì)的任何公開不限于此,而是可延及實現(xiàn)所公開的主題的其他方式。圖11和12描繪了用于在虛擬機(jī)中構(gòu)造設(shè)備驅(qū)動器棧的操作過程的示例,該虛擬機(jī)不控制與棧相關(guān)聯(lián)的設(shè)備。過程可包括操作1100、1110、1120、1130、1140、1150、1160、 1170和1180。參考圖11,操作1100開始操作過程,在操作1110中,可發(fā)送實例化用于設(shè)備的輔助接口的請求??膳渲?120用于輔助接口的物理驅(qū)動器。操作1130示出通過創(chuàng)建所述設(shè)備的表示來構(gòu)造所述設(shè)備驅(qū)動器棧。操作1140示出為所述設(shè)備配置新驅(qū)動器,操作 1150示出將第二指示提供給所述設(shè)備驅(qū)動器棧。操作1160示出通過經(jīng)所述替代棧與所述設(shè)備通信來獲得用于構(gòu)造所述設(shè)備驅(qū)動器棧的信息。操作1170示出經(jīng)所述設(shè)備驅(qū)動器棧和輔助接口將I/O引導(dǎo)到所述設(shè)備。操作1180示出向用于所述設(shè)備的主接口發(fā)送消息以將對所述設(shè)備的控制讓于所述輔助接口。結(jié)合圖12繼續(xù),操作1200示出設(shè)備可任選地包括多個控制接口。操作1205示出該多個控制接口可任選地符合PCI SR-IOV規(guī)范。在一實施例中,設(shè)備驅(qū)動器??捎糜诜猪?I/O 1210,在操作1215,分頁I/O可對于創(chuàng)建設(shè)備驅(qū)動器棧是必要的。操作1220示出在一個實施例中該設(shè)備是盤設(shè)備。在另一實施例中1225,該設(shè)備是網(wǎng)絡(luò)接口適配器。在各實施例中,通過將I/O請求重定向到替代棧來發(fā)現(xiàn)1230設(shè)備的描述和特性。在操作1235,可經(jīng)合成存儲棧對引導(dǎo)設(shè)備搜索與用于設(shè)備的驅(qū)動器有關(guān)的文件。 在操作1240中,示出將對關(guān)于物理驅(qū)動器可擁有的設(shè)備的信息的請求發(fā)送到多路徑重定向?qū)印T谝粋€實施例中,指示可以是句柄1245。在另一個實施例中,可發(fā)送1250到虛擬存儲管理器的消息,該消息描述該指示。
圖13和14描繪了用于創(chuàng)建到用于在虛擬機(jī)環(huán)境中分頁代碼或數(shù)據(jù)的I/O設(shè)備的多條路徑的示例性操作過程。過程可包括操作1300、1302、1304、1306、1308、1310、1312和 1314。參考圖13,操作1300開始操作過程,操作1302請求輔助接口的實例化以及配置用于 I/O設(shè)備的物理驅(qū)動器,其中I/O設(shè)備能夠支持多個控制接口。操作1304示出從I/O虛擬化層接收到現(xiàn)有棧的指針,現(xiàn)有棧包括對所述I/O設(shè)備的現(xiàn)有驅(qū)動器,在操作1306中,可實例化表示所述設(shè)備的對象。操作1308示出經(jīng)所述現(xiàn)有棧與所述I/O設(shè)備通信,以及配置用于該I/O設(shè)備的新驅(qū)動器??商峁?310到該對象和新驅(qū)動器的指針。操作1312示出向用于所述I/O設(shè)備的主接口發(fā)送消息以將對所述I/O設(shè)備的控制讓于所述輔助接口。操作1314示出使用所述指針經(jīng)新驅(qū)動器和輔助接口將I/O重定向到所述I/O設(shè)備。結(jié)合圖14繼續(xù),在操作1402中,示出接收I/O設(shè)備的屬性以及分頁代碼和數(shù)據(jù)。 操作1404示出在一個實施例中現(xiàn)有棧是物理棧。在另一實施例中,現(xiàn)有??梢允呛铣蓷?1406。上文所提及的方面中的任何一個方面都可以以方法、系統(tǒng)、計算機(jī)可讀介質(zhì)或任何類型的產(chǎn)品來實現(xiàn)。例如,按照圖15,計算機(jī)可讀介質(zhì)可在其上存儲用于在虛擬化I/O 環(huán)境中創(chuàng)建用于存儲設(shè)備的替代I/O棧的計算機(jī)可執(zhí)行指令,其中所述存儲設(shè)備用于分頁代碼和數(shù)據(jù),在利用存儲設(shè)備的分頁通過現(xiàn)有棧繼續(xù)進(jìn)行的同時,所述替代I/O棧被創(chuàng)建。 這種媒體可包括用于請求輔助接口的實例化以及配置用于存儲設(shè)備的輔助物理驅(qū)動器的第一指令子集1510 ;用于接收到現(xiàn)有棧的句柄的第二指令子集1512 ;用于使用所述句柄標(biāo)識所述現(xiàn)有棧并經(jīng)所述現(xiàn)有棧與所述存儲設(shè)備通信的第三指令子集1514 ;用于實例化用于所述存儲設(shè)備的替代I/O棧的第四指令子集1516,該替代I/O棧包括表示所述存儲設(shè)備的對象和用于所述存儲設(shè)備的驅(qū)動器;用于報告到所述替代I/O棧的句柄的第五指令子集 1518 ;以及用于向所述存儲設(shè)備的主接口發(fā)送消息以將對所述存儲設(shè)備的控制讓于所述輔助接口的第六指令子集1520。本領(lǐng)域技術(shù)人員可以理解,可以使用附加指令集來捕捉此處所公開的各其他方面,且根據(jù)本發(fā)明,三個目前所公開的指令子集可以在細(xì)節(jié)方面不同。例如,指令還可包括用于經(jīng)替代I/O棧將I/O重定向到存儲設(shè)備的指令15沈。指令還可包括支持存儲設(shè)備是PCI SR-IOV兼容的實施例的指令1528,以及用于經(jīng)現(xiàn)有棧對引導(dǎo)設(shè)備搜索與用于存儲設(shè)備的驅(qū)動器有關(guān)的文件的指令。如上所述,本發(fā)明的各方面可以在經(jīng)編程的計算機(jī)上執(zhí)行。圖Ic和下面討論旨在提供其中實現(xiàn)本發(fā)明各方面的合適計算環(huán)境的簡要描述。本領(lǐng)域技術(shù)人員可以理解,在某些實施例中,圖Ic的計算機(jī)系統(tǒng)可以實現(xiàn)圖Ia和Ib的各個方面。在這些示例實施例中, 服務(wù)器和客戶機(jī)可包括圖Ic中所描述的某些或全部組件,且在某些實施例中,服務(wù)器和客戶機(jī)可以各自包括被配置成實例化本發(fā)明的特定方面的電路。在本公開中通篇使用的術(shù)語“電路”可包括專門硬件組件。在相同實施例或其他實施例中,電路可包括被配置成通過固件或開關(guān)執(zhí)行功能的微處理器。在相同或其他示例實施例中,電路可包括一個或多個通用處理單元和/或多核處理單元等等,當(dāng)體現(xiàn)可操作以執(zhí)行功能的邏輯的軟件指令被加載到存儲器,例如,RAM和/或虛擬存儲器中時,這些處理單元可以被配置。在其中電路包括硬件和軟件的組合的示例實施例中,實施者可以編寫體現(xiàn)邏輯的源代碼,且源代碼可以被編譯為可以由通用處理單元處理的機(jī)器可讀代碼。
參考圖lc,計算系統(tǒng)可以包括計算機(jī)20或類似物,計算機(jī)20包括處理單元21、系統(tǒng)存儲器22和將包括系統(tǒng)存儲器在內(nèi)的各種系統(tǒng)組件耦合至處理單元21的系統(tǒng)總線23。 系統(tǒng)總線23可以是若干類型的總線結(jié)構(gòu)中的任何一種,包括使用各種總線體系結(jié)構(gòu)中的任何一種的存儲器總線或存儲器控制器、外圍總線,以及局部總線。系統(tǒng)存儲器包括只讀存儲器(ROM) M和隨機(jī)存取存儲器(RAM) 25?;据斎?輸出系統(tǒng)沈¢10 被存儲在ROM 24 中,包含了諸如在啟動期間幫助在計算機(jī)20內(nèi)的元件之間傳輸信息的基本例程。計算機(jī)20 還可以包括用于讀寫硬盤(未示出)的硬盤驅(qū)動器27、用于讀寫可移動磁盤四的磁盤驅(qū)動器28,以及用于讀寫諸如CD ROM或其他光學(xué)介質(zhì)之類的可移動光盤31的光盤驅(qū)動器30。 在某些示例實施例中,體現(xiàn)本發(fā)明的各方面的計算機(jī)可執(zhí)行指令可以存儲在ROM 24、硬盤 (未示出)、RAM 25、可移動磁盤四、光盤31,和/或處理單元21的高速緩存中。硬盤驅(qū)動器27、磁盤驅(qū)動器28,以及光驅(qū)動器30分別通過硬盤驅(qū)動器接口 32、磁盤驅(qū)動器接口 33, 以及光驅(qū)動器接口 34連接到系統(tǒng)總線23。驅(qū)動器以及它們相關(guān)聯(lián)的計算機(jī)可讀介質(zhì)為計算機(jī)20提供了對計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊,及其他數(shù)據(jù)的非易失性存儲。雖然此處所描述的環(huán)境使用了硬盤、可移動磁盤四、以及可移動光盤31,但是,那些本領(lǐng)域普通技術(shù)人員應(yīng)該理解,在操作環(huán)境中也可以使用諸如盒式磁帶、閃存卡、數(shù)字視頻盤、伯努利磁帶盒、隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)等等之類的可以存儲可由計算機(jī)進(jìn)行訪問的數(shù)據(jù)的其他類型的計算機(jī)可讀介質(zhì)。可以有若干個程序模塊存儲在硬盤、磁盤四、光盤31、ROM 24,和/或RAM 25上, 包括操作系統(tǒng)35、一個或多個應(yīng)用程序36、其他程序模塊37、以及程序數(shù)據(jù)38。用戶可以通過諸如鍵盤40和定點設(shè)備42之類的輸入設(shè)備向計算機(jī)20中輸入命令和信息。其他輸入設(shè)備(未示出)可以包括麥克風(fēng)、游戲桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀等等。這些及其他輸入設(shè)備常常通過耦合到系統(tǒng)總線的串行端口接口 46連接到處理單元21,但是,也可以通過其他接口,如并行端口、游戲端口、通用串行總線(USB)端口、來進(jìn)行連接。顯示器 47或其他類型的顯示設(shè)備也可以通過諸如視頻適配器48之類的接口,連接到系統(tǒng)總線23。 除了顯示器47之外,計算機(jī)通常還包括其他外圍輸出設(shè)備(未示出),如揚(yáng)聲器和打印機(jī)。 圖1的系統(tǒng)也包括主機(jī)適配器55、小型計算機(jī)系統(tǒng)接口(SCSI)總線56,以及連接到SCSI 總線56的外部存儲裝置62。計算機(jī)20可使用至一個或多個遠(yuǎn)程計算機(jī),諸如遠(yuǎn)程計算機(jī)49的邏輯連接在網(wǎng)絡(luò)化環(huán)境中操作。遠(yuǎn)程計算機(jī)49可以是另一計算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等設(shè)備或其他公共網(wǎng)絡(luò)節(jié)點,并且通常可包括上文參考計算機(jī)20所描述的許多或全部元件,雖然在圖Ic中只示出了存儲設(shè)備50。圖1中所描繪的邏輯連接可包括局域網(wǎng)(LAN) 51和廣域網(wǎng) (WAN) 52。這樣的聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)范圍的計算機(jī)網(wǎng)絡(luò)、內(nèi)部網(wǎng)和因特網(wǎng)中是普遍現(xiàn)象。當(dāng)用于LAN網(wǎng)絡(luò)環(huán)境中時,計算機(jī)20可通過網(wǎng)絡(luò)接口或適配器53連接到LAN 51。 當(dāng)用于WAN網(wǎng)絡(luò)環(huán)境中時,計算機(jī)20通常包括調(diào)制解調(diào)器M,或用于通過廣域網(wǎng)52(如通過因特網(wǎng))建立通信的其他裝置。調(diào)制解調(diào)器M其可以是內(nèi)置的或外置的,可通過串行端口接口 46連接到系統(tǒng)總線23。在網(wǎng)絡(luò)化環(huán)境中,相對于計算機(jī)20所描述的程序模塊或其部分可被存儲在遠(yuǎn)程存儲器存儲設(shè)備中??梢岳斫猓境龅木W(wǎng)絡(luò)連接只是示例,也可以使用用于在計算機(jī)之間建立通信鏈路的其他裝置。此外,盡管可以預(yù)想本發(fā)明的很多實施例特別適合于計算機(jī)系統(tǒng),但是,本文中沒有任何表述旨在將本公開限制于這樣的實施例。前述的詳細(xì)描述通過示例和/或操作圖闡述了系統(tǒng)和/或進(jìn)程的各實施例。在這樣的框圖和/或示例包含一個或多個功能和/或操作的范圍內(nèi),本領(lǐng)域技術(shù)人員將理解,這樣的框圖,或示例內(nèi)的每一功能和/或操作可以分別地和/或共同地通過范圍廣泛的硬件、 軟件、固件或幾乎其任何組合來實現(xiàn)。最后,盡管已經(jīng)結(jié)合較佳方面按各附圖所示描述了本發(fā)明,但要理解,可使用其它相似方面或者可對所述方面進(jìn)行修改或添加來執(zhí)行本發(fā)明的相同功能而不脫離本發(fā)明。例如,在本文的各方面中,揭示了用于在虛擬機(jī)分區(qū)中構(gòu)建設(shè)備驅(qū)動器棧的各種機(jī)制,該虛擬機(jī)分區(qū)物理上不控制由棧所表示的設(shè)備。然而,通過此處的示教還設(shè)想與這些所描述的方面等效的其他機(jī)制。因此,本發(fā)明不應(yīng)該僅限于任何單個方面,而是應(yīng)該在根據(jù)所附權(quán)利要求書的廣度和范圍內(nèi)解釋。
權(quán)利要求
1.一種用于在虛擬機(jī)(470)中構(gòu)造設(shè)備驅(qū)動器棧(1000)的方法,該虛擬機(jī)不控制與該棧相關(guān)聯(lián)的設(shè)備,所述方法包括請求對所述設(shè)備的輔助接口(520)的實例化,以及配置用于所述輔助接口的物理驅(qū)動器(700);接收用于所述設(shè)備的替代棧(910)的第一指示;通過創(chuàng)建所述設(shè)備的表示、配置用于所述設(shè)備的新棧(900)以及向所述設(shè)備驅(qū)動器棧提供第二指示,構(gòu)造所述設(shè)備驅(qū)動器棧,其中用于構(gòu)造所述設(shè)備驅(qū)動器棧的信息是通過經(jīng)所述替代棧與所述設(shè)備通信而獲得的;以及經(jīng)所述設(shè)備驅(qū)動器棧和輔助接口將I/O引導(dǎo)到所述設(shè)備。
2.如權(quán)利要求1所述的方法,其特征在于,還包括向用于所述設(shè)備的主接口發(fā)送消息以將對所述設(shè)備的控制讓于所述輔助接口。
3.如權(quán)利要求1所述的方法,其特征在于,所述設(shè)備包括多個控制接口。
4.如權(quán)利要求1所述的方法,其特征在于,所述設(shè)備驅(qū)動器棧用于分頁I/O。
5.如權(quán)利要求1所述的設(shè)備,其特征在于,所述設(shè)備是存儲設(shè)備。
6.如權(quán)利要求1所述的設(shè)備,其特征在于,所述設(shè)備是網(wǎng)絡(luò)接口適配器。
7.如權(quán)利要求1所述的方法,其特征在于,所述設(shè)備的描述和特性是通過將I/O請求重定向到所述替代棧而獲得的。
8.如權(quán)利要求1所述的方法,其特征在于,所述配置物理驅(qū)動器還包括經(jīng)合成存儲棧對引導(dǎo)設(shè)備搜索與所述物理驅(qū)動器有關(guān)的文件。
9.如權(quán)利要求1所述的方法,其特征在于,還包括向多路徑重定向?qū)影l(fā)送對關(guān)于所述物理驅(qū)動器可擁有的設(shè)備的信息的請求。
10.如權(quán)利要求1所述的方法,其特征在于,所述第一和第二指示是句柄。
11.如權(quán)利要求1所述的方法,還包括向虛擬存儲管理器發(fā)送描述所述第二指示的消肩、O
12.一種適用于在虛擬機(jī)環(huán)境中創(chuàng)建到用于分頁代碼或數(shù)據(jù)的I/O設(shè)備的多條路徑的系統(tǒng),包括至少一個處理器;以及通信地耦合到所述至少一個處理器的至少一個存儲器,所述存儲器存儲了能夠執(zhí)行以下操作的計算機(jī)可執(zhí)行指令請求輔助接口(520)的實例化,以及配置用于所述I/O的物理驅(qū)動器(700),其中所述 I/O設(shè)備能夠支持多個控制接口 ;從I/O虛擬化層接收到現(xiàn)有棧(910)的指針,現(xiàn)有棧包括對所述I/O設(shè)備的現(xiàn)有驅(qū)動器;實例化表示所述設(shè)備的對象;經(jīng)所述現(xiàn)有棧與所述I/O設(shè)備通信,以及配置用于所述I/O設(shè)備的新驅(qū)動器; 提供到所述對象和新驅(qū)動器的指針;向用于所述I/O設(shè)備的主接口(450)發(fā)送消息以將對所述I/O設(shè)備的控制讓于所述輔助接口 ;使用所述指針經(jīng)所述新驅(qū)動器和輔助接口將I/O重定向到所述I/O設(shè)備。
13.如權(quán)利要求13所述的系統(tǒng),其特征在于,所述與所述I/O設(shè)備通信還包括接收所述 I/O設(shè)備的特性以及分頁代碼和數(shù)據(jù)。
14.一種計算機(jī)可讀介質(zhì),所述計算機(jī)可讀介質(zhì)上存儲了用于在虛擬化I/O環(huán)境中創(chuàng)建用于存儲設(shè)備的替代I/O棧的計算機(jī)可執(zhí)行指令,其中所述存儲設(shè)備用于分頁代碼和數(shù)據(jù),所述替代棧是在利用存儲設(shè)備的分頁通過現(xiàn)有棧繼續(xù)進(jìn)行的同時被創(chuàng)建的,所述計算機(jī)可執(zhí)行指令包括用于以下的指令請求(1510)輔助接口的實例化以及配置用于存儲設(shè)備的輔助物理驅(qū)動器;接收(1512)到現(xiàn)有棧的句柄;使用所述句柄標(biāo)識所述現(xiàn)有棧,并經(jīng)所述現(xiàn)有棧與所述存儲設(shè)備通信(1514);實例化(1516)用于所述存儲設(shè)備的替代I/O棧,所述替代I/O棧包括表示所述存儲設(shè)備的對象和用于所述存儲設(shè)備的驅(qū)動器;報告(1518)到所述替代I/O棧的句柄;向用于所述存儲設(shè)備的主接口發(fā)送(1520)消息以將對所述存儲設(shè)備的控制讓于所述輔助接口。
15.如權(quán)利要求17所述的計算機(jī)可讀存儲介質(zhì),其特征在于,還包括經(jīng)所述替代I/O棧將I/O重定向到所述存儲設(shè)備。
全文摘要
揭示了用于在虛擬機(jī)分區(qū)中構(gòu)建設(shè)備驅(qū)動器棧的各種方面,該虛擬機(jī)分區(qū)物理上不控制由所述棧所表示的設(shè)備。在一實施例中,可實例化用于I/O設(shè)備的輔助接口和驅(qū)動器??烧埱髞碜訧/O虛擬化層的信息,該信息描述相關(guān)聯(lián)的驅(qū)動器可控制的設(shè)備。多路徑重定向?qū)涌商峁┑桨ㄓ糜谠揑/O設(shè)備的驅(qū)動器的現(xiàn)有棧的句柄。該現(xiàn)有棧然后可用于與設(shè)備通信并允許創(chuàng)建包括表示該設(shè)備和用于該設(shè)備的新的驅(qū)動器的新的棧。多通路重定向?qū)尤缓罂纱蜷_到新的棧的句柄并通知設(shè)備虛擬化層,設(shè)備虛擬化層然后可要求現(xiàn)有設(shè)備接口將對設(shè)備的控制讓于新創(chuàng)建的接口。
文檔編號G06F13/14GK102177509SQ200980140539
公開日2011年9月7日 申請日期2009年9月30日 優(yōu)先權(quán)日2008年10月9日
發(fā)明者J·奧辛斯 申請人:微軟公司