專利名稱:用于在虛擬化環(huán)境中處理i/o操作的方法和設(shè)備的制作方法
用于在虛擬化環(huán)境中處理I/o操作的方法和設(shè)備
背景技術(shù):
虛擬機(jī)體系結(jié)構(gòu)可在邏輯上對(duì)物理機(jī)分區(qū),以使得物理機(jī)的基本硬件可共享并且看起來就像是一個(gè)或多個(gè)獨(dú)立操作的虛擬機(jī)。輸入/輸出(I/o)虛擬化(IOV)可實(shí)現(xiàn)一個(gè)I/o裝置供多個(gè)虛擬機(jī)使用的能力。軟件全裝置仿真可以是I/O虛擬化的一個(gè)實(shí)例。I/O裝置的全仿真可使得虛擬機(jī)能夠再利用現(xiàn)有的裝置驅(qū)動(dòng)器。單根I/o虛擬化(SR-IOV)或任何其它資源分區(qū)解決方案可以是I/O虛擬化的另一個(gè)實(shí)例。將I/O裝置功能(例如,與數(shù)據(jù)移動(dòng)有關(guān)的I/O裝置功能)分區(qū)到多個(gè)虛擬接口(VI)中(其中每個(gè)功能指派給一個(gè)虛擬機(jī))可減少軟件仿真層中的I/o開銷。
附圖中舉例而不是限制性地示出本文描述的發(fā)明。為了簡(jiǎn)單且清楚地說明,圖中示出的元件不一定按比例繪制。例如,為清楚起見,一些元件的尺寸可能相對(duì)于其它元件有所夸大。此外,在認(rèn)為合適的情況下,圖中重復(fù)使用附圖標(biāo)記以指示對(duì)應(yīng)或類似的元件。圖I示出包括用于控制在訪客虛擬機(jī)中發(fā)起的I/O操作的服務(wù)虛擬機(jī)的計(jì)算平臺(tái)的實(shí)施例。圖2a示出用于存儲(chǔ)I/O操作的I/O描述符的描述符環(huán)結(jié)構(gòu)的實(shí)施例。圖2b示出用于存儲(chǔ)I/O操作的I/O描述符的描述符環(huán)結(jié)構(gòu)和影子描述符環(huán)結(jié)構(gòu)的實(shí)施例。圖3示出供I/O裝置進(jìn)行直接存儲(chǔ)器存取(DMA)的輸入/輸出存儲(chǔ)器管理單元(10MMU)表的實(shí)施例。圖4示出由訪客虛擬機(jī)寫入與I/O操作有關(guān)的I/O信息的方法的實(shí)施例。圖5示出通過服務(wù)虛擬機(jī)基于I/O信息處理I/O操作的方法的實(shí)施例。圖6a_6b不出通過服務(wù)虛擬機(jī)基于I/O信息處理I/O操作的方法的另一個(gè)實(shí)施例。
具體實(shí)施例方式以下描述敘述用于在虛擬化環(huán)境中處理I/O操作的技術(shù)。在以下描述中,闡述了眾多具體細(xì)節(jié),例如邏輯實(shí)現(xiàn)、偽代碼、用于指定操作數(shù)的方式、資源分區(qū)/共享/復(fù)制實(shí)現(xiàn)、系統(tǒng)組件的類型和相互關(guān)系以及邏輯分區(qū)/集成選擇,以便更加全面地了解本發(fā)明。然而,在沒有這些具體細(xì)節(jié)的情況下,也可實(shí)現(xiàn)本發(fā)明。在其它情況下,沒有詳細(xì)示出控制結(jié)構(gòu)、門級(jí)電路和全軟件指令序列,以免使本發(fā)明晦澀難懂。本領(lǐng)域技術(shù)人員通過所包含的描述將能實(shí)現(xiàn)合適的功能性,而無需過多試驗(yàn)。說明書中提到“一個(gè)實(shí)施例”、“實(shí)施例”、“實(shí)例實(shí)施例”等時(shí)表示,所描述的實(shí)施例可包括特定特征、結(jié)構(gòu)或特性,但不是每個(gè)實(shí)施例都一定要包括該特定特征、結(jié)構(gòu)或特性。而且,這些短語(yǔ)不一定指相同的實(shí)施例。此外,當(dāng)結(jié)合一個(gè)實(shí)施例描述特定特征、結(jié)構(gòu)或特性時(shí),認(rèn)為本領(lǐng)域技術(shù)人員知道結(jié)合其它實(shí)施例來實(shí)現(xiàn)該特征、結(jié)構(gòu)或特性,而不管是否有明確描述。本發(fā)明的實(shí)施例能以硬件、固件、軟件或其任意組合來實(shí)現(xiàn)。本發(fā)明的實(shí)施例也可作為存儲(chǔ)在機(jī)器可讀介質(zhì)上的指令來實(shí)現(xiàn),這些指令可由一個(gè)或多個(gè)處理器讀取和執(zhí)行。機(jī)器可讀介質(zhì)可包括用于存儲(chǔ)或傳送可供機(jī)器(如計(jì)算裝置)讀取的形式的信息的任何機(jī)制。例如,機(jī)器可讀介質(zhì)可包括只讀存儲(chǔ)器(ROM);隨機(jī)存取存儲(chǔ)器(RAM);磁盤存儲(chǔ)介質(zhì);光存儲(chǔ)介質(zhì);閃速存儲(chǔ)器裝置;電、光、聲或其它形式的傳播信號(hào)(例如,載波、紅外信號(hào)、數(shù)字信號(hào)等)及其它。圖I中示出在虛擬化環(huán)境中處理I/O操作的計(jì)算平臺(tái)100的實(shí)施例。計(jì)算平臺(tái)100的非窮盡實(shí)例列表可包括分布式計(jì)算系統(tǒng)、超級(jí)計(jì)算機(jī)、計(jì)算群集、大型計(jì)算機(jī)、微型計(jì)算機(jī)、個(gè)人計(jì)算機(jī)、工作站、服務(wù)器、便攜式計(jì)算機(jī)、膝上型計(jì)算機(jī)以及用于收發(fā)和處理數(shù)據(jù)的其它裝置。在該實(shí)施例中,計(jì)算平臺(tái)100可包括底層硬件機(jī)101,其具有一個(gè)或多個(gè)處理器 111、存儲(chǔ)器系統(tǒng)121、芯片組131、I/O裝置141和可能的其它組件。一個(gè)或多個(gè)處理器111可經(jīng)由諸如處理器總線(圖I中未示出)的一個(gè)或多個(gè)總線在通信上耦合到各個(gè)組件(例如,芯片組131)。處理器111可作為具有一個(gè)或多個(gè)處理核的集成電路(IC)來實(shí)現(xiàn),這一個(gè)或多個(gè)處理核可在合適的體現(xiàn)結(jié)構(gòu)下執(zhí)行代碼。存儲(chǔ)器系統(tǒng)121可存儲(chǔ)要由處理器111執(zhí)行的指令和數(shù)據(jù)。存儲(chǔ)器121的實(shí)例可包括以下半導(dǎo)體裝置中的一種或其任意組合例如同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(SDRAM)裝置、RAMBUS動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(RDRAM)裝置、雙倍數(shù)據(jù)速率(DDR)存儲(chǔ)器裝置、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)及閃速存儲(chǔ)器裝置。芯片組131可在一個(gè)或多個(gè)處理器111、存儲(chǔ)器121和諸如I/O裝置141的其它組件之間提供一個(gè)或多個(gè)通信路徑。I/O裝置141可包括但不限于經(jīng)由外圍組件互連(PCI)或PCI express (PCIe)總線與主機(jī)母板連接的PCI和/或PCIe裝置。I/O裝置141的實(shí)例可包括通用串行總線(USB)控制器、圖形適配器、音頻控制器、網(wǎng)絡(luò)接口控制器(NIC)、存儲(chǔ)
目.-rf* o計(jì)算平臺(tái)100還可包括虛擬機(jī)監(jiān)視器(VMM) 102,其負(fù)責(zé)將底層硬件機(jī)與上覆虛擬機(jī)(例如,服務(wù)虛擬機(jī)103、訪客虛擬機(jī)103^103^接口,以利于和管理虛擬機(jī)的多個(gè)操作系統(tǒng)(OS)(例如,服務(wù)虛擬機(jī)103的主機(jī)操作系統(tǒng)113、訪客虛擬機(jī)IOS1-IOSn的訪客操作系統(tǒng)113i-113n)共享底層物理資源。虛擬機(jī)監(jiān)視器的實(shí)例可包括Xen、ESX服務(wù)器、虛擬PC、虛擬服務(wù)器、Hper-V、ParalIe> OpenVZ、Qemu 等。在一個(gè)實(shí)施例中,I/O裝置141 (例如,網(wǎng)絡(luò)卡)可分區(qū)成數(shù)個(gè)功能部分,包括支持輸入/輸出虛擬化(IOV)體系結(jié)構(gòu)(例如,單根I0V)的控制實(shí)體(CE) Mltl和具有用于專用存取的運(yùn)行時(shí)資源(例如,網(wǎng)絡(luò)裝置中的隊(duì)列對(duì))的多個(gè)虛擬功能接口(VI)Ml1-Mlnt5CE和VI的實(shí)例可包括單根I/O虛擬化體系結(jié)構(gòu)或多根I/O虛擬化體系結(jié)構(gòu)下的物理功能和虛擬功能。CE還可配置和管理VI功能性。在一個(gè)實(shí)施例中,多個(gè)訪客虛擬機(jī)IOS1-IOSn可共享受CE 1410控制的物理資源,而每個(gè)訪客虛擬機(jī)IOS1-IOSn可指派有一個(gè)或多個(gè)VI141r141n。例如,訪客虛擬機(jī)103:可指派有VI 14110將明白,其它實(shí)施例可對(duì)于I/O裝置141的結(jié)構(gòu)實(shí)現(xiàn)其它技術(shù)。在一個(gè)實(shí)施例中,I/O裝置141可包括一個(gè)或多個(gè)VI,而沒有CE。例如,不具有分區(qū)能力的傳統(tǒng)NIC可包括在NULL CE條件下工作的單個(gè)VI。服務(wù)虛擬機(jī)103可加載有裝置模型114、CE驅(qū)動(dòng)器115和VI驅(qū)動(dòng)器116的代碼。裝置模型114可以是或者可以不是真實(shí)I/O裝置141的軟件仿真。CE驅(qū)動(dòng)器115可管理CE1410,CE Mltl與計(jì)算平臺(tái)100的初始化和運(yùn)行時(shí)期間的I/O裝置初始化和配置有關(guān)。取決于管理策略,VI驅(qū)動(dòng)器116可以是用于管理一個(gè)或多個(gè)VI裝置驅(qū)動(dòng)器。在一個(gè)實(shí)施例中,基于管理策略,VI驅(qū)動(dòng)器可管理分配給VI驅(qū)動(dòng)器可支持的訪客VM的資源,而CE驅(qū)動(dòng)器可管理全局活動(dòng)。每個(gè)訪客虛擬機(jī)IOS1-IOSn可加載有用于管理由VMM 102呈現(xiàn)的虛擬裝置的訪客裝置驅(qū)動(dòng)器(例如,訪客虛擬機(jī)IOS1的訪客裝置驅(qū)動(dòng)器IW1、或訪客虛擬機(jī)103n的訪客裝 置驅(qū)動(dòng)器116n)的代碼。訪客裝置驅(qū)動(dòng)器能夠或不能以與VI 141及其驅(qū)動(dòng)器116兼容的模式工作。在一個(gè)實(shí)施例中,訪客裝置驅(qū)動(dòng)器可以是傳統(tǒng)驅(qū)動(dòng)器。在一個(gè)實(shí)施例中,響應(yīng)于訪客虛擬機(jī)的訪客操作系統(tǒng)(例如,訪客VM IOS1的訪客OS Ini)加載訪客裝置驅(qū)動(dòng)器(例如,訪客裝置驅(qū)動(dòng)器Iiei),服務(wù)VM 103可運(yùn)行裝置模型114和VI驅(qū)動(dòng)器116的示例。例如,裝置模型114的示例可為訪客裝置驅(qū)動(dòng)器Iiei服務(wù),而VI驅(qū)動(dòng)器116的示例可控制指派給訪客VM 103:的VI Ml1。例如,如果訪客裝置驅(qū)動(dòng)器IW1是基于82571EB的NIC (由加利福尼亞圣克拉拉的英特爾公司制造的網(wǎng)絡(luò)控制器)的傳統(tǒng)驅(qū)動(dòng)器,并且指派給訪客VM 103J^VI Ml1是基于82571EB的NIC或與基于82571EB的NIC兼容或不兼容的其它類型的NIC,那么服務(wù)VM 103可運(yùn)行代表虛擬的基于82571EB的NIC的裝置模型114的示例以及用于控制VI Ml1 ( S卩,基于82571EB的NIC或與基于82571EB的NIC兼容或不兼容的其它類型的NIC)的VI驅(qū)動(dòng)器116的示例。將明白,為了說明而提供圖I中示出的實(shí)施例,并且其它技術(shù)可實(shí)現(xiàn)計(jì)算系統(tǒng)100的其它實(shí)施例。例如,裝置模型114可與VI驅(qū)動(dòng)器116或CE驅(qū)動(dòng)器結(jié)合,或?qū)⑺鼈儾⑷朐谝粋€(gè)盒內(nèi)等。它們可以按諸如OS內(nèi)核的特權(quán)模式或諸如OS用戶態(tài)(user land)的非特權(quán)模式運(yùn)行。服務(wù)VM甚至可分成多個(gè)VM,一個(gè)VM運(yùn)行CE,而另一個(gè)VM運(yùn)行裝置模型和VI驅(qū)動(dòng)器,或任意其它組合,其中在多個(gè)VM之間具有足夠通信。在一個(gè)實(shí)施例中,如果在訪客VM IOS1上運(yùn)行的應(yīng)用(例如,應(yīng)用117J指示I/O操作,那么訪客裝置驅(qū)動(dòng)器116:可以將與I/O操作有關(guān)的I/O信息寫入到指派給訪客VM 103:的緩沖器(圖I中未示出)中。例如,訪客裝置驅(qū)動(dòng)器Iie1可以將I/O描述符寫入到如圖2a所示的環(huán)結(jié)構(gòu)中,其中環(huán)結(jié)構(gòu)的一個(gè)條目對(duì)應(yīng)于一個(gè)I/O描述符。在一個(gè)實(shí)施例中,I/O描述符可以指示與數(shù)據(jù)分組有關(guān)的I/O操作。例如,如果訪客應(yīng)用Ini指示從訪客存儲(chǔ)器地址xxx-yyy讀取100個(gè)分組或?qū)?00個(gè)分組寫入到訪客存儲(chǔ)器地址xxx-yyy,那么訪客裝置驅(qū)動(dòng)器Iiei可以將100個(gè)I/O描述符寫入到圖2a的描述符環(huán)中。訪客裝置驅(qū)動(dòng)器Iie1可以從頭指針201開始將描述符寫入到描述符環(huán)中。在完成與I/O操作有關(guān)的描述符的寫入之后,訪客裝置驅(qū)動(dòng)器Iiei可以更新尾指針202。在一個(gè)實(shí)施例中,頭指針201和尾指針202可存儲(chǔ)在頭寄存器和尾寄存器(圖中未示出)中。在一個(gè)實(shí)施例中,描述符可以包括數(shù)據(jù)、I/O操作類型(讀取或?qū)懭?、用于VIHl1讀取數(shù)據(jù)或?qū)懭霐?shù)據(jù)的訪客存儲(chǔ)器地址、I/O操作狀態(tài)的狀態(tài)以及I/O操作所需的可能的其它信息。
在一個(gè)實(shí)施例中,如果訪客裝置驅(qū)動(dòng)器IW1不能以與指派給訪客VM 103:的VIMi1兼容的模式工作,例如,如果由于Vi Mi1和訪客裝置驅(qū)動(dòng)器Iie1支持不同的位格式和/或語(yǔ)義而導(dǎo)致Vi Mi1不能基于由訪客裝置驅(qū)動(dòng)器Iie1寫入的描述符來實(shí)現(xiàn)i/o操作,那么VI驅(qū)動(dòng)器116可生成影子環(huán)(如圖2b所示),并將遵照訪客VM 103:的體系結(jié)構(gòu)的描述符、頭指針和尾指針轉(zhuǎn)化為遵照VI Hl1的體系結(jié)構(gòu)的影子描述符(S-描述符)、影子頭指針(S-頭指針)和影子尾指針(S-尾指針),以使得VI Hl1可基于影子描述符來實(shí)現(xiàn)I/O操作。將明白,為了說明而提供圖2a和圖2b中示出的實(shí)施例,并且其它技術(shù)可實(shí)現(xiàn)I/O信息的其它實(shí)施例。例如,可在不同于圖2a和圖2b的環(huán)結(jié)構(gòu)的其它數(shù)據(jù)結(jié)構(gòu)(例如,哈希表、鏈接表等)中寫入I/O信息。又如,可針對(duì)接收和傳輸二者使用單個(gè)環(huán),或者可針對(duì)接收或傳輸使用單獨(dú)的環(huán)。IOMMU或類似的技術(shù)可允許I/O裝置141通過將從描述符環(huán)或影子描述符環(huán)中的描述符檢索的訪客地址重新映射到主機(jī)地址而直接存取存儲(chǔ)器系統(tǒng)121。圖3示出IOMMU表的一個(gè)實(shí)施例。諸如訪客VM 103:的訪客虛擬機(jī)可具有至少一個(gè)IOMMU表,其指示遵照訪 客VM的體系結(jié)構(gòu)的訪客存儲(chǔ)器地址與遵照主機(jī)計(jì)算系統(tǒng)的體系結(jié)構(gòu)的主機(jī)存儲(chǔ)器地址之 間的對(duì)應(yīng)的關(guān)系。VMM 102和服務(wù)VM 103可管理所有訪客虛擬機(jī)的IOMMU表。此外,IOMMU頁(yè)表可以用各種方法來建索引,例如用裝置標(biāo)識(shí)符(例如,PCIe系統(tǒng)中的總線裝置功能編號(hào))、訪客VM編號(hào)或IOMMU實(shí)現(xiàn)中所指定的任何其它方法來建索引。將明白,不同的實(shí)施例可以利用不同的技術(shù)來進(jìn)行存儲(chǔ)器存取。在一個(gè)實(shí)施例中,如果通過例如軟件解決方案使訪客地址等于主機(jī)地址,那么可以不使用I0MMU。在另一個(gè)實(shí)施例中,訪客裝置驅(qū)動(dòng)器可以與VMM 102 一起工作以通過利用類似于IOMMU表的映射表來將訪客地址轉(zhuǎn)化為主機(jī)地址。圖4示出通過訪客虛擬機(jī)來寫入與I/O操作有關(guān)的I/O信息的方法的實(shí)施例。以下描述通過將訪客VM 103:作為實(shí)例來進(jìn)行。應(yīng)了解,相同或類似的技術(shù)可適用于其它訪客VM。在方框401,在訪客VM IOS1上運(yùn)行的應(yīng)用Ini可指示I/O操作以例如將100個(gè)分組寫入到訪客存儲(chǔ)器地址xxx-yyy。在方框402,訪客裝置驅(qū)動(dòng)器Iiei可生成與I/O操作有關(guān)的I/O描述符并將其寫入到訪客VM 103:的描述符環(huán)(例如,如圖2a或2b所示的描述符環(huán))上,直到在方框403中將與I/O操作有關(guān)的所有描述符都寫入到描述符環(huán)中。在一個(gè)實(shí)施例中,訪客裝置驅(qū)動(dòng)器IW1可以從頭指針(例如,圖2a中的頭指針201或圖2b中的頭指針2201)開始寫入I/O描述符。在方框404,在將與I/O操作有關(guān)的所有描述符都寫入到緩沖器之后,訪客裝置驅(qū)動(dòng)器Iiei可更新尾指針(例如,圖2a中的尾指針202或圖2b中的尾指針2202)。圖5示出通過服務(wù)VM 103來處理I/O操作的方法的實(shí)施例。該實(shí)施例可在訪客虛擬機(jī)的訪客裝置驅(qū)動(dòng)器能夠以與VI和/或其指派給訪客虛擬機(jī)的驅(qū)動(dòng)器兼容的模式工作的狀況下應(yīng)用。例如,訪客裝置驅(qū)動(dòng)器是基于82571EB的NIC的傳統(tǒng)驅(qū)動(dòng)器,而VI是基于82571EB的NIC或與基于82571EB的NIC兼容的其它類型的NIC,如基于82576EB的NIC的虛擬功能。以下描述通過將訪客VM IOS1作為示例來進(jìn)行。應(yīng)了解,相同或類似的技術(shù)可適用于其它訪客VM。
在方框501,訪客VM 103:更新尾指針(例如,圖2a的尾指針202)可觸發(fā)虛擬機(jī)退出(例如,VMExit),VMM 102可捕獲虛擬機(jī)退出,以使得VMM 102可以將系統(tǒng)的控制權(quán)從訪客VM IOS1的訪客OS IU1轉(zhuǎn)移到服務(wù)VM 103的裝置模型114。在方框502,裝置模型114可響應(yīng)尾指針更新而調(diào)用VI驅(qū)動(dòng)器116。在方框503-506,VI驅(qū)動(dòng)器116可控制指派給訪客VM 103:的VI IH1以基于由訪客VM 103:寫入的I/O描述符(例如,圖2a的I/O描述符)來實(shí)現(xiàn)I/O操作。具體來說,在方框503,VI驅(qū)動(dòng)器116可調(diào)用VI IM1以便為I/O描述符做好準(zhǔn)備。在一個(gè)實(shí)施例中,VI驅(qū)動(dòng)器116可通過更新尾寄存器(圖中未示出)來調(diào)用VI 11410在方框504,VI 11七可從訪客VM 103:的描述符環(huán)(例如,圖2a中不出的描述符環(huán))中讀取描述符并如I/O描述符中所描述地那樣實(shí)現(xiàn)I/O操作,例如接收分組并將分組寫入到訪客存儲(chǔ)器地址XXX。在一個(gè)實(shí)施例中,VIIH1可讀取由描述符環(huán)的頭指針(例如,圖2a的頭指針201)所指的I/O描述符。在一個(gè)實(shí)施例中,VI IM1可利用IOMMU或類似技術(shù)來實(shí)現(xiàn)I/O操作的直接存儲(chǔ)器存取(DMA)。例如,VI1 IM1可從為訪客VM 103:生成的IOMMU表中獲得對(duì)應(yīng)于訪客存儲(chǔ)器地址的主機(jī)存儲(chǔ)器地址,并從存儲(chǔ)器系統(tǒng)121直接讀取分組或直接將分組寫入到存儲(chǔ)器系 統(tǒng)121。在另一個(gè)實(shí)施例中,如果在訪客地址與主機(jī)地址之間的固定映射下,訪客地址等于主機(jī)地址,那么VI IH1可在沒有IOMMU表的情況下實(shí)現(xiàn)直接存儲(chǔ)器存取。在方框505,VIIM1還可更新I/O描述符,例如I/O描述符中所包含的I/O操作的狀態(tài),以便指示實(shí)現(xiàn)了 I/0描述符。在一個(gè)實(shí)施例中,VI IM1可以或者可以不利用IOMMU表來進(jìn)行I/O描述符更新。VI IM1還可更新頭指針以便向前移動(dòng)頭指針并使其指向描述符環(huán)中的下一個(gè)I/O描述符。在方框506,VI IH1可確定是否到達(dá)尾部所指的I/O描述符。響應(yīng)于未到達(dá),VIIH1可繼續(xù)在方框504和505中從描述符環(huán)讀取I/O描述符并實(shí)現(xiàn)由I/O描述符所指示的I/O操作。響應(yīng)于到達(dá),VI IM1可在方框507通過例如向VMM 102發(fā)送中斷信號(hào)而告知VMM 1021/0操作已完成。在方框508,VMM 102可通過例如將中斷注入到服務(wù)VM 103而告知VI驅(qū)動(dòng)器1061/0操作已完成。在方框509,VI驅(qū)動(dòng)器116可保持VI IM1的狀態(tài)并告知裝置模型1141/0操作已完成。在方框510,裝置模型114可向訪客VM IU1發(fā)送虛擬中斷信號(hào),以使得訪客裝置驅(qū)動(dòng)器Iie1可處理該事件并告知應(yīng)用117:實(shí)現(xiàn)了 I/O操作。例如,訪客裝置驅(qū)動(dòng)器Iie1可告知應(yīng)用117i接收到數(shù)據(jù)并準(zhǔn)備好使用。在一個(gè)實(shí)施例中,裝置模型14還可更新頭寄存器(圖中未示出)以指示將描述符環(huán)的控制權(quán)轉(zhuǎn)移回到訪客裝置驅(qū)動(dòng)器116i。將明白,告知訪客裝置驅(qū)動(dòng)器Iie1可以按其它方式進(jìn)行,這可由裝置/驅(qū)動(dòng)器策略(例如在訪客裝置驅(qū)動(dòng)器禁用裝置中斷的情況下做出的裝置/驅(qū)動(dòng)器策略)確定。將明白,為了說明而提供所描述的實(shí)施例,并且其它技術(shù)可實(shí)現(xiàn)其它實(shí)施例。例如,取決于不同的VMM機(jī)制,VI IM1可以用不同的方式來告知上覆機(jī)I/O操作已完成。在一個(gè)實(shí)施例中,VI Ml1可直接告知服務(wù)VM 103而不是經(jīng)由VMM 102。在另一個(gè)實(shí)施例中,VI IM1可告知上覆機(jī)何時(shí)完成描述符環(huán)中所列的一個(gè)或多個(gè)而不是所有I/O操作,以使得可以及時(shí)告知訪客應(yīng)用完成了 I/O操作的一部分。圖6a_6b示出通過服務(wù)VM 103來處理I/O操作的方法的另一個(gè)實(shí)施例。該實(shí)施例可在訪客虛擬機(jī)的訪客裝置驅(qū)動(dòng)器不能以與VI和/或其指派給訪客虛擬機(jī)的驅(qū)動(dòng)器兼容的模式工作的狀況下應(yīng)用。以下描述通過將訪客VM 103:作為實(shí)例來進(jìn)行。應(yīng)了解,相同或類似的技術(shù)可適用于其它訪客VM。在方框601,VMM可捕獲在例如訪客裝置驅(qū)動(dòng)器116訪問虛擬裝置(例如,裝置模型114)時(shí)由訪客VM IOS1引起的虛擬機(jī)退出(例如,VMExit)。在方框602,VMM 102可將系統(tǒng)的控制權(quán)從訪客VM IOS1的訪客OS IU1轉(zhuǎn)移到服務(wù)VM 103的裝置模型114。在方框603,裝置模型114可以確定訪客裝置驅(qū)動(dòng)器Iie1完成將與I/O操作有關(guān)的I/O描述符寫入到描述符環(huán)(例如,圖2b的描述符環(huán))的事實(shí)是否觸發(fā)虛擬機(jī)退出。在一個(gè)實(shí)施例中,訪客VM IlS1可更新指示I/O描述符的末端的尾指針(例如,圖2b的尾指針2202)。在該情況下,裝置模型114可確定尾指針的更新是否觸發(fā)虛擬機(jī)退出。響應(yīng)于訪客裝置驅(qū)動(dòng)器Iie1完成I/O描述符的寫入的事實(shí)沒有觸發(fā)虛擬機(jī)退出,圖6a-6b的方法可回到方框601,g卩,VMM可捕獲下一個(gè)VM退出。響應(yīng)于訪客裝置驅(qū)動(dòng)器I Ie1完成I/O描述符的寫入的事實(shí)觸發(fā)虛擬機(jī)退出,在方框604,裝置模型114可調(diào)用VI驅(qū)動(dòng)器116以便將遵照訪客VM 103:的體系結(jié)構(gòu)的I/O描述符轉(zhuǎn)化為遵照指派給訪客VM 103: 的VI Hl1的體系結(jié)構(gòu)的影子I/O描述符,并將影子I/O描述符存儲(chǔ)到影子描述符環(huán)(例如,圖2b中示出的影子描述符環(huán))中。在方框605,VI驅(qū)動(dòng)器116可以將遵照訪客VM 103:的體系結(jié)構(gòu)的尾指針轉(zhuǎn)化為遵照VI Ml1的體系結(jié)構(gòu)的影子尾指針。在方框606_610,VI驅(qū)動(dòng)器116可控制VI IM1以基于由訪客VM IOS1寫入的I/O描述符來實(shí)現(xiàn)I/O操作。具體來說,在方框606,VI驅(qū)動(dòng)器116可調(diào)用VI IM1以便為影子描述符做好準(zhǔn)備。在一個(gè)實(shí)施例中,VI驅(qū)動(dòng)器116可通過更新影子尾指針(圖中未示出)來調(diào)用VI IM1。在方框607,VI IM1可從影子描述符環(huán)讀取影子I/O描述符,并如影子I/0描述符中所描述地那樣實(shí)現(xiàn)I/O操作,例如接收分組并將分組寫入到訪客存儲(chǔ)器地址XXX或從訪客存儲(chǔ)器地址XXX讀取分組并傳送分組。在一個(gè)實(shí)施例中,VI IM1可讀取由影子描述符環(huán)的影子頭指針(例如,圖2b的影子頭指針2201)所指的I/O描述符。在一個(gè)實(shí)施例中,VI IM1可利用IOMMU或類似的技術(shù)來實(shí)現(xiàn)I/O操作的直接存儲(chǔ)器存取。例如,VI1 IM1可從為訪客VM 103:生成的IOMMU表中獲得對(duì)應(yīng)于訪客存儲(chǔ)器地址的主機(jī)存儲(chǔ)器地址,并將所接收的分組直接寫入到存儲(chǔ)器系統(tǒng)121。在另一個(gè)實(shí)施例中,如果在訪客地址與主機(jī)地址之間的固定映射下,訪客地址等于主機(jī)地址,那么VI IH1可在沒有IOMMU表的情況下實(shí)現(xiàn)直接存儲(chǔ)器存取。在方框608,VI IM1還可更新影子I/O描述符,例如在影子I/O描述符中所包含的I/O操作的狀態(tài),以便指示已經(jīng)實(shí)現(xiàn)了 I/O描述符。在一個(gè)實(shí)施例中,VI IH1可利用IOMMU表來進(jìn)行I/O描述符更新。VI IH1還可更新影子頭指針以便向前移動(dòng)影子頭指針并使其指向影子描述符環(huán)中的下一個(gè)影子I/O描述符。在方框609,VI驅(qū)動(dòng)器116可將更新后的影子I/O描述符和影子頭指針轉(zhuǎn)化回為I/O描述符和頭指針,并用新的I/O描述符和頭指針來更新描述符環(huán)。在方框610,VI IH1可確定是否到達(dá)影子尾指針?biāo)傅挠白覫/O描述符。響應(yīng)于未到達(dá),VI IM1可繼續(xù)在方框607-609中從影子描述符環(huán)讀取影子I/O描述符并實(shí)現(xiàn)由影子I/O描述符所描述的I/O操作。響應(yīng)于到達(dá),VI IM1可在方框611通過例如向VMM 102發(fā)送中斷信號(hào)而告知VMM 102I/O操作已完成。然后,VMM 102可通過例如將中斷注入到服務(wù)VM 103而告知VI驅(qū)動(dòng)器1061/0操作已完成。在方框612,VI驅(qū)動(dòng)器116可保持VI IH1的狀態(tài)并告知裝置模型1141/0操作已完成。在方框613,裝置模型114可以向訪客裝置驅(qū)動(dòng)器Iiei發(fā)送虛擬中斷信號(hào),以使得訪客裝置驅(qū)動(dòng)器Iie1可以處理該事件并告知應(yīng)用In1實(shí)現(xiàn)了 I/O操作。例如,訪客裝置驅(qū)動(dòng)器Iie1可告知應(yīng)用In1接收到數(shù)據(jù)并準(zhǔn)備好使用。在一個(gè)實(shí)施例中,裝置模型14還可更新頭寄存器(圖中未示出)以指示將描述符環(huán)的控制權(quán)轉(zhuǎn)移回到訪客裝置驅(qū)動(dòng)器116i。將明白,告知訪客裝置驅(qū)動(dòng)器Iie1可以用其它方式進(jìn)行,這可由裝置/驅(qū)動(dòng)器策略(例如在訪客裝置驅(qū)動(dòng)器禁用裝置中斷的情況下做出的裝置/驅(qū)動(dòng)器策略)確定。將明白,為了說明而提供所描述的實(shí)施例,并且其它技術(shù)可實(shí)現(xiàn)其它實(shí)施例。例如,取決于不同的VMM機(jī)制,VI IM1可以用不同的方式來告知上覆機(jī)I/O操作已完成。在一個(gè)實(shí)施例中,VI ^^可直接告知服務(wù)VM 103而不是經(jīng)由MM 102。在另一個(gè)實(shí)施例中,VI IM1可告知上覆機(jī)何時(shí)完成描述符環(huán)中所列的一個(gè)或多個(gè)而不是所有I/O操作,以使得可以及時(shí)告知訪客應(yīng)用完成了 I/O操作的一部分。盡管上文參考實(shí)例實(shí)施例描述了本發(fā)明的某些特征,但本描述不是要按限制意義來理解。對(duì)于本發(fā)明所屬領(lǐng)域的技術(shù)人員來說顯而易見的實(shí)例實(shí)施例的各種修改以及本發(fā)明的其它實(shí)施例視為落在本發(fā)明的精神和范圍內(nèi)。權(quán)利要求
1.一種由服務(wù)虛擬機(jī)操作的方法,包括 通過所述服務(wù)虛擬機(jī)的裝置模型來調(diào)用所述服務(wù)虛擬機(jī)的裝置驅(qū)動(dòng)器以便控制輸入/輸出(I/o)裝置的一部分通過利用I/o信息來實(shí)現(xiàn)I/O操作,所述I/O信息與所述I/O操作有關(guān)并由訪客虛擬機(jī)寫入; 其中所述裝置模型、所述裝置驅(qū)動(dòng)器和所述I/o裝置的所述部分指派給所述訪客虛擬機(jī)。
2.如權(quán)利要求I所述的方法,還包括如果所述I/O裝置的所述部分不能與所述訪客虛擬機(jī)的體系結(jié)構(gòu)兼容地工作,那么 通過所述裝置驅(qū)動(dòng)器將遵照所述訪客虛擬機(jī)的體系結(jié)構(gòu)的I/o信息轉(zhuǎn)化為遵照所述I/o裝置的所述部分的體系結(jié)構(gòu)的影子I/O信息;以及 通過所述裝置驅(qū)動(dòng)器將遵照所述I/o裝置的所述部分的體系結(jié)構(gòu)的更新后的影子I/O信息轉(zhuǎn)化為遵照所述訪客虛擬機(jī)的體系結(jié)構(gòu)的更新后的I/o信息,其中所述I/O裝置的所述部分響應(yīng)于所述I/o操作的實(shí)現(xiàn)而更新所述更新后的I/O信息。
3.如權(quán)利要求I所述的方法,還包括 在實(shí)現(xiàn)所述I/o操作之后,由所述裝置驅(qū)動(dòng)器保持所述I/O裝置的所述部分的狀態(tài)。
4.如權(quán)利要求I所述的方法,還包括 由所述裝置模型告知所述訪客虛擬機(jī)實(shí)現(xiàn)了所述I/O操作。
5.如權(quán)利要求I所述的方法,其中在數(shù)據(jù)結(jié)構(gòu)中從可受所述I/O裝置的所述部分控制的頭指針開始寫入所述I/O信息。
6.如權(quán)利要求I所述的方法,其中通過所述訪客虛擬機(jī)來更新指示I/O信息的末端的尾指針。
7.—種設(shè)備,包括 裝置模型和裝置驅(qū)動(dòng)器,其中所述裝置模型調(diào)用所述裝置驅(qū)動(dòng)器以控制輸入/輸出(I/O)裝置的一部分通過利用I/O信息來實(shí)現(xiàn)I/O操作,所述I/O信息與所述I/O操作有關(guān)并由訪客虛擬機(jī)寫入,并且其中所述裝置模型、所述裝置驅(qū)動(dòng)器和所述I/O裝置的所述部分指派給所述訪客虛擬機(jī)。
8.如權(quán)利要求7所述的設(shè)備,其中,如果所述I/O裝置的所述部分不能與所述訪客虛擬機(jī)的體系結(jié)構(gòu)兼容地工作,那么所述裝置驅(qū)動(dòng)器 將遵照所述訪客虛擬機(jī)的體系結(jié)構(gòu)的I/O信息轉(zhuǎn)化為遵照所述I/O裝置的所述部分的體系結(jié)構(gòu)的影子I/O信息;以及 將遵照所述I/O裝置的所述部分的體系結(jié)構(gòu)的更新后的影子I/O信息轉(zhuǎn)化為遵照所述訪客虛擬機(jī)的體系結(jié)構(gòu)的更新后的I/O信息,其中所述I/O裝置的所述部分響應(yīng)于所述I/O操作的實(shí)現(xiàn)而更新所述更新后的I/O信息。
9.如權(quán)利要求7所述的設(shè)備,其中在實(shí)現(xiàn)所述I/O操作之后,所述裝置驅(qū)動(dòng)器還保持所述I/o裝置的所述部分的狀態(tài)。
10.如權(quán)利要求7所述的設(shè)備,其中所述裝置模型還告知所述訪客虛擬機(jī)實(shí)現(xiàn)了所述I/o操作。
11.如權(quán)利要求7所述的設(shè)備,其中在數(shù)據(jù)結(jié)構(gòu)中從可受所述I/O裝置的所述部分控制的頭指針開始寫入所述I/O信息。
12.如權(quán)利要求7所述的設(shè)備,其中通過所述訪客虛擬機(jī)來更新指示I/O信息的末端的尾指針。
13.—種包括多個(gè)指令的機(jī)器可讀介質(zhì),所述多個(gè)指令在執(zhí)行時(shí)導(dǎo)致系統(tǒng) 通過服務(wù)虛擬機(jī)的裝置模型來調(diào)用所述服務(wù)虛擬機(jī)的裝置驅(qū)動(dòng)器以控制輸入/輸出(I/O)裝置的一部分通過利用I/O信息來實(shí)現(xiàn)I/O操作,所述I/O信息與所述I/O操作有關(guān)并由訪客虛擬機(jī)寫入, 其中所述裝置模型、所述裝置驅(qū)動(dòng)器和所述I/O裝置的所述部分指派給所述訪客虛擬機(jī)。
14.如權(quán)利要求13所述的機(jī)器可讀介質(zhì),其中,如果所述I/O裝置的所述部分不能與所述訪客虛擬機(jī)的體系結(jié)構(gòu)兼容地工作,那么所述多個(gè)指令還導(dǎo)致所述系統(tǒng) 通過所述裝置驅(qū)動(dòng)器將遵照所述訪客虛擬機(jī)的體系結(jié)構(gòu)的I/O信息轉(zhuǎn)化為遵照所述I/O裝置的所述部分的體系結(jié)構(gòu)的影子I/O信息;以及 通過所述裝置驅(qū)動(dòng)器將遵照所述I/O裝置的所述部分的體系結(jié)構(gòu)的更新后的影子I/O信息轉(zhuǎn)化為遵照所述訪客虛擬機(jī)的體系結(jié)構(gòu)的更新后的I/O信息,其中所述I/O裝置的所述部分響應(yīng)于所述I/O操作的實(shí)現(xiàn)而更新所述更新后的I/O信息。
15.如權(quán)利要求13所述的機(jī)器可讀介質(zhì),其中所述多個(gè)指令還導(dǎo)致所述系統(tǒng) 在實(shí)現(xiàn)所述I/O操作之后,通過所述裝置驅(qū)動(dòng)器保持所述I/O裝置的所述部分的狀態(tài)。
16.如權(quán)利要求13所述的機(jī)器可讀介質(zhì),其中所述多個(gè)指令還導(dǎo)致所述系統(tǒng) 通過所述裝置模型告知所述訪客虛擬機(jī)實(shí)現(xiàn)了所述I/O操作。
17.如權(quán)利要求13所述的機(jī)器可讀介質(zhì),其中在數(shù)據(jù)結(jié)構(gòu)中從可受所述I/O裝置的所述部分控制的頭指針開始寫入所述I/O信息。
18.如權(quán)利要求13所述的機(jī)器可讀介質(zhì),其中通過所述訪客虛擬機(jī)來更新指示I/O信息的末端的尾指針。
19.一種系統(tǒng),包括 包括輸入/輸出(I/O)裝置的硬件機(jī);以及 用于將所述硬件機(jī)與多個(gè)虛擬機(jī)接口的虛擬機(jī)監(jiān)視器,其中所述虛擬機(jī)包括 用于寫入與輸入/輸出(I/O)操作有關(guān)的I/O信息的訪客虛擬機(jī);以及 包括裝置模型和裝置驅(qū)動(dòng)器的服務(wù)虛擬機(jī),其中所述裝置模型調(diào)用所述裝置驅(qū)動(dòng)器以控制所述I/o裝置的一部分通過利用所述I/O信息來實(shí)現(xiàn)所述I/O操作,并且其中所述裝置模型、所述裝置驅(qū)動(dòng)器和所述I/o裝置的所述部分指派給所述訪客虛擬機(jī)。
20.如權(quán)利要求19所述的系統(tǒng),其中,如果所述I/O裝置的所述部分不能與所述訪客虛擬機(jī)的體系結(jié)構(gòu)兼容地工作,那么所述服務(wù)虛擬機(jī)的裝置驅(qū)動(dòng)器還 將遵照所述訪客虛擬機(jī)的體系結(jié)構(gòu)的I/o信息轉(zhuǎn)化為遵照所述I/O裝置的所述部分的體系結(jié)構(gòu)的影子I/o信息;以及 將遵照所述I/o裝置的至少部分的體系結(jié)構(gòu)的更新后的影子I/O信息轉(zhuǎn)化為遵照所述訪客虛擬機(jī)的體系結(jié)構(gòu)的更新后的I/o信息,其中所述I/O裝置的所述部分響應(yīng)于所述I/O操作的實(shí)現(xiàn)而更新所述更新后的I/O信息。
21.如權(quán)利要求20所述的系統(tǒng),其中所述訪客虛擬機(jī)從通過所述I/O裝置的所述部分更新的頭指針開始將所述I/O信息寫入數(shù)據(jù)結(jié)構(gòu)中。
22.如權(quán)利要求20所述的系統(tǒng),其中所述訪客虛擬機(jī)更新指示所述I/O信息的末端的尾指針。
23.如權(quán)利要求20所述的系統(tǒng),其中,如果檢測(cè)到更新了所述尾指針,那么所述虛擬機(jī)監(jiān)視器將所述系統(tǒng)的控制權(quán)從所述訪客虛擬機(jī)轉(zhuǎn)移到所述服務(wù)虛擬機(jī)。
24.如權(quán)利要求20所述的系統(tǒng),其中所述I/O裝置的所述部分響應(yīng)于實(shí)現(xiàn)了所述I/O操作而更新所述I/O信息。
25.如權(quán)利要求20所述的系統(tǒng),其中在實(shí)現(xiàn)了所述I/O操作之后,所述裝置驅(qū)動(dòng)器保持所述I/O裝置的所述部分的狀態(tài)。
26.如權(quán)利要求20所述的系統(tǒng),其中所述裝置模型告知所述訪客虛擬機(jī)實(shí)現(xiàn)了 所述I/O操作。
全文摘要
用于在虛擬化環(huán)境中處理I/O操作的機(jī)器可讀介質(zhì)、方法、設(shè)備和系統(tǒng)。在一些實(shí)施例中,系統(tǒng)包括包括輸入/輸出(I/O)裝置的硬件機(jī);以及用于將硬件機(jī)與多個(gè)虛擬機(jī)接口的虛擬機(jī)監(jiān)視器。在一些實(shí)施例中,虛擬機(jī)包括用于寫入與輸入/輸出(I/O)操作有關(guān)的I/O信息的訪客虛擬機(jī);以及包括裝置模型和裝置驅(qū)動(dòng)器的服務(wù)虛擬機(jī),其中裝置模型調(diào)用裝置驅(qū)動(dòng)器以控制I/O裝置的一部分利用I/O信息來實(shí)現(xiàn)I/O操作,并且其中裝置模型、裝置驅(qū)動(dòng)器和I/O裝置的那部分指派給訪客虛擬機(jī)。
文檔編號(hào)G06F9/445GK102754076SQ200980163176
公開日2012年10月24日 申請(qǐng)日期2009年12月24日 優(yōu)先權(quán)日2009年12月24日
發(fā)明者Y·董 申請(qǐng)人:英特爾公司