通過半虛擬化驅動訪問硬件的方法、后端驅動及前端驅動的制作方法
【專利摘要】本發明公開了一種通過半虛擬化驅動訪問硬件的方法、后端驅動及前端驅動。一種通過半虛擬化驅動訪問硬件的方法包括:特權虛擬機的后端驅動接收非特權虛擬機的前端驅動通過事件通道發送的目標事件通知;從I/O共享環中獲取目標I/O請求,該目標I/O請求攜帶有目標授權項的標識;根據授權表,確定該目標授權項的標識對應的目標偽物理地址;根據預設的索引表,確定該目標偽物理地址對應的目標本地虛擬地址;利用該目標本地虛擬地址,讀取該目標偽物理地址所對應目標共享內存資源中的網絡數據,并將該網絡數據轉發給相應的硬件,以此實現對該硬件的本次訪問。通過利用本方案,可以降低虛擬機網絡時延機CPU占用率。
【專利說明】通過半虛擬化驅動訪問硬件的方法、后端驅動及前端驅動
【技術領域】
[0001]本發明涉及虛擬機【技術領域】,特別是涉及一種通過半虛擬化驅動訪問硬件的方法、后端驅動及前端驅動。
【背景技術】
[0002]所謂Xen虛擬化技術分為三層:最底層為擁有最高特權級別的虛擬機監控器(Hypervisor),其直接運行于硬件之上,負責其上的虛擬機的內存分配和運行調度;往上為擁有直接操作底層硬件權限且唯一存在的特權虛擬機(DomO),其為系統中運行的第一個虛擬機,負責其他非特權虛擬機(DomU)的管理;非特權虛擬機(DomU)沒有直接操作硬件的權限,每個系統可以同時運行多個DomU,每個DomU對外表現為一個標準的物理機。
[0003]在虛擬化環境下,若干DomU運行在同一物理機上,出于系統安全方面的考慮,DomU不能直接訪問物理機上的各種物理設備(例如:網卡、磁盤設備等),而由DomO通過模擬指令完成訪問。但是,對于磁盤設備、網絡設備等I/O訪問非常頻繁的物理設備而言,僅靠指令模擬的方式來訪問硬件,其性能無法滿足實際應用的需要。為了解決DomU通過模擬指令訪問硬件性能差的問題,當前主要有兩種方式用于提升虛擬機IO特性:(I)直接將物理機上真實的硬件透傳給指定的DomU,相當于給予了指定的DomU直接操作硬件的特權;
(2)采用半虛擬化驅動的方式。
[0004]其中,半虛擬化驅動由前端驅動和后端驅動組成。所謂前端驅動為運行在DomU內核態的驅動程序,其負責創建虛擬設備,并且轉發虛擬設備的I/o請求;所謂后端驅動為運行在DomO內核態的驅動程序,其負責接收前端驅動轉發的I/O請求,并且通過真正的設備驅動來訪問物理設備,進而完成I/o請求;并且Hypervisor通過提供事件通道、授權表和I/O共享環緩沖區等技術來幫助前端驅動和后端驅動進行通信。其中,半虛擬化驅動方式對應的虛擬架構如圖1所示。
[0005]現有技術中,半虛擬化驅動的基本IO流程為:
[0006]前端驅動接收到DomU內核下發的網絡數據,從I/O共享環中取出一個I/O請求;
[0007]前端驅動從授權表中申請授權項,在該授權項里填充該網絡數據所在內存資源的偽物理地址,再將該授權項對應標識填充到上一步取出的1/0請求中;
[0008]在虛擬機監控器的作用下,前端驅動通過事件通道向后端驅動發送事件通知;
[0009]后端驅動通過事件通道接收前端驅動發送的事件通知;
[0010]后端驅動從1/0共享環中取出前端驅動放入的1/0請求;
[0011]后端驅動查詢授權表,確定1/0請求中所填充的標識對應的該偽物理地址;
[0012]通過共享內存技術,后端驅動查詢到DomU中該偽物理地址所對應的物理地址,并將該物理地址通過本地偽物理地址映射到自身的本地虛擬地址,此后后端驅動通過訪問該本地虛擬地址便能直接訪問前端驅動接收到的網絡數據;
[0013]后端驅動將該網絡數據發送給真實的設備驅動來訪問物理設備,完成1/0請求;
[0014]后端驅動接收到真實的設備驅動發回的響應,將其放入1/0共享環,并解除對前端驅動共享內存資源的映射關系,通過事件通道向前端驅動發送事件通知;
[0015]前端驅動通過事件通道接收到后端驅動發送的事件通知;
[0016]前端驅動從I/O共享環中取出響應進行處理,并回收共享內存資源。
[0017]上述IO流程中,關鍵步驟在于=DomO通過共享內存技術,將DomU指定的內存資源映射到自身的內存空間中,從而直接訪問到DomU的內存資源,實現內存共享,最終完成網絡數據從DomU轉發到DomO的過程。
[0018]其中,每次由DomU向外界傳輸數據時,都需要將DomU中攜帶數據的內存資源動態映射給DomO,由DomO使用完數據之后再解除映射關系。由于每次I/O請求都涉及到共享內存的動態映射和解映射,當網絡負載很高時,該方式需要頻繁地更新偽物理地址到物理地址的映射關系,且每次更新都涉及到系統從DomO切換到Hypervisor完成映射和解映射,這種頻繁的切換導致虛擬機網絡時延增長,同時CPU占用率較高。
【發明內容】
[0019]本發明實施例提供了 一種通過半虛擬化驅動訪問硬件的方法、后端驅動及前端驅動,以降低虛擬機網絡時延及CPU占用率,技術方案如下:
[0020]第一方面,從特權虛擬機的后端驅動的角度,本發明實施例提供了一種通過半虛擬化驅動訪問硬件的方法,適用于物理機上,所述物理機包括:虛擬機監控器、設置有后端驅動的特權虛擬機以及至少一設置有前端驅動的非特權虛擬機,其中,所述虛擬機監控器通過至少提供事件通道、授權表和I/o共享環協助所述前端驅動和所述后端驅動進行通信;所述方法包括:
[0021]所述特權虛擬機的所述后端驅動接收所述非特權虛擬機的所述前端驅動通過所述事件通道發送的目標事件通知,其中,所述目標事件通知用于指示所述后端驅動從所述I/o共享環中獲取目標I/O請求;
[0022]從所述I/O共享環中獲取目標I/O請求,所述目標I/O請求攜帶有目標授權項的標識;
[0023]根據所述授權表,確定所述目標授權項的標識對應的目標偽物理地址,其中,所述授權表的授權項在所述非特權虛擬機初始化預先構建的共享內存池時被填充有所述共享內存池中的共享內存資源的偽物理地址,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識,所述共享內存池為所述非特權虛擬機初始化所述前端驅動時由所述非特權虛擬機構建并初始化;
[0024]根據預設的索引表,確定所述目標偽物理地址對應的目標本地虛擬地址,其中,所述索引表在所述后端驅動實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射過程中創建,其用于指明所述共享內存池中的共享內存資源與所述特權虛擬機的內存空間的映射關系;
[0025]利用所述目標本地虛擬地址,讀取所述目標偽物理地址所對應目標共享內存資源中的網絡數據,并將所述網絡數據轉發給相應的硬件,以此實現對所述硬件的本次訪問。
[0026]更進一步的,第一方面中所提供的通過半虛擬化驅動訪問硬件的方法還包括:
[0027]在所述目標I/O請求完成后,通過所述事件通道向所述前端驅動反饋I/O請求完成通知,以指示所述前端驅動釋放所述目標共享內存資源,將釋放后的所述目標共享內存資源確定為所述共享內存池中處于非占用狀態的共享內存資源。
[0028]其中,第一方面中所提供的通過半虛擬化驅動訪問硬件的方法中,所述后端驅動實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射過程,包括:
[0029]所述后端驅動接收所述非特權虛擬機的所述前端驅動通過所述事件通道發送的初始化通知;
[0030]從所述I/O共享環中獲取I/O請求,所述I/O請求中攜帶授權項的標識;
[0031]根據所述授權表,確定所述I/O請求中所述授權項的標識對應的偽物理地址;
[0032]將所述偽物理地址對應的共享內存資源映射到所述特權虛擬機的系統內存中,其中,所述偽物理地址與本地虛擬地址具有唯一對應性;
[0033]構建關于所述偽物理地址與相應的本地虛擬地址的映射關系的索引表。
[0034]其中,所述前端驅動為半虛擬化網卡前端驅動,所述后端驅動為半虛擬化網卡后端驅動;
[0035]或者,
[0036]所述前端驅動為半虛擬化磁盤前端驅動,所述后端驅動為半虛擬化磁盤后端驅動;
[0037]或者,
[0038]所述前端驅動為半虛擬化USB前端驅動,所述后端驅動為半虛擬化USB后端驅動。
[0039]第二方面,本發明實施例還提供一種后端驅動,設置于物理機中的特權虛擬機中,所述物理機包括:虛擬機監控器、設置有后端驅動的特權虛擬機以及至少一設置有前端驅動的非特權虛擬機,其中,所述虛擬機監控器通過至少提供事件通道、授權表和I/o共享環協助所述前端驅動和所述后端驅動進行通信;所述后端驅動包括:
[0040]目標事件通知接收單元,所述特權虛擬機的所述后端驅動接收所述非特權虛擬機的所述前端驅動通過所述事件通道發送的目標事件通知,并觸發目標I/o請求獲取單元,其中,所述目標事件通知用于指示所述后端驅動從所述I/o共享環中獲取目標I/O請求;
[0041]所述目標I/O請求獲取單元,用于從所述I/O共享環中獲取目標I/O請求,并觸發目標偽物理地址確定單元,所述目標I/o請求攜帶有目標授權項的標識;
[0042]所述目標偽物理地址確定單元,用于根據所述授權表,確定所述目標授權項的標識對應的目標偽物理地址,并觸發目標本地虛擬地址確定單元,其中,所述授權表的授權項在所述非特權虛擬機初始化預先構建的共享內存池時被填充有所述共享內存池中的共享內存資源的偽物理地址,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識,所述共享內存池為所述非特權虛擬機初始化所述前端驅動時由所述非特權虛擬機構建并初始化;
[0043]所述目標本地虛擬地址確定單元,用于根據預設的索引表,確定所述目標偽物理地址對應的目標本地虛擬地址,并觸發網絡數據處理單元,其中,所述索引表在第一預映射單元實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射過程中創建,其用于指明所述共享內存池中的共享內存資源與所述特權虛擬機的內存空間的映射關系;
[0044]所述網絡數據處理單元,用于利用所述目標本地虛擬地址,讀取所述目標偽物理地址所對應目標共享內存資源中的網絡數據,并將所述網絡數據轉發給相應的硬件,以此實現對所述硬件的本次訪問;[0045]所述第一預映射單元,用于實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射。
[0046]更進一步的,第二方面中所提供的后端驅動還包括:
[0047]I/O請求完成通知發送單元,用于在所述目標I/O請求完成后,通過所述事件通道向所述前端驅動反饋I/o請求完成通知,以指示所述前端驅動釋放所述目標共享內存資源,將釋放后的所述目標共享內存資源確定為所述共享內存池中處于非占用狀態的共享內存資源。
[0048]其中,第二方面中所提供的后端驅動中,所述第一預映射單元,包括:
[0049]初始化通知接收子單元,用于接收所述非特權虛擬機的所述前端驅動通過所述事件通道發送的初始化通知,并觸發I/o請求獲取子單元;
[0050]所述I/O請求獲取子單元,用于從所述I/O共享環中獲取I/O請求,所述I/O請求中攜帶授權項的標識,并觸發偽物理地址確定子單元;
[0051]所述偽物理地址確定子單元,用于根據所述授權表,確定所述I/O請求中所述授權項的標識對應的偽物理地址,并觸發資源映射子單元;
[0052]所述資源映射子單元,用于將所述偽物理地址對應的共享內存資源映射到所述特權虛擬機的系統內存中,并觸發索引表構建子單元,其中,所述偽物理地址與本地虛擬地址具有唯一對應性;
[0053]所述索引表構建子單元,用于構建關于所述偽物理地址與相應的本地虛擬地址的映射關系的索引表。
[0054]第三方面,從非特權虛擬機的前端驅動的角度,本發明實施例還提供一種通過半虛擬化驅動訪問硬件的方法,適用于物理機上,所述物理機包括:虛擬機監控器、設置有后端驅動的特權虛擬機以及至少一設置有前端驅動的非特權虛擬機,其中,所述虛擬機監控器通過至少提供事件通道、授權表和I/o共享環協助所述前端驅動和所述后端驅動進行通信;所述方法包括:
[0055]所述非特權虛擬機的所述前端驅動接收相應內核下發的網絡數據,其中,所述網絡數據為用于訪問硬件的數據;
[0056]將預設的共享內存池中的處于非占用狀態的共享內存資源作為所述網絡數據對應的目標共享內存資源,所述共享內存池為所述非特權虛擬機初始化所述前端驅動時由所述非特權虛擬機構建并初始化;
[0057]確定所述授權表中所述目標共享內存資源的目標偽物理地址所在的目標授權項,其中,所述授權表的授權項在所述非特權虛擬機初始化所述共享內存池時被填充有所述共享內存池中的共享內存資源的偽物理地址,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識;
[0058]將攜帶所述目標授權項的標識的目標I/O請求放入所述I/O共享環中,其中,所述目標I/o請求在所述前端驅動協助所述后端驅動實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射的過程中構建;
[0059]通過所述事件通道向所述特權虛擬機的所述后端驅動發送目標事件通知,其中,所述目標事件通知用于指示所述后端驅動從所述I/o共享環中獲取目標I/O請求。
[0060]更進一步的,第三方面中所提供的通過半虛擬化驅動訪問硬件的方法,還包括:[0061]當接收到所述后端驅動反饋的所述目標事件通知對應的請求完成通知后,釋放所述目標共享內存資源,將釋放后的所述目標共享內存資源確定為所述共享內存池中處于非占用狀態的共享內存資源。
[0062]其中,第三方面中所提供的通過半虛擬化驅動訪問硬件的方法中,所述非特權虛擬機初始化所述共享內存池的過程包括:
[0063]所述非特權虛擬機將相應系統內存中的預設數量的內存資源作為處于非占用狀態的共享內存資源;將所述共享內存資源的偽物理地址填充至所述授權表中的授權項,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識;將所述共享內存資源和相應授權項的標識放置到所述共享內存池中;
[0064]其中,所述前端驅動協助所述后端驅動實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射的過程,包括:
[0065]所述前端驅動從所述共享內存池中獲取所述授權項的標識;
[0066]構建攜帶所述授權項的標識的I/O請求,并將所述I/O請求放入I/O共享環中,其中,所述授權項的標識與所述I/O請求具有唯一對應性;
[0067]通過所述事件通道向所述特權虛擬機的所述后端驅動發送預設的初始化通知,其中,所述初始化通知用于指示所述后端驅動開啟所述非特權虛擬機與所述特權虛擬機的資源預映射過程。
[0068]第四方面,本發明實施例還提供一種前端驅動,設置于物理機中的非特權虛擬機中,所述物理機包括:虛擬機監控器、設置有后端驅動的特權虛擬機以及至少一設置有前端驅動的非特權虛擬機,其中,所述虛擬機監控器通過至少提供事件通道、授權表和I/o共享環協助所述前端驅動和所述后端驅動進行通信;所述前驅動包括:
[0069]網絡數據接收單元,用于接收相應內核下發的網絡數據,并觸發目標內存資源確定單元,其中,所述網絡數據為用于訪問硬件的數據;
[0070]所述目標內存資源確定單元,用于將預設的共享內存池中的處于非占用狀態的共享內存資源作為所述網絡數據對應的目標共享內存資源,并觸發目標授權項確定單元,所述共享內存池為所述非特權虛擬機初始化所述前端驅動時由所述非特權虛擬機構建并初始化;
[0071]所述目標授權項確定單元,用于確定所述授權表中所述目標內存資源的目標偽物理地址所在的目標授權項,并觸發目標I/O請求處理單元,其中,所述授權表的授權項在所述非特權虛擬機初始化所述共享內存池時被填充有所述共享內存池中的共享內存資源的偽物理地址,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識;
[0072]所述目標I/O請求處理單元,用于將攜帶所述目標授權項的標識的目標I/O請求放入所述I/o共享環中,并觸發目標事件通知發送單元,其中,所述目標I/O請求在第二預映射單元協助所述后端驅動實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射的過程中構建;
[0073]所述目標事件通知發送單元,用于通過所述事件通道向所述特權虛擬機的所述后端驅動發送目標事件通知,其中,所述目標事件通知用于指示所述后端驅動從所述I/O共享環中獲取目標I/O請求;[0074]所述第二預映射單元,用于協助所述后端驅動實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射。
[0075]更進一步的,第四方面中所提供的前端驅動還包括:
[0076]目標內存資源處理單元,用于當接收到所述后端驅動反饋的所述目標事件通知對應的請求完成通知后,釋放所述目標共享內存資源,將釋放后的所述目標共享內存資源確定為所述共享內存池中處于非占用狀態的共享內存資源。
[0077]其中,第四方面中所提供的前端驅動中,所述非特權虛擬機初始化所述共享內存池的過程包括:
[0078]所述非特權虛擬機將相應系統內存中的預設數量的內存資源作為處于非占用狀態的共享內存資源;將所述共享內存資源的偽物理地址填充至所述授權表中的授權項,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識;將所述共享內存資源和相應授權項的標識放置到所述共享內存池中;
[0079]相應的,所述第二預映射單元,包括:
[0080]授權項標識確定子單元,用于從所述共享內存池中獲取所述授權項的標識,并觸發I/O請求處理子單元;
[0081]所述I/O請求處理子單元,用于構建攜帶所述授權項的標識的I/O請求,并將所述I/o請求放入I/O共享環中,并觸發初始化通知發送子單元,其中,所述授權項的標識與所述I/o請求具有唯一對應性;
[0082]所述初始化通知發送子單元,用于通過所述事件通道向所述特權虛擬機的所述后端驅動發送預設的初始化通知,其中,所述初始化通知用于指示所述后端驅動開啟所述非特權虛擬機與所述特權虛擬機的資源預映射過程。
[0083]本發明實施例所提供的技術方案,由于非特權虛擬機預先構建一共享內存池,而特權虛擬機預先將該共享內存池中的共享內存資源映射到自身的內存空間中,并建立指明具體映射關系的索引表,以此實現了非特權虛擬機和特權虛擬機之間的資源預映射,因此,在非特權虛擬機訪問硬件而向外界傳輸數據時,在前端驅動和后端驅動的網絡通信過程中,由于無需進行非特權虛擬機和特權虛擬機之間的資源映射和解映射操作,可以完全避免特權虛擬機和虛擬機監控器之間的切換,從而降低了虛擬機網絡時延機CPU占用率。
【專利附圖】
【附圖說明】
[0084]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。
[0085]圖1為現有的半虛擬化驅動方式所對應虛擬架構的示意圖;
[0086]圖2為非虛擬化環境下的虛擬地址與物理地址的映射關系的結構示意圖;
[0087]圖3為虛擬化環境下兩級映射的示意圖;
[0088]圖4為多虛擬機環境下分配物理內存的示意圖;
[0089]圖5為虛擬機之間的內存共享的示意圖;
[0090]圖6為本發明實施例所提供的一種通過半虛擬化驅動訪問硬件的方法的第一種流程圖;
[0091]圖7為本發明實施例所提供的一種通過半虛擬化驅動訪問硬件的方法的第二種流程圖;
[0092]圖8為本發明實施例所提供的一種通過半虛擬化驅動訪問硬件方法對應虛擬架構的示意圖;
[0093]圖9為本發明實施例所提供的一種后端驅動的結構示意圖;
[0094]圖10為本發明實施例所提供的一種前端驅動的結構示意圖。
【具體實施方式】
[0095]為了清楚起見,首先對現有技術中的非虛擬化和虛擬化環境的內存訪問方式、多虛擬機對物理內存的使用方式以及虛擬機之間的內存共享方式進行介紹,以明確虛擬化環境下的物理地址、偽物理地址及虛擬地址之間的關系,以及虛擬機之間的內存共享方式。第一,非虛擬化和虛擬化環境的內存訪問方式
[0096]在非虛擬化環景下:
[0097]如圖2所示,應用程序(application)使用VA (Virtual Address,虛擬地址)訪問內存,該訪問內存操作被CPU的MMU (Memory Management Unit,內存管理單元)單元轉換為物理地址,然后物理地址被送到CPU的地址總線上指示將要訪問內存單元。其中,MMU僅負責虛擬地址到物理地址的轉換,其轉換關系是由操作系統內核(kernel)定義的;kernel是整個物理機系統中特權級最高的程序,應用程序無特權,并且,非特權程序對內存的訪問受到特權程序的管制,其目的是為了保護整個系統穩定性,避免非特權程序破壞系統。
[0098]在虛擬化環景下:
[0099]如圖3所示,kernel不再是特權級最高的程序,取而代之的是虛擬機監控器(hypervisor),相應的特權級由高到低依次為:hypervisor、kernel、application。
[0100]在虛擬化環境下,應用程序(其感覺不到虛擬化存在的,因此,和非虛擬化環境一樣)使用VA訪問內存,此時該訪存操作被CPU的MMU單元映射到PA (Pseudo PhysicalAddress,偽物理地址),然后 PA 被 EPT/NPT(Extened Page Table mechanism/Nested PageTables,擴展頁表/嵌套頁表)單元映射到真正物理內存的MA (Machine Address,機器地址),實現了采用兩級映射的方式完成一次內存訪問。
[0101]增加第二級映射的原因是:①在虛擬化環境下虛擬機操作系統內核不再有最高的特權等級,其如果能直接訪問到物理內存,則一個操作系統的錯誤內存操作將可能影響到同一臺物理機上的其他虛擬機的內存,虛擬機操作系統間將失去獨立性和隔離性,增加系統的不穩定性,所以虛擬機操作系統內核需要受限地訪問PA,而hypervisor為虛擬機建立起PA到MA的映射關系傳統的操作系統需要的是連續的物理內存,在虛擬化環境下虛擬機可能被多次啟動、關閉,一段時間以后不能保證每個虛擬機能分配到連續的物理內存,所以必須提供一種抽象機制將不連續的物理內存映射成虛擬機操作系統可見的連續內存塊(如圖3:EPT/NPT將離散的MA映射成了 Kernel能見到的連續的PA),使得傳統的操作系統能正常運行。因此,虛擬化環境下增加了一級內存映射,采用了兩級映射關系訪問內存。
[0102]第二,多虛擬機對物理內存的使用
[0103]如圖4所示,創建虛擬機時,hypervisor根據虛擬機的配置情況,為該虛擬機分配物理地址空間以及對應大小的物理內存,并建立起PA到MA的映射關系。PA之于虛擬機系統相當于MA之于物理機系統,默認情況下虛擬機總是認為自己獨占地訪問分配給它的PA。所以,多個虛擬機存在時,分配它們使用的物理內存是沒有交集的。
[0104]第三,虛擬機之間的內存共享
[0105]如圖5所示,以虛擬機Domain X共享PAx給虛擬機Domain Y為例,虛擬機之間共享內存的過程如下:
[0106]共享內存操作的雙方分別是Domain X和Domain Y兩端的驅動程序(運行在kernel狀態,可以看作是kernel的擴展);
[0107]Domain X首先申明PAx可以被Domain Y訪問,其中,所申明的內容包括訪問權限;
[0108]Domain Y的驅動在hypervisor的協助下將原來的PAy到MAy的映射關系解除,其中,MAy可以被hypervisor回收;
[0109]DomainY的驅動在hypervisor的協助下建立PAy到MAx的映射關系,其中,該映射關系包括映射權限,如果與Domain X申明的訪問權限沖突,本步驟失敗;
[0110]通過上述方式,Domain X的PAx和Domain Y的PAy指向了同一塊物理內存MAx,使得Domain Y的應用程序通過VAy或者Domain Y的kernel通過PAy訪問內存時,能夠和Domain X的應用程序通過VAx或者Domain X的kernel通過PAx訪問同一塊物理內存MAx,達到了共享內存的目的。
[0111]下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0112]為了降低虛擬機網絡時延及CPU占用率,本發明實施例提供了一種通過半虛擬化驅動訪問硬件的方法、后端驅動及前端驅動。
[0113]基于上述現有技術中的非虛擬化和虛擬化環境的內存訪問方式、多虛擬機對物理內存的使用方式以及虛擬機之間的內存共享方式,下面首先對本發明實施例所提供的一種通過半虛擬化驅動訪問硬件的方法進行介紹。
[0114]需要說明的是,本發明實施例所提供方法適用于物理機上,所述物理機包括:虛擬機監控器、設置有后端驅動的特權虛擬機以及至少一設置有前端驅動的非特權虛擬機,其中,該虛擬機監控器通過至少提供事件通道、授權表和I/o共享環協助該前端驅動和該后端驅動進行通信。本領域技術人員可以理解的是,不同的外部硬件對應不同的前端驅動和后端驅動,例如:該前端驅動可以為半虛擬化網卡前端驅動,而該后端驅動可以為半虛擬化網卡后端驅動;或者,該前端驅動可以為半虛擬化磁盤前端驅動,而該后端驅動可以為半虛擬化磁盤后端驅動;或者,該前端驅動可以為半虛擬化USB前端驅動,而該后端驅動可以為半虛擬化USB后端驅動,當然并不局限于此。圖8為本發明的通過半虛擬化驅動訪問硬件的方法所對應虛擬架構的結構示意圖。
[0115]為了實現本發明方案,該非特權虛擬機需要在初始化相應前端驅動時構建共享內存池,并對該共享內存池進行初始化。其中,該非特權虛擬機初始化該共享內存池的過程可以包括:
[0116]該非特權虛擬機將相應系統內存中的預設數量的內存資源作為處于非占用狀態的共享內存資源;
[0117]將該共享內存資源的偽物理地址填充至該授權表中的授權項,該偽物理地址與該授權項具有唯一對應性,且每一授權項唯一對應一標識;
[0118]將該共享內存資源和相應授權項的標識放置到該共享內存池中。
[0119]需要說明的是,該非特權虛擬機初始化該共享內存池后,該非特權虛擬機的前端驅動需要協助所述特權虛擬機的后端驅動實現所述非特權虛擬機預所述特權虛擬機之間的資源預映射,進而實現后續的非特權虛擬機通過半虛擬化驅動訪問硬件的方法。
[0120]其中,該前端驅動協助該后端驅動實現該非特權虛擬機與該特權虛擬機之間的資源預映射的過程,可以包括:
[0121]該前端驅動從該共享內存池中獲取該授權項的標識;
[0122]構建攜帶該授權項的標識的I/O請求,并將該I/O請求放入I/O共享環中,其中,該授權項的標識與I/o請求具有唯一對應性;
[0123]通過該事件通道向該特權虛擬機的該后端驅動發送預設的初始化通知,其中,該初始化通知用于指示該后端驅動初始化通過半虛擬化驅動訪問硬件的方法。
[0124]相應的,該后端驅動實現該非特權虛擬機與該特權虛擬機之間的資源預映射過程,可以包括:
[0125]該后端驅動接收該非特權虛擬機的該前端驅動通過該事件通道發送的初始化通知;
[0126]從該I/O共享環中獲取I/O請求,該I/O請求中攜帶授權項的標識;
[0127]根據該授權表,確定所述I/O請求中所述授權項的標識對應的偽物理地址;
[0128]將該偽物理地址對應的共享內存資源映射到該特權虛擬機的系統內存中,其中,該偽物理地址與本地虛擬地址具有唯一對應性;
[0129]構建關于該偽物理地址與相應的本地虛擬地址的映射關系的索引表。綜上可見,本發明實施例給出了:該非特權虛擬機預分配和該特權虛擬機預映射機制,即非特權虛擬機預先分配了 一共享內存池,同時特權虛擬機將該共享內存池中的共享內存資源全部映射到自身的內存空間中,并且建立了索引表以指明具體映射關系。
[0130]其中,將偽物理地址對應的共享內存資源映射到特權虛擬機的系統內存的方式可以利用上述的現有技術中的虛擬機間的共享內存映射方式,在此不再贅述。
[0131]為了清楚起見,下面首先從非特權虛擬機的前端驅動角度對本發明實施例所提供的方法進行介紹。
[0132]如圖6所示,一種通過半虛擬化驅動訪問硬件的方法,可以包括:
[0133]S101,非特權虛擬機的前端驅動接收相應內核下發的網絡數據;
[0134]其中,該網絡數據為用于訪問硬件的數據。
[0135]S102,將預設的共享內存池中的處于非占用狀態的共享內存資源作為該網絡數據對應的目標共享內存資源;
[0136]其中,該共享內存池為所述非特權虛擬機初始化該前端驅動時由該非特權虛擬機構建并初始化。
[0137]當非特權虛擬機的前端驅動接收到相應內核下發的網絡數據時,表明該非特權虛擬機需要向外界傳輸數據(即訪問外部硬件),此時,前端驅動可以從預設的共享內存池中選出處于非占用狀態的共享內存資源,并將所選出的共享內存資源作為該網絡數據對應的目標共享內存資源,使得通過訪問該目標共享內存資源對應的目標偽物理地址即可訪問到該網絡數據。
[0138]其中,作為該目標共享內存資源的共享內存資源屬于被占用狀態,其此時將不屬于該共享內存池的處于非占用狀態的共享內存資源。
[0139]需要說明的是,該共享內存池、I/O共享環和授權表三者之間是相互獨立的,如圖8所示。
[0140]S103,確定授權表中該目標共享內存資源的目標偽物理地址所在的目標授權項;
[0141]其中,該授權表的授權項在該非特權虛擬機初始化所述共享內存池時被填充有該共享內存池中的共享內存資源的偽物理地址,該偽物理地址與該授權項具有唯一對應性,且每一授權項唯一對應一標識。
[0142]S104,將攜帶該目標授權項的標識的目標I/O請求放入該I/O共享環中;
[0143]其中,該目標I/O請求在該前端驅動協助該后端驅動實現該非特權虛擬機與該特權虛擬機之間的資源預映射的過程中構建。
[0144]由于每一共享內存資源的偽物理地址預先填充至一授權項,因此,在確定出該網絡數據對應的目標共享內存資源后,可以從授權表中確定出該目標共享內存資源的目標偽物理地址所在的目標授權項。而由于每一授權項唯一對應一標識,且每一授權項的標識預先唯一對應一 I/O請求,因此,在確定出該目標授權項后,可以確定出該目標授權項的標識所對應的目標I/o請求,進而將該目標I/O請求放入I/O共享環中,以使得特權虛擬機的后端驅動在獲得到相應通知后,能夠從I/o共享環中獲知該目標I/O請求,進而完成該目標I/O請求對應的IO流程,也就是硬件的本次訪問。
[0145]S105,通過該事件通道向該特權虛擬機的該后端驅動發送目標事件通知。
[0146]其中,該目標事件通知用于指示該后端驅動從該I/o共享環中獲取目標I/O請求。
[0147]在將該目標I/O請求放入到I/O共享環后,該前端驅動可以通過事件通道向該特權虛擬機的后端驅動發送目標事件通知,以通知該特權虛擬機的后端驅動從該I/o共享環中獲取該目標I/o請求,進而執行本次IO流程。相應的,該特權虛擬機的該后端驅動在接收到該目標事件通知后,根據預設的索引表,確定該目標偽物理地址對應的目標本地虛擬地址,利用該目標本地虛擬地址,讀取該目標偽物理地址所對應目標共享內存資源中的網絡數據,并將該網絡數據轉發給相應的硬件,以此實現對該硬件的本次訪問,其中,該索引表在該后端驅動實現該非特權虛擬機與該特權虛擬機之間的資源預映射過程中創建,其用于指明該非特權虛擬機對應共享內存池中的共享內存資源與該特權虛擬機的內存空間的映射關系。
[0148]需要說明的是,更進一步的,當接收到該后端驅動反饋的該目標事件通知對應的請求完成通知后,釋放該目標共享內存資源,將釋放后的該目標共享內存資源確定為該共享內存池中處于非占用狀態的共享內存資源。其中,當該后端驅動獲取到該目標I/o請求后,可以根據授權表及預設的索引表來完成該目標I/o請求對應的IO流程,并在完成該目標I/O請求對應IO流程后,直接向該前端驅動反饋該目標事件通知對應的請求完成通知;而該前端驅動在接收到該后端驅動反饋的該目標事件通知對應的請求完成通知后,釋放該目標共享內存資源,將釋放后的該目標共享內存資源重新確定為該共享內存池中處于非占用狀態的共享內存資源,以便下次執行IO流程時繼續使用該目標內存資源。
[0149]本實施例所提供的通過半虛擬化驅動訪問硬件的方法中,非特權虛擬機的前端驅動將共享內存池中的共享內存資源作為所接收到網絡數據對應的目標共享內存資源,并將攜帶該目標共享內存資源的目標偽物理地址所在授權項的標識的目標I/O請求放入I/O共享環中,進而向后端驅動發送目標事件通知,以指示后端驅動獲取目標I/o請求,并通過預設的關于該非特權虛擬機對應共享內存池中的共享內存資源與該特權虛擬機的內存空間的映射關系的索引表,實現對該硬件的本次訪問。可見,在前端驅動和后端驅動的網絡通信過程中,由于無需進行非特權虛擬機和特權虛擬機之間的資源映射和解映射操作,可以完全避免特權虛擬機和虛擬機監控器之間的切換,從而降低了虛擬機網絡時延機CPU占用率。
[0150]下面從特權虛擬機的后端驅動的角度,對本發明實施例所提供的方法進行介紹。
[0151]如圖7所示,一種通過半虛擬化驅動訪問硬件的方法,可以包括:
[0152]S201,該特權虛擬機的后端驅動接收該非特權虛擬機的前端驅動通過該事件通道發送的目標事件通知;
[0153]其中,該目標事件通知用于指示該后端驅動從該I/o共享環中獲取目標I/O請求。
[0154]S202,從I/O共享環中獲取該目標I/O請求;
[0155]其中,該目標I/O請求攜帶有目標授權項的標識。
[0156]在特權虛擬機的后端驅動接收到該非特權虛擬機的前端驅動發送的目標事件通知后,得知該非特權虛擬機需要向外界傳輸數據,此時,需要從I/o共享環中獲取相應的目標I/O請求,進而根據該目標I/O請求完成本次IO流程。
[0157]S203,根據該授權表,確定該目標授權項的標識對應的目標偽物理地址;
[0158]其中,該授權表的授權項在該非特權虛擬機初始化預先構建的共享內存池時被填充有該共享內存池中的共享內存資源的偽物理地址,該偽物理地址與該授權項具有唯一對應性,且每一授權項唯一對應一標識,該共享內存池為該非特權虛擬機初始化該前端驅動時由所述非特權虛擬機構建并初始化。
[0159]S204,根據預設的索引表,確定該目標偽物理地址對應的目標本地虛擬地址;
[0160]其中,該索引表在該后端驅動實現該非特權虛擬機與所述特權虛擬機之間的資源預映射過程中創建,其用于指明該共享內存池中的共享內存資源與該特權虛擬機的內存空間的映射關系。
[0161]根據該目標I/O請求確定出目標授權項的標識后,可以根據授權表,確定該目標授權項的標識對應的目標偽物理地址,進而根據預設的關于偽物理地址與相應的本地虛擬地址的映射關系的索引表,確定出該目標偽物理地址對應的目標本地虛擬地址,而無需通過共享內存技術,查詢到非特權虛擬機中該偽物理地址所對應的物理地址,并將該物理地址通過本地偽物理地址映射到自身的本地虛擬地址的過程,同時,由于不存在非特權虛擬機和特權虛擬機之間的本次資源映射操作,因此也不存在解映射操作。
[0162]S205,利用該目標本地虛擬地址,讀取該目標偽物理地址所對應目標共享內存資源中的網絡數據,并將該網絡數據轉發給相應的硬件。
[0163]由于該目標本地虛擬地址與該目標偽物理地址指向同一物理內存,因此,后端驅動直接訪問該本地虛擬地址即可讀取到前端驅動所接收到的網絡數據,并將該網絡數據轉發給真實的硬件,由該硬件完成該目標I/o請求,以此實現對該硬件的本次訪問。
[0164]需要說明的是,更進一步的,在目標I/O請求完成后,通過事件通道向相應的前端驅動反饋目標I/o請求完成通知。其中,當該目標I/O請求完成后,特權虛擬機的后端驅動并不解除對非特權虛擬機的共享內存資源的映射關系,而是直接向前端驅動反饋目標I/O請求完成通知,以指示所述前端驅動釋放該目標內存資源,將釋放后的該目標共享內存資源確定為該共享內存池中處于非占用狀態的共享內存資源,以此完成對所述硬件的本次訪問。
[0165]本發明實施例所提供的技術方案,由于非特權虛擬機預先構建一共享內存池,而特權虛擬機預先將該共享內存池中的共享內存資源映射到自身的內存空間中,并建立指明具體映射關系的索引表,以此實現了非特權虛擬機和特權虛擬機之間的資源預映射,因此,在非特權虛擬機訪問硬件而向外界傳輸數據時,在前端驅動和后端驅動的網絡通信過程中,由于無需進行非特權虛擬機和特權虛擬機之間的資源映射和解映射操作,可以完全避免特權虛擬機和虛擬機監控器之間的切換,從而降低了虛擬機網絡時延機CPU占用率。
[0166]下面以半虛擬化網卡驅動作為具體的應用實例,對本發明實施例所提供的一種通過半虛擬化驅動訪問硬件的方法進行介紹。
[0167]需要說明的是,本發明實施例所提供方法適用于物理機上,所物理機包括:虛擬機監控器(Hypervisor)、設置有半虛擬化網卡后端驅動的特權虛擬機(DomO)以及至少一設置有半虛擬化網卡前端驅動的非特權虛擬機(DomU),其中,該Hypervisor通過至少提供事件通道、授權表和I/O共享環協助半虛擬化網卡前端驅動和半虛擬化網卡后端驅動進行通信。其中,為了描述方便,將半虛擬化網卡前端驅動和半虛擬化網卡后端驅動統稱為半虛擬化網卡驅動。
[0168]其中,半虛擬化網卡驅動的初始化流程為:
[0169](I)在DomU初始其半虛擬化網卡前端驅動時,創建自身的共享內存池并初始化該共享內存池:其中,DomU初始化其共享內存池的過程包括:
[0170]從授權表中預先申請特定數量的授權項;
[0171]從系統內存中預先分配相應數量的內存資源作為處于非占用狀態的共享內存資源,將每個共享內存資源的偽物理地址填充到相應的授權項中;
[0172]將填充有偽物理地址的所有授權項的標識和共享內存資源放入共享內存池中;
[0173](2)該DomU的半虛擬化網卡前端驅動協助DomO的半虛擬化網卡后端驅動實現DomU和DomO之間的資源預映射過程包括:
[0174]半虛擬化網卡前端驅動從該共享內存池中獲取所有授權項的標識;
[0175]構建授權項的標識對應的I/O請求,并將I/O請求放入至I/O共享環中,其中,該授權項的標識與I/o請求具有一一對應性;
[0176]通過事件通道向該DomO的半虛擬化網卡后端驅動發送預設的初始化通知,其中,該初始化通知為:該半虛擬化網卡后端驅動和該半虛擬化網卡前端驅動事先約定的;
[0177]相應的,該DomO的半虛擬化網卡后端驅動實現DomU和DomO之間的資源預映射過程包括:
[0178]半虛擬化網卡后端驅動接收到該初始化通知之后,從I/O共享環中取出半虛擬化網卡前端驅動發出的所有I/o請求;[0179]根據授權表,確定I/O請求中授權項的標識所對應的共享內存資源的偽物理地址;
[0180]將偽物理地址對應的共享內存資源映射到特權虛擬機的系統內存中,其中,偽物理地址與本地虛擬地址具有一一對應性;
[0181 ] 構建關于該偽物理地址與相應的本地虛擬地址的映射關系的索引表。
[0182]上述內容給出了 DomU預分配和DomO的預映射機制:DomU在預先分配了一共享內存池,同時DomO預先將該共享內存池中的共享內存資源全部映射到了自身的內存空間中,并已建立了索引表以指明其中的具體映射關系。
[0183]基于上述的半虛擬化網卡前端驅動預分配和的半虛擬化網卡后端驅動預映射機制,從DomU的半虛擬化網卡前端驅動角度,本發明實施例所提供的通過半虛擬化驅動訪問硬件的方法可以包括:
[0184](I)DomU的半虛擬化網卡前端驅動每次接收到內核下發的網絡數據時,從預設共享內存池中申請處于非占用狀態的共享內存資源作為目標共享內存資源;
[0185](2)半虛擬化網卡前端驅動確定授權表中該目標共享內存資源的目標偽物理地址所在的目標授權項;
[0186](3)半虛擬化網卡前端驅動將攜帶有該目標授權項的標識的目標I/O請求放入I/O共享環中;
[0187](4)半虛擬化網卡前端驅動通過事件通道向DomO的半虛擬化網卡后端驅動發送目標事件通知;
[0188](5)當接收到該半虛擬化網卡后端驅動反饋的該目標事件通知對應的請求完成通知后,半虛擬化網卡前端驅動釋放該目標共享內存資源,將釋放后的該目標共享內存資源確定為該共享內存池中處于非占用狀態的共享內存資源。
[0189]基于上述的半虛擬化網卡前端驅動預分配和的半虛擬化網卡后端驅動預映射機制,從DomO的半虛擬化網卡后端驅動角度,本發明實施例所提供的通過半虛擬化驅動訪問硬件的方法可以包括:
[0190](I)DomO的半虛擬化網卡后端驅動接收DomU的半虛擬化網卡前端驅動發送的目標事件通知;
[0191](2)半虛擬化網卡后端驅動從I/O共享環中獲取相應的目標I/O請求,該目標I/O請求攜帶有目標授權項的標識;
[0192](3)根據授權表,半虛擬化網卡后端驅動確定該目標授權項的標識對應的目標偽物理地址;
[0193](4)根據預設的索引表,半虛擬化網卡后端驅動確定該目標偽物理地址對應的目標本地虛擬地址;
[0194](5)利用該本地虛擬地址,半虛擬化網卡后端驅動讀取該目標偽物理地址所對應目標內存資源中的網絡數據,并將該網絡數據轉發給相應的硬件;
[0195](6)在目標I/O請求完成后,半虛擬化網卡后端驅動通過事件通道向相應的半虛擬化網卡前端驅動反饋目標I/o請求完成通知,以指示該半虛擬化網卡前端驅動釋放該目標共享內存資源,將釋放后的該目標共享內存資源確定為該共享內存池中處于非占用狀態的共享內存資源,以此完成對該網卡的本次訪問。[0196]本發明實施例所提供的技術方案,由于DomU預先構建一共享內存池,而DomO預先將該共享內存池中的共享內存資源映射到自身的內存空間中,并建立指明具體映射關系的索引表,以此實現了 DomU和DomO之間的資源預映射;因此,在DomU訪問網卡而向外界傳輸數據時,在半虛擬化網卡前端驅動和半虛擬化網卡后端驅動的網絡通信過程中,由于無需進行非特權虛擬機和特權虛擬機之間的資源映射和解映射操作,可以完全避免特權虛擬機和虛擬機監控器之間的切換,從而降低了虛擬機網絡時延機CPU占用率。
[0197]通過以上的方法實施例的描述,所屬領域的技術人員可以清楚地了解到本發明可借助軟件加必需的通用硬件平臺的方式來實現,當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行本發明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:只讀存儲器(ROM)、隨機存取存儲器(RAM)、磁碟或者光盤等各種可以存儲程序代碼的介質。
[0198]相應于上面的方法實施例,一方面,本發明實施例提供了一種后端驅動,其設置于物理機中的特權虛擬機中,所述物理機包括:虛擬機監控器、設置有后端驅動的特權虛擬機以及至少一設置有前端驅動的非特權虛擬機,其中,所述虛擬機監控器通過至少提供事件通道、授權表和I/o共享環協助所述前端驅動和所述后端驅動進行通信;如圖9所示,所述后端驅動可以包括:
[0199]目標事件通知接收單元110,所述特權虛擬機的所述后端驅動接收所述非特權虛擬機的所述前端驅動通過所述事件通道發送的目標事件通知,并觸發目標I/o請求獲取單元120,其中,所述目標事件通知用于指示所述后端驅動從所述I/O共享環中獲取目標I/O請求;
[0200]目標I/O請求獲取單元120,用于從所述I/O共享環中獲取目標I/O請求,并觸發目標偽物理地址確定單元130,所述目標I/O請求攜帶有目標授權項的標識;
[0201]目標偽物理地址確定單元130,用于根據所述授權表,確定所述目標授權項的標識對應的目標偽物理地址,并觸發目標本地虛擬地址確定單元140,其中,所述授權表的授權項在所述非特權虛擬機初始化預先構建的共享內存池時被填充有所述共享內存池中的共享內存資源的偽物理地址,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識,所述共享內存池為所述非特權虛擬機初始化所述前端驅動時由所述非特權虛擬機構建并初始化;
[0202]目標本地虛擬地址確定單元140,用于根據預設的索引表,確定所述目標偽物理地址對應的目標本地虛擬地址,并觸發網絡數據處理單元150,其中,所述索引表在第一預映射單元160實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射過程中創建,其用于指明所述共享內存池中的共享內存資源與所述特權虛擬機的內存空間的映射關系;
[0203]網絡數據處理單元150,用于利用所述目標本地虛擬地址,讀取所述目標偽物理地址所對應目標共享內存資源中的網絡數據,并將所述網絡數據轉發給相應的硬件,以此實現對所述硬件的本次訪問;
[0204]第一預映射單元160,用于實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射。[0205]本發明實施例所提供的技術方案,由于非特權虛擬機預先構建一共享內存池,而特權虛擬機預先將該共享內存池中的共享內存資源映射到自身的內存空間中,并建立指明具體映射關系的索引表,以此實現了非特權虛擬機和特權虛擬機之間的資源預映射,因此,在非特權虛擬機訪問硬件而向外界傳輸數據時,在前端驅動和后端驅動的網絡通信過程中,由于無需進行非特權虛擬機和特權虛擬機之間的資源映射和解映射操作,可以完全避免特權虛擬機和虛擬機監控器之間的切換,從而降低了虛擬機網絡時延機CPU占用率。
[0206]更進一步的,該后端驅動還可以包括:
[0207]I/O請求完成通知發送單元,用于在所述目標I/O請求完成后,通過所述事件通道向所述前端驅動反饋I/O請求完成通知,以指示所述前端驅動釋放所述目標共享內存資源,將釋放后的所述目標共享內存資源確定為所述共享內存池中處于非占用狀態的共享內存資源。
[0208]其中,所述第一預映射單元160,可以包括:
[0209]初始化通知接收子單元,用于接收所述非特權虛擬機的所述前端驅動通過所述事件通道發送的初始化通知,并觸發I/o請求獲取子單元;
[0210]所述I/O請求獲取子單元,用于從所述I/O共享環中獲取I/O請求,所述I/O請求中攜帶授權項的標識,并觸發偽物理地址確定子單元;
[0211]所述偽物理地址確定子單元,用于根據所述授權表,確定所述I/O請求中所述授權項的標識對應的偽物理地址,并觸發資源映射子單元;
[0212]所述資源映射子單元,用于將所述偽物理地址對應的共享內存資源映射到所述特權虛擬機的系統內存中,并觸發索引表構建子單元,其中,所述偽物理地址與本地虛擬地址具有唯一對應性;
[0213]所述索引表構建子單元,用于構建關于所述偽物理地址與相應的本地虛擬地址的映射關系的索引表。
[0214]另一方面,本發明實施例還提供了一種前端驅動,其設置于物理機中的非特權虛擬機中,所述物理機包括:虛擬機監控器、設置有后端驅動的特權虛擬機以及至少一設置有前端驅動的非特權虛擬機,其中,所述虛擬機監控器通過至少提供事件通道、授權表和I/o共享環協助所述前端驅動和所述后端驅動進行通信;如圖10所示,所述前驅動可以包括:
[0215]網絡數據接收單元210,用于接收相應內核下發的網絡數據,并觸發目標內存資源確定單元220,其中,所述網絡數據為用于訪問硬件的數據;
[0216]目標內存資源確定單元220,用于將預設的共享內存池中的處于非占用狀態的共享內存資源作為所述網絡數據對應的目標共享內存資源,并觸發目標授權項確定單元230,所述共享內存池為所述非特權虛擬機初始化所述前端驅動時由所述非特權虛擬機構建并初始化;
[0217]目標授權項確定單元230,用于確定所述授權表中所述目標內存資源的目標偽物理地址所在的目標授權項,并觸發目標I/O請求處理單元240,其中,所述授權表的授權項在所述非特權虛擬機初始化所述共享內存池時被填充有所述共享內存池中的共享內存資源的偽物理地址,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識;
[0218]目標I/O請求處理單元240,用于將攜帶所述目標授權項的標識的目標I/O請求放入所述I/o共享環中,并觸發目標事件通知發送單元250,其中,所述目標I/O請求在第二預映射單元260協助所述后端驅動實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射的過程中構建;
[0219]目標事件通知發送單元250,用于通過所述事件通道向所述特權虛擬機的所述后端驅動發送目標事件通知,其中,所述目標事件通知用于指示所述后端驅動從所述I/o共享環中獲取目標I/o請求;
[0220]第二預映射單元260,用于協助所述后端驅動實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射。
[0221]本實施例所提供的技術方案中,非特權虛擬機的前端驅動將共享內存池中的共享內存資源作為所接收到網絡數據對應的目標共享內存資源,并將攜帶該目標共享內存資源的目標偽物理地址所在授權項的標識的目標I/o請求放入I/O共享環中,進而向后端驅動發送目標事件通知,以指示后端驅動獲取目標I/o請求,并通過預設的關于該非特權虛擬機對應共享內存池中的共享內存資源與該特權虛擬機的內存空間的映射關系的索引表,實現對該硬件的本次訪問。可見,在前端驅動和后端驅動的網絡通信過程中,由于無需進行非特權虛擬機和特權虛擬機之間的資源映射和解映射操作,可以完全避免特權虛擬機和虛擬機監控器之間的切換,從而降低了虛擬機網絡時延機CPU占用率。
[0222]更進一步的,該前端驅動還可以包括:
[0223]目標內存資源處理單元,用于當接收到所述后端驅動反饋的所述目標事件通知對應的請求完成通知后,釋放所述目標共享內存資源,將釋放后的所述目標共享內存資源確定為所述共享內存池中處于非占用狀態的共享內存資源。
[0224]其中,所述非特權虛擬機初始化所述共享內存池的過程可以包括:
[0225]所述非特權虛擬機將相應系統內存中的預設數量的內存資源作為處于非占用狀態的共享內存資源;將所述共享內存資源的偽物理地址填充至所述授權表中的授權項,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識;將所述共享內存資源和相應授權項的標識放置到所述共享內存池中;
[0226]相應的,第二預映射單元270,可以包括:
[0227]授權項標識確定子單元,用于從所述共享內存池中獲取所述授權項的標識,并觸發I/O請求處理子單元;
[0228]所述I/O請求處理子單元,用于構建攜帶所述授權項的標識的I/O請求,并將所述I/o請求放入I/O共享環中,并觸發初始化通知發送子單元,其中,所述授權項的標識與所述I/o請求具有唯一對應性;
[0229]所述初始化通知發送子單元,用于通過所述事件通道向所述特權虛擬機的所述后端驅動發送預設的初始化通知,其中,所述初始化通知用于指示所述后端驅動開啟所述非特權虛擬機與所述特權虛擬機的資源預映射過程。
[0230]對于裝置或系統實施例而言,由于其基本相應于方法實施例,所以相關之處參見方法實施例的部分說明即可。以上所描述的裝置或系統實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部模塊來實現本實施例方案的目的。本領域普通技術人員在不付出創造性勞動的情況下,即可以理解并實施。
[0231]在本發明所提供的幾個實施例中,應該理解到,所揭露的系統,裝置和方法,在沒有超過本申請的精神和范圍內,可以通過其他的方式實現。當前的實施例只是一種示范性的例子,不應該作為限制,所給出的具體內容不應該限制本申請的目的。例如,所述單元或子單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或多個子單元結合一起。另外,多個單元可以或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執行。
[0232]另外,所描述系統,裝置和方法以及不同實施例的示意圖,在不超出本申請的范圍內,可以與其它系統,模塊,技術或方法結合或集成。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
[0233]以上所述僅是本發明的【具體實施方式】,應當指出,對于本【技術領域】的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發明的保護范圍。
【權利要求】
1.一種通過半虛擬化驅動訪問硬件的方法,其特征在于,適用于物理機上,所述物理機包括:虛擬機監控器、設置有后端驅動的特權虛擬機以及至少一設置有前端驅動的非特權虛擬機,其中,所述虛擬機監控器通過至少提供事件通道、授權表和I/o共享環協助所述前端驅動和所述后端驅動進行通信;所述方法包括: 所述特權虛擬機的所述后端驅動接收所述非特權虛擬機的所述前端驅動通過所述事件通道發送的目標事件通知,其中,所述目標事件通知用于指示所述后端驅動從所述I/o共享環中獲取目標I/o請求; 從所述I/o共享環中獲取目標I/O請求,所述目標I/O請求攜帶有目標授權項的標識;根據所述授權表,確定所述目標授權項的標識對應的目標偽物理地址,其中,所述授權表的授權項在所述非特權虛擬機初始化預先構建的共享內存池時被填充有所述共享內存池中的共享內存資源的偽物理地址,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識,所述共享內存池為所述非特權虛擬機初始化所述前端驅動時由所述非特權虛擬機構建并初始化; 根據預設的索引表,確定所述目標偽物理地址對應的目標本地虛擬地址,其中,所述索引表在所述后端驅動實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射過程中創建,其用于指明所述共享內存池中的共享內存資源與所述特權虛擬機的內存空間的映射關系; 利用所述目標本地虛擬地址,讀取所述目標偽物理地址所對應目標共享內存資源中的網絡數據,并將所述網絡數據轉發給相應的硬件,以此實現對所述硬件的本次訪問。
2.根據權利要求1所述的方法,其特征在于,所述方法還包括: 在所述目標I/o請求完成后,通過所述事件通道向所述前端驅動反饋I/O請求完成通知,以指示所述前端驅動釋放所述`目標共享內存資源,將釋放后的所述目標共享內存資源確定為所述共享內存池中處于非占用狀態的共享內存資源。
3.根據權利要求1或2所述的方法,其特征在于,所述后端驅動實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射過程,包括: 所述后端驅動接收所述非特權虛擬機的所述前端驅動通過所述事件通道發送的初始化通知; 從所述I/o共享環中獲取I/O請求,所述I/O請求中攜帶授權項的標識; 根據所述授權表,確定所述I/o請求中所述授權項的標識對應的偽物理地址; 將所述偽物理地址對應的共享內存資源映射到所述特權虛擬機的系統內存中,其中,所述偽物理地址與本地虛擬地址具有唯一對應性; 構建關于所述偽物理地址與相應的本地虛擬地址的映射關系的索引表。
4.根據權利要求1所述的方法,其特征在于, 所述前端驅動為半虛擬化網卡前端驅動,所述后端驅動為半虛擬化網卡后端驅動; 或者, 所述前端驅動為半虛擬化磁盤前端驅動,所述后端驅動為半虛擬化磁盤后端驅動; 或者, 所述前端驅動為半虛擬化USB前端驅動,所述后端驅動為半虛擬化USB后端驅動。
5.一種后端驅動,其特征在于,設置于物理機中的特權虛擬機中,所述物理機包括:虛擬機監控器、設置有后端驅動的特權虛擬機以及至少一設置有前端驅動的非特權虛擬機,其中,所述虛擬機監控器通過至少提供事件通道、授權表和I/o共享環協助所述前端驅動和所述后端驅動進行通信;所述后端驅動包括: 目標事件通知接收單元,所述特權虛擬機的所述后端驅動接收所述非特權虛擬機的所述前端驅動通過所述事件通道發送的目標事件通知,并觸發目標I/o請求獲取單元,其中,所述目標事件通知用于指示所述后端驅動從所述I/o共享環中獲取目標I/O請求; 所述目標I/o請求獲取單元,用于從所述I/O共享環中獲取目標I/O請求,并觸發目標偽物理地址確定單元,所述目標I/o請求攜帶有目標授權項的標識; 所述目標偽物理地址確定單元,用于根據所述授權表,確定所述目標授權項的標識對應的目標偽物理地址,并觸發目標本地虛擬地址確定單元,其中,所述授權表的授權項在所述非特權虛擬機初始化預先構建的共享內存池時被填充有所述共享內存池中的共享內存資源的偽物理地址,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識,所述共享內存池為所述非特權虛擬機初始化所述前端驅動時由所述非特權虛擬機構建并初始化; 所述目標本地虛擬地址確定單元,用于根據預設的索引表,確定所述目標偽物理地址對應的目標本地虛擬地址,并觸發網絡數據處理單元,其中,所述索引表在第一預映射單元實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射過程中創建,其用于指明所述共享內存池中的共享內存資源與所述特權虛擬機的內存空間的映射關系; 所述網絡數據處理單元,用于利用所述目標本地虛擬地址,讀取所述目標偽物理地址所對應目標共享內存資源中的網絡數據,并將所述網絡數據轉發給相應的硬件,以此實現對所述硬件的本次訪問; 所述第一預映射單元,用于實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射。`
6.根據權利要求5所述的后端驅動,其特征在于,還包括: I/o請求完成通知發送單元,用于在所述目標I/O請求完成后,通過所述事件通道向所述前端驅動反饋I/o請求完成通知,以指示所述前端驅動釋放所述目標共享內存資源,將釋放后的所述目標共享內存資源確定為所述共享內存池中處于非占用狀態的共享內存資源。
7.根據權利要求5或6所述的后端驅動,其特征在于,所述第一預映射單元,包括: 初始化通知接收子單元,用于接收所述非特權虛擬機的所述前端驅動通過所述事件通道發送的初始化通知,并觸發I/o請求獲取子單元; 所述I/o請求獲取子單元,用于從所述I/O共享環中獲取I/O請求,所述I/O請求中攜帶授權項的標識,并觸發偽物理地址確定子單元; 所述偽物理地址確定子單元,用于根據所述授權表,確定所述I/o請求中所述授權項的標識對應的偽物理地址,并觸發資源映射子單元; 所述資源映射子單元,用于將所述偽物理地址對應的共享內存資源映射到所述特權虛擬機的系統內存中,并觸發索引表構建子單元,其中,所述偽物理地址與本地虛擬地址具有唯一對應性; 所述索引表構建子單元,用于構建關于所述偽物理地址與相應的本地虛擬地址的映射關系的索引表。
8.—種通過半虛擬化驅動訪問硬件的方法,其特征在于,適用于物理機上,所述物理機包括:虛擬機監控器、設置有后端驅動的特權虛擬機以及至少一設置有前端驅動的非特權虛擬機,其中,所述虛擬機監控器通過至少提供事件通道、授權表和I/O共享環協助所述前端驅動和所述后端驅動進行通信;所述方法包括: 所述非特權虛擬機的所述前端驅動接收相應內核下發的網絡數據,其中,所述網絡數據為用于訪問硬件的數據; 將預設的共享內存池中的處于非占用狀態的共享內存資源作為所述網絡數據對應的目標共享內存資源,所述共享內存池為所述非特權虛擬機初始化所述前端驅動時由所述非特權虛擬機構建并初始化; 確定所述授權表中所述目標共享內存資源的目標偽物理地址所在的目標授權項,其中,所述授權表的授權項在所述非特權虛擬機初始化所述共享內存池時被填充有所述共享內存池中的共享內存資源的偽物理地址,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識; 將攜帶所述目標授權項的標識的目標I/o請求放入所述I/O共享環中,其中,所述目標I/o請求在所述前端驅動協助所述后端驅動實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射的過程中構建; 通過所述事件通道向所述特權虛擬機的所述后端驅動發送目標事件通知,其中,所述目標事件通知用于指示所述后端驅動從所述I/o共享環中獲取目標I/O請求。
9.根據權利要求8所述的方法,其特征在于,還包括: 當接收到所述后端驅動反饋`的所述目標事件通知對應的請求完成通知后,釋放所述目標共享內存資源,將釋放后的所述目標共享內存資源確定為所述共享內存池中處于非占用狀態的共享內存資源。
10.根據權利要求8或9所述的方法,其特征在于,所述非特權虛擬機初始化所述共享內存池的過程包括: 所述非特權虛擬機將相應系統內存中的預設數量的內存資源作為處于非占用狀態的共享內存資源;將所述共享內存資源的偽物理地址填充至所述授權表中的授權項,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識;將所述共享內存資源和相應授權項的標識放置到所述共享內存池中; 其中,所述前端驅動協助所述后端驅動實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射的過程,包括: 所述前端驅動從所述共享內存池中獲取所述授權項的標識; 構建攜帶所述授權項的標識的I/o請求,并將所述I/O請求放入I/O共享環中,其中,所述授權項的標識與所述I/o請求具有唯一對應性; 通過所述事件通道向所述特權虛擬機的所述后端驅動發送預設的初始化通知,其中,所述初始化通知用于指示所述后端驅動開啟所述非特權虛擬機與所述特權虛擬機的資源預映射過程。
11.一種前端驅動,其特征在于,設置于物理機中的非特權虛擬機中,所述物理機包括:虛擬機監控器、設置有后端驅動的特權虛擬機以及至少一設置有前端驅動的非特權虛擬機,其中,所述虛擬機監控器通過至少提供事件通道、授權表和I/o共享環協助所述前端驅動和所述后端驅動進行通信;所述前驅動包括: 網絡數據接收單元,用于接收相應內核下發的網絡數據,并觸發目標內存資源確定單元,其中,所述網絡數據為用于訪問硬件的數據; 所述目標內存資源確定單元,用于將預設的共享內存池中的處于非占用狀態的共享內存資源作為所述網絡數據對應的目標共享內存資源,并觸發目標授權項確定單元,所述共享內存池為所述非特權虛擬機初始化所述前端驅動時由所述非特權虛擬機構建并初始化; 所述目標授權項確定單元,用于確定所述授權表中所述目標內存資源的目標偽物理地址所在的目標授權項,并觸發目標I/o請求處理單元,其中,所述授權表的授權項在所述非特權虛擬機初始化所述共享內存池時被填充有所述共享內存池中的共享內存資源的偽物理地址,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識; 所述目標I/o請求處理單元,用于將攜帶所述目標授權項的標識的目標I/O請求放入所述I/o共享環中,并觸發目標事件通知發送單元,其中,所述目標I/O請求在第二預映射單元協助所述后端驅動實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射的過程中構建; 所述目標事件通知發送單元,用于通過所述事件通道向所述特權虛擬機的所述后端驅動發送目標事件通知,其中,所述目標事件通知用于指示所述后端驅動從所述I/o共享環中獲取目標I/o請求; 所述第二預映射單元,用于協助所述后端驅動實現所述非特權虛擬機與所述特權虛擬機之間的資源預映射。
12.根據權利要求11所述的前端驅動,其特征在于,還包括:` 目標內存資源處理單元,用于當接收到所述后端驅動反饋的所述目標事件通知對應的請求完成通知后,釋放所述目標共享內存資源,將釋放后的所述目標共享內存資源確定為所述共享內存池中處于非占用狀態的共享內存資源。
13.根據權利要求11或12所述的前端驅動,其特征在于,所述非特權虛擬機初始化所述共享內存池的過程包括: 所述非特權虛擬機將相應系統內存中的預設數量的內存資源作為處于非占用狀態的共享內存資源;將所述共享內存資源的偽物理地址填充至所述授權表中的授權項,所述偽物理地址與所述授權項具有唯一對應性,且每一授權項唯一對應一標識;將所述共享內存資源和相應授權項的標識放置到所述共享內存池中; 相應的,所述第二預映射單元,包括: 授權項標識確定子單元,用于從所述共享內存池中獲取所述授權項的標識,并觸發I/o請求處理子單元; 所述I/o請求處理子單元,用于構建攜帶所述授權項的標識的I/O請求,并將所述I/O請求放入I/o共享環中,并觸發初始化通知發送子單元,其中,所述授權項的標識與所述I/O請求具有唯一對應性; 所述初始化通知發送子單元,用于通過所述事件通道向所述特權虛擬機的所述后端驅動發送預設的初始化通知,其中,所述初始化通知用于指示所述后端驅動開啟所述非特權虛擬機與所述特權虛擬機`的資源預映射過程。
【文檔編號】G06F9/455GK103870311SQ201210527643
【公開日】2014年6月18日 申請日期:2012年12月10日 優先權日:2012年12月10日
【發明者】唐明 申請人:華為技術有限公司