專利名稱:一種用于多根共享系統(tǒng)的直接i/o 虛擬化方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及i/o虛擬化技術(shù),特別是涉及多個根節(jié)點上的不同虛擬機對i/o設(shè)備虛擬化的共享技術(shù)。
背景技術(shù):
在傳統(tǒng)數(shù)據(jù)中心或云計算中心中,每個刀片服務(wù)器都擁有獨立的I/O資源,如網(wǎng)卡、HBA適配器等。然而計算與I/O資源的緊密耦合,使得兩類資源的擴展同時受到服務(wù)器空間的限制。此外,高性能I/O設(shè)備(如IOGigE網(wǎng)卡)僅依附一臺服務(wù)器,無疑降低了其利用效率,提高了系統(tǒng)總成本。為解決上述問題,就要解除計算與I/O資源的緊密耦合,其關(guān)鍵就是實現(xiàn)I/O設(shè)備在多個服務(wù)器之間的共享。近年來,I/O設(shè)備的共享技術(shù)得到了變革性的發(fā)展,行業(yè)標(biāo)準(zhǔn)組織PCI特別興趣小 組 PCI-SIG 先后制定了 PCI-SIG Single Root I/O Virtualization (SR-IOV :單根 IO 虛擬化)和 PCI-SIG Multi-Root 1/0 Virtualization (MR-I0V :多根 10 虛擬化)規(guī)范。具備SR-IOV能力的PCI Express設(shè)備能夠被運行在同一宿主機上的不同虛擬機(VM/Guest)所共享,并為虛擬機提供接近本機的1/0性能。目前SR-IOV已得到1/0設(shè)備廠商的廣泛支持,如支持SR-IOV的千兆以太網(wǎng)卡、10G以太網(wǎng)卡、HBA適配器等。具備MR-IOV能力的PCI Express設(shè)備能夠被多個宿主機上運行的若干虛擬機(VM/Guest)所共享,MR-IOV技術(shù)可以完全解除計算與1/0間的緊密耦合。但由于PCI-SIG的MR-IOV協(xié)議對原有系統(tǒng)的較大改動(包括對PCIe基本協(xié)議、PCIe設(shè)備結(jié)構(gòu)和PCIe交換機結(jié)構(gòu)的修改),難以被工業(yè)界接受。因此亟需一種僅對已有系統(tǒng)進行少量修改,就可實現(xiàn)MR-IOV所定義系統(tǒng)功能的方法,并基于該方法構(gòu)建多根I/o虛擬化共享系統(tǒng)。本發(fā)明給出了一種用于多根I/O虛擬化共享系統(tǒng)的直接I/o虛擬化方法和裝置,實現(xiàn)本身具備多虛擬機共享能力的1/0設(shè)備功能被多個根節(jié)點獨立發(fā)現(xiàn)、直接使用和動態(tài)共享,同時為各根節(jié)點對I/o設(shè)備資源的共享操作提供隔離和保護。
發(fā)明內(nèi)容
為解決上述問題,本發(fā)明提供了一種用于多根I/o虛擬化共享系統(tǒng)的直接1/0虛擬化方法,包括步驟1,通過對物理1/0設(shè)備功能的邏輯抽象,建立邏輯虛擬化功能鏡像,替代I/O設(shè)備功能作為從屬根節(jié)點的設(shè)備占位符,實現(xiàn)I/o設(shè)備中各功能被多個根節(jié)點獨立發(fā)現(xiàn)和配置;步驟2,通過硬件重映射方式,實現(xiàn)設(shè)備功能在從屬根節(jié)點PCIe域和主控制根節(jié)點之間的映射,為各根節(jié)點在訪問操作共享的物理I/o設(shè)備時提供直通模式,同時為各根節(jié)點的共享提供隔離和保護;步驟3,通過虛擬PCIe設(shè)備熱插拔控制操作,能夠在不影響根節(jié)點其他工作的情況下,完成向根節(jié)點動態(tài)刪除和增加I/O設(shè)備功能,實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點動
態(tài)共享。所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化方法,所述步驟I邏輯抽象包括I/O設(shè)備功能的實體抽象,所述I/O設(shè)備功能的實體抽象,是指對I/O設(shè)備中功能的配置空間頭的備份,包括對配置空間頭中基址類配置寄存器的定義備份和非基址類只讀配置寄存器的數(shù)據(jù)備份;I/O設(shè)備功能的行為模擬,所述I/O設(shè)備功能的行為模擬,是指對I/O設(shè)備中功能的配置響應(yīng)的模擬。所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化方法,包括
所述基址類配置寄存器,包括通用基址寄存器和擴展ROM基址寄存器;所述非基址類只讀配置寄存器,是指配置空間頭中除了基址類寄存器之外的其他只讀寄存器。所述基址類配置寄存器定義備份,指為設(shè)備中每個功能存儲一份基址類配置寄存器定義,以備從屬根節(jié)點循環(huán)讀寫配置;所述非基址類配置只讀寄存器數(shù)據(jù)備份,指存儲一份非基址類只讀配置寄存器的數(shù)據(jù),為設(shè)備中所有功能共享,以備從屬根節(jié)點循環(huán)讀識別。所述的多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化方法,所述I/O設(shè)備功能的實體抽象還包括步驟41,系統(tǒng)上電啟動、初始化,復(fù)位指向基址類寄存器偏移指針為10h,復(fù)位指向擴展PCIe配置空間偏移指針為IOOh ;轉(zhuǎn)向步驟42 ;步驟42,直接I/O虛擬化裝置接收主控制根節(jié)點發(fā)來的配置事務(wù)包,接收事務(wù)包后轉(zhuǎn)向步驟43 ;步驟43,提取并記錄配置事務(wù)包中指示目標(biāo)設(shè)備ID號和寄存器號,然后轉(zhuǎn)向步驟44 ;步驟44,配置事務(wù)包判定,如果配置事務(wù)包是讀取配置空間頭中非基址類寄存器讀請求包,設(shè)置等待完成包的標(biāo)識符指示為非基址類只讀寄存器讀返回;如果是向BAR偏移指針指定的基址類寄存器寫全I的寫請求包,設(shè)置等待完成包的標(biāo)識符指示為基址類寄存器讀返回;如果是讀取擴展PCIe配置空間偏移指針指定的寄存器讀請求包,設(shè)置等待完成包的標(biāo)識符指示為擴展PCIe配置空間讀返回;否則,保持設(shè)置等待完成包的標(biāo)識符為默認初始值。操作完成后轉(zhuǎn)向步驟45;步驟45,接收I/O設(shè)備發(fā)來的帶數(shù)據(jù)的完成包,接收到事務(wù)包后轉(zhuǎn)向步驟46 ;步驟46,等待完成包的標(biāo)識符判定,如果當(dāng)前等待完成包的標(biāo)識符判定指示為擴展PCIe配置空間讀返回,轉(zhuǎn)向步驟47 ;如果指示為基址類寄存器讀返回,轉(zhuǎn)向步驟410 ;如果指示為非基址類只讀寄存器讀返回,轉(zhuǎn)向步驟411 ;否則,復(fù)位等待完成包的標(biāo)識符,轉(zhuǎn)向步驟42 ;步驟47,解析完成包數(shù)據(jù)中的擴展功能ID以及下一個功能指針,如果擴展功能ID指示為SR-IOV擴展功能,轉(zhuǎn)向步驟48 ;否則轉(zhuǎn)向步驟49 ;步驟48,修改基址類寄存器偏移指針的起始地址,使用擴展PCIe配置空間偏移指針加上第一個VF BAR在SR-IOV擴展功能寄存器組中的固定偏移,修改基址類寄存器偏移指針的起始地址;指示一個SR-IOV設(shè)備,并記錄完成包中的完成者ID為SR-IOV設(shè)備中PF的ID號;操作完成后,轉(zhuǎn)向步驟49 ;步驟49,使用步驟47提取的下一個功能指針更新擴展PCIe配置空間偏移指針;操作完成后,復(fù)位等待完成包的標(biāo)識符,轉(zhuǎn)向步驟42 ;步驟410,解析完成包中數(shù)據(jù),備份基址類寄存器定義,并更新基址類寄存器偏移指針指向下一個基址寄存器;如果指示SR-IOV設(shè)備的標(biāo)識符為假,則將該基址類寄存器定義備份到目標(biāo)設(shè)備ID號和基址類寄存器偏移指針對應(yīng)的寄存器中;如果指示SR-IOV設(shè)備的標(biāo)識符為真,且完成者ID等于SR-IOV中PF的ID,則將該基址類寄存器定義備份到每個設(shè)備的基址類寄存器偏移指針對應(yīng)的寄存器中;否則,不備份該基址類寄存器定義。操作完 成后,復(fù)位等待完成包的標(biāo)識符,轉(zhuǎn)向步驟42 ;步驟411,解析完成包中數(shù)據(jù),并存儲到由目標(biāo)寄存器號指示的寄存器中;操作完成后,復(fù)位等待完成包的標(biāo)識符,轉(zhuǎn)向步驟42。所述的多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化方法,所述I/O設(shè)備功能的行為模擬還包括步驟51,直接I/O虛擬化裝置接收從屬根節(jié)點發(fā)來的循環(huán)配置事務(wù)包,接收事務(wù)包后轉(zhuǎn)向步驟52 ;步驟52,提取并記錄配置事務(wù)包中指示的寄存器號,然后轉(zhuǎn)向步驟53 ;步驟53,配置寄存器類型判定。如果步驟52中的寄存器號指示為基址類配置寄存器,轉(zhuǎn)向步驟54 ;如果指示為非基址類只讀配置寄存器,轉(zhuǎn)向步驟55 ;否則,轉(zhuǎn)向步驟56 ;步驟54,基址類配置寄存器訪問本地處理。如果是配置讀請求包,則提取目標(biāo)設(shè)備ID號和寄存器號對應(yīng)的數(shù)據(jù),組成完成包返回給相應(yīng)的從屬根節(jié)點;否則,如果是配置寫請求包,提取請求包中的數(shù)據(jù)寫存儲到目標(biāo)設(shè)備ID號和寄存器號對應(yīng)的寄存器。操作完成后轉(zhuǎn)向步驟51 ;步驟55,非基址類配置寄存器訪問本地處理。如果是配置讀請求包,則提取寄存器號對應(yīng)的數(shù)據(jù),組成完成包返回給相應(yīng)的從屬根節(jié)點;否則,如果是配置寫請求包,提取請求包中的數(shù)據(jù)寫存儲到寄存器號對應(yīng)的寄存器;操作完成后轉(zhuǎn)向步驟51 ;步驟56,將事務(wù)包透傳給物理I/O設(shè)備,由物理I/O設(shè)備相關(guān)功能進行配置響應(yīng)。如果是配置讀請求包,則接收I/o設(shè)備發(fā)來的完成包返回給相應(yīng)的從屬根節(jié)點;否則,如果是配置寫請求包,I/o設(shè)備不返回任何響應(yīng);然后轉(zhuǎn)向步驟51 ;本發(fā)明公開一種用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化裝置,包括下行事務(wù)包發(fā)送模塊,所述下行事務(wù)包發(fā)送模塊用于接收從根節(jié)點發(fā)來的事務(wù)包,通過對事務(wù)包的解析和重映射,將事務(wù)包分發(fā)給I/O虛擬化模塊和物理I/O設(shè)備;上行事務(wù)包接收模塊,所述上行事務(wù)包接收模塊用于接收從I/O設(shè)備、I/O虛擬化模塊和虛擬熱插拔控制模塊傳來的事務(wù)包,通過對事務(wù)包的解析和重映射,將事務(wù)包發(fā)送給根節(jié)點;I/O虛擬化模塊,所述I/O虛擬化模塊通過對物理I/O設(shè)備功能的邏輯抽象,建立邏輯虛擬化功能鏡像來替代I/o設(shè)備功能作為從屬根節(jié)點的設(shè)備占位符,實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點獨立發(fā)現(xiàn)和配置;
直接I/O重映射模塊,所述直接I/O重映射模塊通過硬件重映射的方式,實現(xiàn)設(shè)備功能在從屬根節(jié)點PCIe域和主控制根節(jié)點PCIe域之間的ID轉(zhuǎn)換和地址窗口轉(zhuǎn)換,實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點直接使用;虛擬熱插拔控制模塊,所述虛擬熱插拔控制模塊通過摸擬PCIe熱插拔控制操作,完成向根節(jié)點動態(tài)刪除和增加I/O設(shè)備功能,實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點動態(tài)共
享。 所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化裝置,所述下行事務(wù)包發(fā)送模塊包括下行事務(wù)包子解析模塊,所述下行事務(wù)包解析子模塊用于接收根節(jié)點發(fā)來的事務(wù)包,并對事務(wù)包的根節(jié)點和類型進行解析判定,如果是配置包,還要對其配置操作的寄存器進行解析判定;下行事務(wù)包重映射子模塊,所述下行事務(wù)包重映射子模塊用于對從屬根節(jié)點發(fā)來的事務(wù)包進行ID號轉(zhuǎn)換或者地址轉(zhuǎn)換;下行事務(wù)包分發(fā)子模塊,所述下行事務(wù)包分發(fā)子模塊用于對事務(wù)包進行分發(fā)處理,如果是主控制根節(jié)點發(fā)來的配置包同時傳遞給I/o虛擬化模塊和物理I/O設(shè)備,如果是從屬根節(jié)點發(fā)來的對配置基址類和非基址類只讀寄存器的配置事務(wù)包只傳遞給I/o虛擬化模塊,其他事務(wù)包只傳遞給物理I/o設(shè)備。所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化裝置,所述上行事務(wù)包接收模塊包括上行事務(wù)包解析子模塊,所述上行事務(wù)包解析子模塊用于接收物理I/O設(shè)備發(fā)來的事務(wù)包,對事務(wù)包的類型進行解析判定,如果是完成包,將其復(fù)制傳遞給I/o虛擬化模塊;上行事務(wù)包重映射子模塊,所述上行事務(wù)包重映射子模塊用于對事務(wù)包的進行ID號轉(zhuǎn)換;上行事務(wù)包調(diào)度子模塊,所述上行事務(wù)包調(diào)度子模塊用于將從I/O設(shè)備、I/O虛擬化模塊和虛擬熱插拔控制模塊傳來的事務(wù)包調(diào)度傳給根節(jié)點。所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化裝置,所述I/O虛擬化模塊包括配置事務(wù)解析子模塊,所述配置事務(wù)解析子模塊用于接收并解析根節(jié)點發(fā)來的配置事務(wù)包和I/o設(shè)備發(fā)來的完成包;配置寄存器備份子模塊,所述配置寄存器模塊實現(xiàn)基址類和非基址類只讀配置寄存器的備份,實現(xiàn)對I/o設(shè)備功能的實體抽象;配置事務(wù)模擬響應(yīng)子模塊,所述配置事務(wù)模擬響應(yīng)子模塊用于替代I/O設(shè)備向根節(jié)點發(fā)送完成事務(wù)包,實現(xiàn)對I/o設(shè)備功能的行為模擬。本發(fā)明的有益效果為所述直接I/O虛擬化方法和裝置,能夠在不對操作系統(tǒng)以及設(shè)備驅(qū)動或者應(yīng)用程序進行修改,完全兼容現(xiàn)有軟件的標(biāo)準(zhǔn)執(zhí)行模式的情況下,實現(xiàn)I/o設(shè)備各功能被被多個根節(jié)點獨立發(fā)現(xiàn)和配置,并為各根節(jié)點在訪問操作共享的物理I/o設(shè)備時提供直通模式,獲得近乎本機的I/o性能,同時為各根節(jié)點對I/O設(shè)備的共享操作提供隔離和保護,以及支持I/o設(shè)備各功能在多個根節(jié)點之間動態(tài)共享。
圖I是多根I/O虛擬化共享系統(tǒng)的結(jié)構(gòu)示意圖;圖2是PCIe設(shè)備的配置空間示意圖;圖3是SR-IOV擴展功能寄存器組示意圖;圖4是設(shè)備功能的實體抽象方法的流程圖;圖5是設(shè)備功能的行為模擬方法的流程圖;圖6是直接I/O虛擬化裝置的結(jié)構(gòu)示意圖;圖7是本發(fā)明多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化方法。
具體實施例方式下面給出本發(fā)明的具體實施方式
,結(jié)合附圖對本發(fā)明做出了詳細描述。為了實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點獨立發(fā)現(xiàn)和直接使用,并獲得近乎本機的I/o性能,本發(fā)明提供了一種用于多根I/o虛擬化共享系統(tǒng)的直接I/O虛擬化方法和裝置。所述直接I/o虛擬化方法,包括通過對物理I/O設(shè)備功能的邏輯抽象,建立邏輯虛擬化功能鏡像,替代I/o設(shè)備功能作為從屬根節(jié)點的設(shè)備占位符,實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點獨立發(fā)現(xiàn)和配置;通過硬件重映射方式,實現(xiàn)設(shè)備功能在從屬根節(jié)點PCIe域和主控制根節(jié)點之間的映射,為各根節(jié)點在訪問操作共享的物理I/O設(shè)備時提供直通模式,同時還為各根節(jié)點的共享提供隔離和保護;通過虛擬PCIe設(shè)備熱插拔控制操作,能夠在不影響根節(jié)點其他工作的情況下,實現(xiàn)從根節(jié)點動態(tài)刪除和增加I/O設(shè)備功能。圖I描繪了多根I/O虛擬化共享系統(tǒng)的結(jié)構(gòu)示意圖。多根I/O虛擬化共享系統(tǒng)主要包括三個部分根節(jié)點子系統(tǒng)、I/o設(shè)備子系統(tǒng)和多根I/O虛擬化共享控制器。多根IO虛擬化共享控制器通過PCIe接口協(xié)議將根節(jié)點子系統(tǒng)和I/O設(shè)備子系統(tǒng)耦合在一起,實現(xiàn)一個I/O設(shè)備資源被多個根節(jié)點直接共享。多根I/O虛擬化共享系統(tǒng)中的根節(jié)點子系統(tǒng)包含多個根節(jié)點,每個根節(jié)點由根聯(lián)合體(Root Complex, RC)及其連接的CPU組(CPU set)和內(nèi)存(Mem)組成。其中,運行有PCIe管理相關(guān)軟件的根節(jié)點稱之為主控制根節(jié)點(Master Root Node, mRN),主控制根節(jié)點只有一個(下文使用mRNO標(biāo)識),管理和分配系統(tǒng)中的所有1/0設(shè)備資源;其他根節(jié)點稱為從屬根節(jié)點(Slave Root Node, sRN),從屬根節(jié)點可以有多個(下文使用sRNl,sRN2,…,sRNn標(biāo)識),并根據(jù)主控制根節(jié)點的分配,擁有一定1/0資源的獨立使用權(quán)。根節(jié)點上可以運行多個同構(gòu)或者異構(gòu)虛擬機(Virtual Machine, VM),虛擬機管理程序(Virtual MachineManager, VMM)負責(zé)調(diào)度主控制根節(jié)點分配的1/0資源為各VM所用。多根1/0虛擬化共享系統(tǒng)中的1/0設(shè)備子系統(tǒng)包含多個1/0設(shè)備,各1/0設(shè)備具備同時為多個虛擬機提供服務(wù)的能力,可以是包含一個物理功能(Physical Function, PF)及其對應(yīng)的多個虛擬功能(Virtual Function, VF)的SR-IOV設(shè)備或者包含多個PF及其對應(yīng)的多個VF的SR-IOV設(shè)備,也可以是多功能1/0設(shè)備等。多根1/0虛擬化共享系統(tǒng)中的多根1/0虛擬化共享控制器包由若干個PCIe上游端口(PCIe Upstream Port)、PCIe 多根交換機和若干個 PCIe 下游端口(PCIe DownstreamPort)三個部分組成。其中,PCIe上游端口包含符合PCI-Express基本規(guī)范中的PCIe端口類型定義的PCIe控制器,它負責(zé)與根節(jié)點子系統(tǒng)的互連,以及PCIe單根環(huán)境和PCIe多根環(huán)境之間的事務(wù)包轉(zhuǎn)換;PCIe多根交換機,實質(zhì)是由多個PCI橋建立的N+M個端口的交換機,通過為每個根節(jié)點建立一個1+M端口的虛擬PCIe交換機,實現(xiàn)各根節(jié)點與M個I/O設(shè)備的邏輯連接;PCIe下游端口,包含符合PCI-Express基本規(guī)范中的PCIe端口類型定義的PCIe控制器和直接I/O虛擬化裝置兩個功能部分,負責(zé)與I/O設(shè)備子系統(tǒng)的互連,以及PCIe單根環(huán)境和PCIe多根環(huán)境之間的事務(wù)包轉(zhuǎn)換,實現(xiàn)各根節(jié)點直接訪問物理I/O設(shè)備功倉泛。 圖2描述了一個PCIe設(shè)備的配置空間。每個功能都提供了一個配置空間,僅限初始化軟件和錯誤處理軟件用來進行設(shè)備識別、初始化配置和故障性錯誤處理。PCIe設(shè)備的配置空間分為三部分=PCI兼容的配置空間頭、PCI兼容標(biāo)準(zhǔn)功能配置空間和PCIe擴展功能配置空間。PCI兼容的配置空間頭定義了用于識別驅(qū)動程序的設(shè)備標(biāo)識寄存器(如廠商ID,設(shè)備ID,修訂ID,子系統(tǒng)ID,子系統(tǒng)廠商ID等),以及其他操作軟件訪問設(shè)備寄存器時必須使用的定義I/O和Memory空間的基址寄存器BAR(Base Address Register)等。PCI兼容標(biāo)準(zhǔn)功能配置空間和PCIe擴展功能配置空間中有許多可選的功能寄存器組用來定義設(shè)備的功能特性。PCI兼容標(biāo)準(zhǔn)功能配置空間定義了包括PCIe功能寄存器組(PCI ExpressCapability Structure),消息信號中斷功能寄存器組(MSI/MSI-X Cap Structure)以及電源管理功能寄存器組(Power Management Capability Structure)等,其中PCI e功能寄存器組和電源管理功能寄存器組是所有PCIe設(shè)備功能必需實現(xiàn)的標(biāo)準(zhǔn)功能寄存器組。PCIe擴展功能配置空間定義了包括SR-IOV功能寄存器組(SR-IOV Capability Structure)、高級錯誤報告功能寄存器組(Advanced Error Reporting Capability Structure)、虛通道功能寄存器組(Virtual Channel Capability Structure)等。其中,SR-IOV功能寄存器組是SR-IOV設(shè)備中PF功能必需實現(xiàn)的。圖3描述了 SR-IOV擴展功能寄存器組。SR-IOV設(shè)備是包含物理功能PF及其對應(yīng)的多個虛擬功能VF的PCIe設(shè)備。其中,PF是標(biāo)準(zhǔn)的PCIe功能,具有豐富的物理資源和完備的配置空間,能被系統(tǒng)軟件及驅(qū)動程序等發(fā)現(xiàn)和訪問。VF是”輕量級”的PCIe功能,也有自己獨立的配置空間,所謂“輕量級”體現(xiàn)在兩個方面一是VF只需具備數(shù)據(jù)遷移所必需的物理資源,如收發(fā)隊列等;二是VF的配置空間是經(jīng)過“謹慎精簡”過的PCIe配置空間。VF通過自被“精簡”的配置空間不能被系統(tǒng)軟件發(fā)現(xiàn)和初始化的。VF被“精簡”的部分域值,如用于識別驅(qū)動程序的設(shè)備標(biāo)識寄存器廠商ID,設(shè)備ID等,沒有被定義,使用時共享PF的配置空間對應(yīng)域的值。而訪問VF的1/0和Memory地址空間的BAR地址寄存器由SR-IOV擴展功能寄存器組定義。如圖4所示,所述的SR-IOV擴展功能寄存器,位于PF配置空間中。其中,字段“第一個VF偏移”和“VF步進”定義了與PF相關(guān)聯(lián)的VF的ID號;字段“VFBAR0”至“VF BAR5”定義了 VF所需的BAR地址。每個VF BARb (b=0, I,……,5)定義了所有VF相應(yīng)BARb的相同需求,并記錄了第一個VF的BARb的起始地址,其他VF相應(yīng)BARb的起始地址由公式VF BARb+(v-1)*(VF BARb范圍大小)計算獲得。SR-IOV設(shè)備在單根虛擬化環(huán)境中使用時,VF需通過VMM或者Hypervisor模擬向虛擬機呈現(xiàn)完整的配置空間,才能實現(xiàn)在多個虛擬機之間共享。本發(fā)明使用硬件模擬的方式,通過對物理1/0設(shè)備功能的邏輯抽象,建立對應(yīng)的邏輯虛擬化功能鏡像,實現(xiàn)了 1/0設(shè)備功能被多個根節(jié)點獨立發(fā)現(xiàn)和配置。所述的邏輯抽象方法,包括對I/o設(shè)備功能的實體抽象方法和行為模擬方法。其中,I/o設(shè)備功能的實體抽象,是指對I/O設(shè)備中功能的配置空間頭的備份,包括對配置空間頭中基址類配置寄存器的定義備份和非基址類只讀配置寄存器的數(shù)據(jù)備份。所述基址類配置寄存器,包括通用基址寄存器(BAR)和擴展ROM基址寄存器。直接I/O虛擬化裝置為設(shè)備中每個功能存儲一份基址類配置寄存器定義,以備從屬根節(jié)點循環(huán)讀寫配置。所述非基址類只讀配置寄存器,是指配置空間頭中除了基址類寄存器之外的其他只讀寄存器。直接I/O虛擬化裝置只存儲一份非基址類只讀配置寄存器的數(shù)據(jù),為設(shè)備中所有功能共享,以備從屬根節(jié)點循環(huán)讀識別。所述I/O設(shè)備功能的行為模擬方法,是指對I/O設(shè)備中功能的配置響應(yīng)的模擬。如圖7所示,本發(fā)明公開一種用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化方法,包括步驟1,通過對物理I/O設(shè)備功能的邏輯抽象,建立邏輯虛擬化功能鏡像,替代I/O設(shè)備功能作為從屬根節(jié)點的設(shè)備占位符,實現(xiàn)I/o設(shè)備中各功能被多個根節(jié)點獨立發(fā)現(xiàn)和 配置;步驟2,通過硬件重映射方式,實現(xiàn)設(shè)備功能在從屬根節(jié)點PCIe域和主控制根節(jié)點之間的映射,為各根節(jié)點在訪問操作共享的物理I/o設(shè)備時提供直通模式,同時為各根節(jié)點的共享提供隔離和保護;步驟3,通過虛擬PCIe設(shè)備熱插拔控制操作,能夠在不影響根節(jié)點其他工作的情況下,完成向根節(jié)點動態(tài)刪除和增加I/o設(shè)備功能,實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點動
態(tài)共享。所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化方法,所述步驟I邏輯抽象包括I/O設(shè)備功能的實體抽象,所述I/O設(shè)備功能的實體抽象,是指對I/O設(shè)備中功能的配置空間頭的備份,包括對配置空間頭中基址類配置寄存器的定義備份和非基址類只讀配置寄存器的數(shù)據(jù)備份;I/O設(shè)備功能的行為模擬,所述I/O設(shè)備功能的行為模擬,是指對I/O設(shè)備中功能的配置響應(yīng)的模擬。所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化方法,包括所述基址類配置寄存器,包括通用基址寄存器和擴展ROM基址寄存器;所述非基址類只讀配置寄存器,是指配置空間頭中除了基址類寄存器之外的其他只讀寄存器。所述基址類配置寄存器定義備份,指為設(shè)備中每個功能存儲一份基址類配置寄存器定義,以備從屬根節(jié)點循環(huán)讀寫配置;所述非基址類配置只讀寄存器數(shù)據(jù)備份,指存儲一份非基址類只讀配置寄存器的數(shù)據(jù),為設(shè)備中所有功能共享,以備從屬根節(jié)點循環(huán)讀識別。圖4描述了 I/O設(shè)備功能的實體抽象方法的流程圖,包括以下步驟a)上電啟動,初始化,復(fù)位指向基址類寄存器偏移指針為10h,復(fù)位指向擴展PCIe配置空間偏移指針為100h。轉(zhuǎn)向步驟b)。b)直接I/O虛擬化裝置接收主控制根節(jié)點發(fā)來的配置事務(wù)包,接收事務(wù)包后轉(zhuǎn)向步驟c )。
c)提取并記錄配置事務(wù)包中指示目標(biāo)設(shè)備ID號和寄存器號,然后轉(zhuǎn)向步驟d)。d)配置事務(wù)包判定,如果配置事務(wù)包是讀取配置空間頭中非基址類寄存器讀請求包,設(shè)置等待完成包的標(biāo)識符指示為非基址類只讀寄存器讀返回;如果是向BAR偏移指針指定的基址類寄存器寫全I的寫請求包,設(shè)置等待完成包的標(biāo)識符指示為基址類寄存器讀返回;如果是讀取擴展PCIe配置空間偏移指針指定的寄存器讀請求包,設(shè)置等待完成包的標(biāo)識符指示為擴展PCIe配置空間讀返回;否則,保持設(shè)置等待完成包的標(biāo)識符為默認初始值。操作完成后轉(zhuǎn)向步驟e)。e)接收I/O設(shè)備發(fā)來的帶數(shù)據(jù)的完成包,接收到事務(wù)包后轉(zhuǎn)向步驟f)。f)等待完成包的標(biāo)識符判定,如果當(dāng)前等待完成包的標(biāo)識符判定指示為擴展PCIe配置空間讀返回,轉(zhuǎn)向步驟g);如果指示為基址類寄存器讀返回,轉(zhuǎn)向步驟j);如果指示為非基址類只讀寄存器讀返回,轉(zhuǎn)向步驟k);否則,復(fù)位等待完成包的標(biāo)識符,轉(zhuǎn)向步驟b)。
g)解析完成包數(shù)據(jù)中的擴展功能ID以及下一個功能指針,如果擴展功能ID指示為SR-IOV擴展功能,轉(zhuǎn)向步驟h);否則轉(zhuǎn)向i)。h)修改基址類寄存器偏移指針的起始地址,使用擴展PCIe配置空間偏移指針加上第一個VF BAR在SR-IOV擴展功能寄存器組中的固定偏移,修改基址類寄存器偏移指針的起始地址;指示一個SR-IOV設(shè)備,并記錄完成包中的完成者ID為SR-IOV設(shè)備中PF的ID號。操作完成后,轉(zhuǎn)向步驟i)。i)使用步驟g)提取的下一個功能指針更新擴展PCIe配置空間偏移指針。操作完成后,復(fù)位等待完成包的標(biāo)識符,轉(zhuǎn)向步驟b )。j)解析完成包中數(shù)據(jù),備份基址類寄存器定義,并更新基址類寄存器偏移指針指向下一個基址寄存器。如果指示SR-IOV設(shè)備的標(biāo)識符為假,則將該基址類寄存器定義備份到目標(biāo)設(shè)備ID號和基址類寄存器偏移指針對應(yīng)的寄存器中;如果指示SR-IOV設(shè)備的標(biāo)識符為真,且完成者ID等于SR-IOV中PF的ID,則將該基址類寄存器定義備份到每個設(shè)備的基址類寄存器偏移指針對應(yīng)的寄存器中;否則,不備份該基址類寄存器定義。操作完成后,復(fù)位等待完成包的標(biāo)識符,轉(zhuǎn)向步驟b )。k)解析完成包中數(shù)據(jù),并存儲到由目標(biāo)寄存器號指示的寄存器中。操作完成后,復(fù)位等待完成包的標(biāo)識符,轉(zhuǎn)向步驟b )。圖5描述了 I/O設(shè)備功能的行為模擬方法的流程圖,包括以下步驟a)直接I/O虛擬化裝置接收從屬根節(jié)點發(fā)來的循環(huán)配置事務(wù)包,接收事務(wù)包后轉(zhuǎn)向步驟b )。b)提取并記錄配置事務(wù)包中指示的寄存器號,然后轉(zhuǎn)向步驟c)c)配置寄存器類型判定。如果步驟b)中的寄存器號指示為基址類配置寄存器,轉(zhuǎn)向步驟d);如果指示為非基址類只讀配置寄存器,轉(zhuǎn)向步驟e);否則,轉(zhuǎn)向步驟f);d)基址類配置寄存器訪問本地處理。如果是配置讀請求包,則提取目標(biāo)設(shè)備ID號和寄存器號對應(yīng)的數(shù)據(jù),組成完成包返回給相應(yīng)的從屬根節(jié)點;否則,如果是配置寫請求包,提取請求包中的數(shù)據(jù)寫存儲到目標(biāo)設(shè)備ID號和寄存器號對應(yīng)的寄存器。操作完成后轉(zhuǎn)向步驟a)。e)非基址類配置寄存器訪問本地處理。如果是配置讀請求包,則提取寄存器號對應(yīng)的數(shù)據(jù),組成完成包返回給相應(yīng)的從屬根節(jié)點;否則,如果是配置寫請求包,提取請求包中的數(shù)據(jù)寫存儲到寄存器號對應(yīng)的寄存器。操作完成后轉(zhuǎn)向步驟a)。f)將事務(wù)包透傳給物理I/O設(shè)備,由物理I/O設(shè)備相關(guān)功能進行配置響應(yīng)。如果是配置讀請求包,則接收I/o設(shè)備發(fā)來的完成包返回給相應(yīng)的從屬根節(jié)點;否則,如果是配置寫請求包,I/o設(shè)備不返回任何響應(yīng);然后轉(zhuǎn)向步驟i)。圖6描述了多根I/O虛擬化共享系統(tǒng)中直接I/O虛擬化裝置結(jié)構(gòu)示意圖。直接I/o虛擬化裝置位于多根I/O虛擬化共享控制器中的PCIe下游端口,由下行事務(wù)包發(fā)送模塊、上行事務(wù)包接收模塊,I/O虛擬化模塊、直接I/O重映射模塊和虛擬熱插拔控制模塊組成。其中,下行事務(wù)包發(fā)送模塊主要負責(zé)接收根節(jié)點發(fā)來的事務(wù)包,對事務(wù)包的根節(jié)點、類型以及配置包操作的寄存器進行解析判定;并對從屬根節(jié)點發(fā)來的事務(wù)包進行ID號轉(zhuǎn)換或者地址轉(zhuǎn)換;最后對事務(wù)包進行分發(fā)處理,如果是主控制根節(jié)點發(fā)來的配置包同時傳遞給I/O虛擬化模塊和物理I/O設(shè)備,如果是從屬根節(jié)點發(fā)來的對配置基址類和非基址類只讀寄存器的配置事務(wù)包只傳遞給I/O虛擬化模塊,其他事務(wù)包 只傳遞給物理I/O設(shè)備。上行事務(wù)包接收模塊主要負責(zé)接收物理I/O設(shè)備發(fā)來的事務(wù)包,對事務(wù)包的類型進行解析判定,將其中的完成包復(fù)制傳遞給I/O虛擬化模塊;并對事務(wù)包的進行ID號轉(zhuǎn)換;最后將從物理I/O設(shè)備、I/O虛擬化模塊和虛擬熱插拔控制模塊傳來的事務(wù)包調(diào)度傳送給根節(jié)點。I/O虛擬化模塊包含了描述PCIe設(shè)備配置空間的基址類寄存器和非基址類只讀寄存器;它通過接收并解析根節(jié)點發(fā)來的配置事務(wù)包和I/O設(shè)備發(fā)來的完成包,并對其中的基址類和非基址類只讀配置寄存器進行備份,描述了 N個對應(yīng)的邏輯虛擬功能映像LVF (Logic Virtual Function, LVF),進而實現(xiàn)了對I/O設(shè)備功能的實體抽象;當(dāng)接收到從屬根節(jié)點發(fā)來的對所述基址類和非基址類只讀寄存器的操作時,I/O虛擬化模塊提取備份的值替代I/O設(shè)備向根節(jié)點發(fā)送完成事務(wù)包,實現(xiàn)對I/O設(shè)備功能的行為模擬。這樣,通過截取和模擬響應(yīng)從屬根節(jié)點對I/O設(shè)備中功能單元的枚舉發(fā)現(xiàn)和初始化配置,使用邏輯虛擬功能映像LVF替代I/O設(shè)備中的各功能作為從屬根節(jié)點的設(shè)備占位符,向從屬根節(jié)點呈現(xiàn)一個個透明的設(shè)備功能,不僅改變了 SR-IOV設(shè)備中VF不能被系統(tǒng)初始化軟件獨立發(fā)現(xiàn)的境遇,使得SR-IOV設(shè)備中各功能被多個根節(jié)點獨立發(fā)現(xiàn)和配置,同時也防止了從屬根節(jié)點覆蓋主控制根節(jié)點對物理I/O設(shè)備功能的關(guān)鍵配置,保護了主控制節(jié)點對I/O設(shè)備資源的控制權(quán)。PCIe設(shè)備中的功能通常都用一個由總線號BUS/設(shè)備號DEVICE/功能號FUNCI0N組成的ID(B/D/F)來標(biāo)識,并被映射到系統(tǒng)的內(nèi)存地址空間中。在多根I/O虛擬化共享系統(tǒng)上電后,主控制根節(jié)點首先將對I/O子系統(tǒng)中的所有I/O設(shè)備進行枚舉發(fā)現(xiàn)和初始化配置,同時也為設(shè)備功能分配了其在主控制根節(jié)點PCIe域中的ID(B/D/F)號和所占據(jù)的內(nèi)存地址窗口。當(dāng)I/O設(shè)備功能被分配給從屬根節(jié)點使用時,從屬根節(jié)點也會分配其在所屬的從屬根節(jié)點PCIe域中的ID(B/D/F)號和所占據(jù)的內(nèi)存地址窗口。這兩組初始化的配置信息分別存在物理設(shè)備功能中和邏輯虛擬功能映像LVF中。直接I/O虛擬化裝置中的直接I/O重映射,通過硬件重映射的方式,實現(xiàn)設(shè)備功能的ID號和內(nèi)存地址在從屬根節(jié)點PCIe域和主控制根節(jié)點PCIe域之間的轉(zhuǎn)換,為各根節(jié)點在訪問操作共享的物理I/O設(shè)備時提供直通模式,同時還為各根節(jié)點的共享提供隔離和保護,根節(jié)點不能訪問操作所分配到的I/O資源之外的其他I/O資源。在多根I/O虛擬化共享系統(tǒng)運行過程中,由于各根節(jié)點的負載不均衡,需要對I/O資源進行合理的再分配。對I/O資源的再分配實質(zhì)是向從屬根節(jié)點動態(tài)插入一個設(shè)備功能,或者從一個根節(jié)點動態(tài)拔除一個設(shè)備功能,再將該設(shè)備功能插入到另一個根節(jié)點的過程。直接I/O虛擬化裝置中的虛擬熱插拔控制模塊,通過模擬PCIe設(shè)備熱插拔控制操作,能夠在不影響其他根節(jié)點工作的情況下,實現(xiàn)從根節(jié)點動態(tài)刪除和增加I/O設(shè)備功能,即實現(xiàn)I/O設(shè)備功能在根節(jié)點之間的動態(tài)共享。當(dāng)接收到從某個從屬根節(jié)點回收設(shè)備功能的指令時,虛擬熱插拔控制向該從屬根節(jié)點發(fā)起一個指示設(shè)備功能拔除的虛擬熱插拔事件,對應(yīng)的根節(jié)點接收到該事件,并作出熱插拔允許響應(yīng),則完成設(shè)備功能的回收操作。當(dāng)接收到向某個根節(jié)點分配設(shè)備功能的指令時,虛擬熱插拔控制向該根節(jié)點發(fā)起一個指示設(shè)備功能插入的虛擬熱插拔事件,對應(yīng)的根節(jié)點接收到該事件,并作出熱插拔允許響應(yīng),則完成設(shè)備功能再分配的操作。本發(fā)明公開一種用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化裝置,包括 下行事務(wù)包發(fā)送模塊,所述下行事務(wù)包發(fā)送模塊用于接收從根節(jié)點發(fā)來的事務(wù)包,通過對事務(wù)包的解析和重映射,將事務(wù)包分發(fā)給I/o虛擬化模塊和物理I/O設(shè)備;上行事務(wù)包接收模塊,所述上行事務(wù)包接收模塊用于接收從I/O設(shè)備、I/O虛擬化模塊和虛擬熱插拔控制模塊傳來的事務(wù)包,通過對事務(wù)包的解析和重映射,將事務(wù)包發(fā)送給根節(jié)點;I/O虛擬化模塊,所述I/O虛擬化模塊通過對物理I/O設(shè)備功能的邏輯抽象,建立邏輯虛擬化功能鏡像來替代I/o設(shè)備功能作為從屬根節(jié)點的設(shè)備占位符,實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點獨立發(fā)現(xiàn)和配置;直接I/O重映射模塊,所述直接I/O重映射模塊通過硬件重映射的方式,實現(xiàn)設(shè)備功能在從屬根節(jié)點PCIe域和主控制根節(jié)點PCIe域之間的ID轉(zhuǎn)換和地址窗口轉(zhuǎn)換,實現(xiàn)I/0設(shè)備中各功能被多個根節(jié)點直接使用;虛擬熱插拔控制模塊,所述虛擬熱插拔控制模塊通過摸擬PCIe熱插拔控制操作,完成向根節(jié)點動態(tài)刪除和增加I/O設(shè)備功能,實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點動態(tài)共享。所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化裝置,所述下行事務(wù)包發(fā)送模塊包括下行事務(wù)包子解析模塊,所述下行事務(wù)包解析子模塊用于接收根節(jié)點發(fā)來的事務(wù)包,并對事務(wù)包的根節(jié)點和類型進行解析判定,如果是配置包,還要對其配置操作的寄存器進行解析判定;下行事務(wù)包重映射子模塊,所述下行事務(wù)包重映射子模塊用于對從屬根節(jié)點發(fā)來的事務(wù)包進行ID號轉(zhuǎn)換或者地址轉(zhuǎn)換;下行事務(wù)包分發(fā)子模塊,所述下行事務(wù)包分發(fā)子模塊用于對事務(wù)包進行分發(fā)處理,如果是主控制根節(jié)點發(fā)來的配置包同時傳遞給I/O虛擬化模塊和物理I/O設(shè)備,如果是從屬根節(jié)點發(fā)來的對配置基址類和非基址類只讀寄存器的配置事務(wù)包只傳遞給I/O虛擬化模塊,其他事務(wù)包只傳遞給物理I/O設(shè)備。所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化裝置,所述上行事務(wù)包接收模塊包括上行事務(wù)包解析子模塊,所述上行事務(wù)包解析子模塊用于接收物理I/O設(shè)備發(fā)來的事務(wù)包,對事務(wù)包的類型進行解析判定,如果是完成包,將其復(fù)制傳遞給I/o虛擬化模塊;上行事務(wù)包重映射子模塊,所述上行事務(wù)包重映射子模塊用于對事務(wù)包的進行ID號轉(zhuǎn)換;上行事務(wù)包調(diào)度子模塊,所述上行事務(wù)包調(diào)度子模塊用于將從I/O設(shè)備、I/O虛擬化模塊和虛擬熱插拔控制模塊傳來的事務(wù)包調(diào)度傳給根節(jié)點。所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化裝置,所述I/O虛擬化模塊包括配置事務(wù)解析子模塊,所述配置事務(wù)解析子模塊用于接收并解析根節(jié)點發(fā)來的配置事務(wù)包和I/O設(shè)備發(fā)來的完成包;
配置寄存器備份子模塊,所述配置寄存器模塊實現(xiàn)基址類和非基址類只讀配置寄存器的備份,實現(xiàn)對I/O設(shè)備功能的實體抽象;配置事務(wù)模擬響應(yīng)子模塊,所述配置事務(wù)模擬響應(yīng)子模塊用于替代I/O設(shè)備向根節(jié)點發(fā)送完成事務(wù)包,實現(xiàn)對I/O設(shè)備功能的行為模擬。本領(lǐng)域的技術(shù)人員在不脫離權(quán)利要求書確定的本發(fā)明的精神和范圍的條件下,還可以對以上內(nèi)容進行各種各樣的修改。因此本發(fā)明的范圍并不僅限于以上的說明,而是由權(quán)利要求書的范圍來確定的。
權(quán)利要求
1.一種用于多根I/o虛擬化共享系統(tǒng)的直接I/O虛擬化方法,其特征在于,包括 步驟1,通過對物理I/o設(shè)備功能的邏輯抽象,建立邏輯虛擬化功能鏡像,替代I/O設(shè)備功能作為從屬根節(jié)點的設(shè)備占位符,實現(xiàn)I/o設(shè)備中各功能被多個根節(jié)點獨立發(fā)現(xiàn)和配置; 步驟2,通過硬件重映射方式,實現(xiàn)設(shè)備功能在從屬根節(jié)點PCIe域和主控制根節(jié)點之間的映射,為各根節(jié)點在訪問操作共享的物理I/O設(shè)備時提供直通模式,同時為各根節(jié)點的共享提供隔離和保護; 步驟3,通過虛擬PCIe設(shè)備熱插拔控制操作,能夠在不影響根節(jié)點其他工作的情況下,完成向根節(jié)點動態(tài)刪除和增加I/O設(shè)備功能,實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點動態(tài)共享。
2.如權(quán)利要求I所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化方法,其特征在于,所述步驟I邏輯抽象包括 I/O設(shè)備功能的實體抽象,所述I/O設(shè)備功能的實體抽象,是指對I/O設(shè)備中功能的配置空間頭的備份,包括對配置空間頭中基址類配置寄存器的定義備份和非基址類只讀配置寄存器的數(shù)據(jù)備份; I/o設(shè)備功能的行為模擬,所述I/O設(shè)備功能的行為模擬,是指對I/O設(shè)備中功能的配置響應(yīng)的模擬。
3.如權(quán)利要求2所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化方法,其特征在于,包括 所述基址類配置寄存器,包括通用基址寄存器和擴展ROM基址寄存器; 所述非基址類只讀配置寄存器,是指配置空間頭中除了基址類寄存器之外的其他只讀寄存器。
所述基址類配置寄存器定義備份,指為設(shè)備中每個功能存儲一份基址類配置寄存器定義,以備從屬根節(jié)點循環(huán)讀寫配置; 所述非基址類配置只讀寄存器數(shù)據(jù)備份,指存儲一份非基址類只讀配置寄存器的數(shù)據(jù),為設(shè)備中所有功能共享,以備從屬根節(jié)點循環(huán)讀識別。
4.如權(quán)利要求2所述的多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化方法,其特征在于,所述I/O設(shè)備功能的實體抽象還包括 步驟41,系統(tǒng)上電啟動、初始化,復(fù)位指向基址類寄存器偏移指針為10h,復(fù)位指向擴展PCIe配置空間偏移指針為IOOh ;轉(zhuǎn)向步驟42 ; 步驟42,直接I/O虛擬化裝置接收主控制根節(jié)點發(fā)來的配置事務(wù)包,接收事務(wù)包后轉(zhuǎn)向步驟43 ; 步驟43,提取并記錄配置事務(wù)包中指示目標(biāo)設(shè)備ID號和寄存器號,然后轉(zhuǎn)向步驟44 ; 步驟44,配置事務(wù)包判定,如果配置事務(wù)包是讀取配置空間頭中非基址類寄存器讀請求包,設(shè)置等待完成包的標(biāo)識符指示為非基址類只讀寄存器讀返回;如果是向BAR偏移指針指定的基址類寄存器寫全I的寫請求包,設(shè)置等待完成包的標(biāo)識符指示為基址類寄存器讀返回;如果是讀取擴展PCIe配置空間偏移指針指定的寄存器讀請求包,設(shè)置等待完成包的標(biāo)識符指示為擴展PCIe配置空間讀返回;否則,保持設(shè)置等待完成包的標(biāo)識符為默認初始值。操作完成后轉(zhuǎn)向步驟45;步驟45,接收I/O設(shè)備發(fā)來的帶數(shù)據(jù)的完成包,接收到事務(wù)包后轉(zhuǎn)向步驟46 ; 步驟46,等待完成包的標(biāo)識符判定,如果當(dāng)前等待完成包的標(biāo)識符判定指示為擴展PCIe配置空間讀返回,轉(zhuǎn)向步驟47 ;如果指示為基址類寄存器讀返回,轉(zhuǎn)向步驟410;如果指示為非基址類只讀寄存器讀返回,轉(zhuǎn)向步驟411 ;否則,復(fù)位等待完成包的標(biāo)識符,轉(zhuǎn)向步驟42 ; 步驟47,解析完成包數(shù)據(jù)中的擴展功能ID以及下一個功能指針,如果擴展功能ID指示為SR-IOV擴展功能,轉(zhuǎn)向步驟48 ;否則轉(zhuǎn)向步驟49 ; 步驟48,修改基址類寄存器偏移指針的起始地址,使用擴展PCIe配置空間偏移指針加上第一個VF BAR在SR-IOV擴展功能寄存器組中的固定偏移,修改基址類寄存器偏移指針的起始地址;指示一個SR-IOV設(shè)備,并記錄完成包中的完成者ID為SR-IOV設(shè)備中PF的ID號;操作完成后,轉(zhuǎn)向步驟49; 步驟49,使用步驟47提取的下一個功能指針更新擴展PCIe配置空間偏移指針;操作完成后,復(fù)位等待完成包的標(biāo)識符,轉(zhuǎn)向步驟42 ; 步驟410,解析完成包中數(shù)據(jù),備份基址類寄存器定義,并更新基址類寄存器偏移指針指向下一個基址寄存器;如果指示SR-IOV設(shè)備的標(biāo)識符為假,則將該基址類寄存器定義備份到目標(biāo)設(shè)備ID號和基址類寄存器偏移指針對應(yīng)的寄存器中;如果指示SR-IOV設(shè)備的標(biāo)識符為真,且完成者ID等于SR-IOV中PF的ID,則將該基址類寄存器定義備份到每個設(shè)備的基址類寄存器偏移指針對應(yīng)的寄存器中;否則,不備份該基址類寄存器定義。操作完成后,復(fù)位等待完成包的標(biāo)識符,轉(zhuǎn)向步驟42 ; 步驟411,解析完成包中數(shù)據(jù),并存儲到由目標(biāo)寄存器號指示的寄存器中;操作完成后,復(fù)位等待完成包的標(biāo)識符,轉(zhuǎn)向步驟42。
5.如權(quán)利要求2所述的多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化方法,其特征在于,所述I/o設(shè)備功能的行為模擬還包括 步驟51,直接I/O虛擬化裝置接收從屬根節(jié)點發(fā)來的循環(huán)配置事務(wù)包,接收事務(wù)包后轉(zhuǎn)向步驟52 ; 步驟52,提取并記錄配置事務(wù)包中指示的寄存器號,然后轉(zhuǎn)向步驟53 ;步驟53,配置寄存器類型判定。如果步驟52中的寄存器號指示為基址類配置寄存器,轉(zhuǎn)向步驟54 ;如果指示為非基址類只讀配置寄存器,轉(zhuǎn)向步驟55 ;否則,轉(zhuǎn)向步驟56 ; 步驟54,基址類配置寄存器訪問本地處理。如果是配置讀請求包,則提取目標(biāo)設(shè)備ID號和寄存器號對應(yīng)的數(shù)據(jù),組成完成包返回給相應(yīng)的從屬根節(jié)點;否則,如果是配置寫請求包,提取請求包中的數(shù)據(jù)寫存儲到目標(biāo)設(shè)備ID號和寄存器號對應(yīng)的寄存器。操作完成后轉(zhuǎn)向步驟51 ; 步驟55,非基址類配置寄存器訪問本地處理。如果是配置讀請求包,則提取寄存器號對應(yīng)的數(shù)據(jù),組成完成包返回給相應(yīng)的從屬根節(jié)點;否則,如果是配置寫請求包,提取請求包中的數(shù)據(jù)寫存儲到寄存器號對應(yīng)的寄存器;操作完成后轉(zhuǎn)向步驟51 ; 步驟56,將事務(wù)包透傳給物理I/O設(shè)備,由物理I/O設(shè)備相關(guān)功能進行配置響應(yīng)。如果是配置讀請求包,則接收I/O設(shè)備發(fā)來的完成包返回給相應(yīng)的從屬根節(jié)點;否則,如果是配置寫請求包,I/O設(shè)備不返回任何響應(yīng);然后轉(zhuǎn)向步驟51。
6.一種用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化裝置,其特征在于,包括下行事務(wù)包發(fā)送模塊,所述下行事務(wù)包發(fā)送模塊用于接收從根節(jié)點發(fā)來的事務(wù)包,通過對事務(wù)包的解析和重映射,將事務(wù)包分發(fā)給I/o虛擬化模塊和物理I/O設(shè)備; 上行事務(wù)包接收模塊,所述上行事務(wù)包接收模塊用于接收從I/o設(shè)備、I/O虛擬化模塊和虛擬熱插拔控制模塊傳來的事務(wù)包,通過對事務(wù)包的解析和重映射,將事務(wù)包發(fā)送給根節(jié)點; I/O虛擬化模塊,所述I/O虛擬化模塊通過對物理I/O設(shè)備功能的邏輯抽象,建立邏輯虛擬化功能鏡像來替代I/o設(shè)備功能作為從屬根節(jié)點的設(shè)備占位符,實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點獨立發(fā)現(xiàn)和配置; 直接I/o重映射模塊,所述直接I/O重映射模塊通過硬件重映射的方式,實現(xiàn)設(shè)備功能在從屬根節(jié)點PCIe域和主控制根節(jié)點PCIe域之間的ID轉(zhuǎn)換和地址窗口轉(zhuǎn)換,實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點直接使用; 虛擬熱插拔控制模塊,所述虛擬熱插拔控制模塊通過摸擬PCIe熱插拔控制操作,完成向根節(jié)點動態(tài)刪除和增加I/O設(shè)備功能,實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點動態(tài)共享。
7.如權(quán)利要求6所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化裝置,其特征在于,所述下行事務(wù)包發(fā)送模塊包括 下行事務(wù)包子解析模塊,所述下行事務(wù)包解析子模塊用于接收根節(jié)點發(fā)來的事務(wù)包,并對事務(wù)包的根節(jié)點和類型進行解析判定,如果是配置包,還要對其配置操作的寄存器進行解析判定; 下行事務(wù)包重映射子模塊,所述下行事務(wù)包重映射子模塊用于對從屬根節(jié)點發(fā)來的事務(wù)包進行ID號轉(zhuǎn)換或者地址轉(zhuǎn)換; 下行事務(wù)包分發(fā)子模塊,所述下行事務(wù)包分發(fā)子模塊用于對事務(wù)包進行分發(fā)處理,如果是主控制根節(jié)點發(fā)來的配置包同時傳遞給I/O虛擬化模塊和物理I/O設(shè)備,如果是從屬根節(jié)點發(fā)來的對配置基址類和非基址類只讀寄存器的配置事務(wù)包只傳遞給I/O虛擬化模塊,其他事務(wù)包只傳遞給物理I/O設(shè)備。
8.如權(quán)利要求6所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化裝置,其特征在于,所述上行事務(wù)包接收模塊包括 上行事務(wù)包解析子模塊,所述上行事務(wù)包解析子模塊用于接收物理I/O設(shè)備發(fā)來的事務(wù)包,對事務(wù)包的類型進行解析判定,如果是完成包,將其復(fù)制傳遞給I/O虛擬化模塊;上行事務(wù)包重映射子模塊,所述上行事務(wù)包重映射子模塊用于對事務(wù)包的進行ID號轉(zhuǎn)換; 上行事務(wù)包調(diào)度子模塊,所述上行事務(wù)包調(diào)度子模塊用于將從I/O設(shè)備、I/O虛擬化模塊和虛擬熱插拔控制模塊傳來的事務(wù)包調(diào)度傳給根節(jié)點。
9.如權(quán)利要求6所述的用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化裝置,其特征在于,所述I/o虛擬化模塊包括 配置事務(wù)解析子模塊,所述配置事務(wù)解析子模塊用于接收并解析根節(jié)點發(fā)來的配置事務(wù)包和I/O設(shè)備發(fā)來的完成包; 配置寄存器備份子模塊,所述配置寄存器模塊實現(xiàn)基址類和非基址類只讀配置寄存器的備份,實現(xiàn)對I/O設(shè)備功能的實體抽象; 配置事務(wù)模擬響應(yīng)子模塊,所述配置事務(wù)模擬響應(yīng)子模塊用于替代I/o設(shè)備向根節(jié)點發(fā)送完成事務(wù)包,實現(xiàn)對I/o設(shè)備功能的行為 模擬。
全文摘要
本發(fā)明公開一種用于多根I/O虛擬化共享系統(tǒng)的直接I/O虛擬化方法和裝置,該方法包括步驟1,通過對物理I/O設(shè)備功能的邏輯抽象,建立邏輯虛擬化功能鏡像,替代I/O設(shè)備功能作為從屬根節(jié)點的設(shè)備占位符,實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點獨立發(fā)現(xiàn)和配置;步驟2,通過硬件重映射方式,實現(xiàn)設(shè)備功能在從屬根節(jié)點PCIe域和主控制根節(jié)點之間的映射,為各根節(jié)點在訪問操作共享的物理I/O設(shè)備時提供直通模式,同時為各根節(jié)點的共享提供隔離和保護;步驟3,通過虛擬PCIe設(shè)備熱插拔控制操作,能夠在不影響根節(jié)點其他工作的情況下,完成向根節(jié)點動態(tài)刪除和增加I/O設(shè)備功能,實現(xiàn)I/O設(shè)備中各功能被多個根節(jié)點動態(tài)共享。
文檔編號G06F9/455GK102819447SQ201210171920
公開日2012年12月12日 申請日期2012年5月29日 優(yōu)先權(quán)日2012年5月29日
發(fā)明者曹政, 劉小麗, 張佩珩, 安學(xué)軍, 孫凝暉, 王展, 蘇勇, 劉飛龍 申請人:中國科學(xué)院計算技術(shù)研究所