本發明涉及電子通訊技術領域,尤其涉及一種網卡故障注入方法及裝置。
背景技術:
傳統電信設備采用一體化軟硬件,在專用硬件平臺上搭建操作系統及應用軟件,軟硬件型號匹配相對固定,兼容性問題的發生范圍受限,設計、開發、測試針對確定的軟硬件環境,軟硬件質量受控于同一個設備商,因而系統可靠性得到有效保障。
隨著電信運營商成立逐漸聚焦網絡功能虛擬化即NFV的研究,把軟硬件解耦、通用計算、硬件標準化作為研究目標。NFV是一種致力于提升網絡的靈活性、效率、可管理性的新興解決方案,它試圖通過虛擬化技術和云計算實現在軟件中運行網絡應用。電信設備商紛紛投入NFV的研究和電信云產品研發,產品形態發生重大變化。
電信產品云化之后,硬件設備采用可采購通用設備,操作系統和應用軟件與硬件設備解耦,軟硬件之間的固定型號匹配關系不復存在,兼容性問題發生的范圍難以限制,設計、開發、測試無法針對確定的軟硬件環境,設備整體的質量不再受控于同一個設備商,因此系統可靠性面臨重大挑戰。
網絡功能虛擬化使軟件可靠性成為業界關注重點,NFV產品可靠性面臨重大挑戰,虛擬機監視器(Hypervisor)直接控制硬件設備從而成為潛在故障中心, 尤其在群集部署模式下,一旦發生故障影響大量客戶業務。在各種故障類型中,網絡故障在NFV中占據了突出位置。Hypervisor是一種運行在物理服務器和操作系統之間的中間軟件層,可允許多個操作系統和應用共享一套基礎物理硬件,因此也可以看作是虛擬環境中的“元”操作系統,它可以協調訪問服務器上的所有物理設備和虛擬機,也叫虛擬機監視器(Virtual Machine Monitor)。Hypervisor是所有虛擬化技術的核心。非中斷地支持多工作負載遷移的能力是Hypervisor的基本功能。當服務器啟動并執行Hypervisor時,它會給每一臺虛擬機分配適量的內存、CPU、網絡和磁盤,并加載所有虛擬機的客戶操作系統。因此業界需要能夠對Hypervisor實現故障注入的方法,以便觀察Hypervisor及以上各層的反應,從而來評估NFV整個系統的可靠性。
因此,對包括VMware ESXi,Xen,KVM,Hyper-V等在內的各種虛擬化平臺,缺乏一種能夠高效且通用的進行網絡故障注入的方法和裝置。
技術實現要素:
本發明實施例提供一種網卡故障注入方法及裝置,能夠通用于對各種虛擬機監視器(Hypervisor)實現高效可靠的故障注入。
第一方面提供一種網卡故障注入方法,包括:
虛擬機監視器(Hypervisor)在啟動階段加載網卡驅動時,使所述虛擬監視器中的網絡設備的接口引用網卡驅動的第一接口實現模塊;
在故障注入模式下,將故障注入模塊加載到所述虛擬機監視器 (Hypervisor)中,所述故障注入模塊包括第二接口實現模塊;
將所述故障注入模塊中的所述第二接口實現模塊替換所述網卡驅動的所述第一接口實現模塊,以使所述網絡設備的所述接口引用所述第二接口實現模塊;
獲取故障描述指令后,將所述故障描述指令發送到所述故障注入模塊,以使所述故障注入模塊從所述故障描述指令中獲取所述故障描述指令攜帶的故障注入參數;
在所述網絡設備的接口調用所述第二接口實現模塊的情況下,使所述故障注入模塊通過所述第二接口實現模塊向經過與所述網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數。
在第一方面第一種可能的實現方式中,所述獲取故障描述指令后,將所述故障描述指令發送到所述故障注入模塊,以使所述故障注入模塊從所述故障描述指令中獲取所述故障描述指令攜帶的故障注入參數,具體包括:
獲取故障描述指令后,將所述故障描述指令發送到所述故障注入模塊,所述故障描述指令攜帶故障注入參數,所述故障注入模塊從所述故障描述指令中讀取所述故障注入參數,以使所述故障注入模塊從所述故障描述指令中獲取所述故障描述指令攜帶的故障注入參數。
結合第一方面至第一方面第一種可能的實現方式中任一種可能的實現方式,在第二種可能的實現方式中,所述將所述故障注入模塊中的所述第二接口實現模塊替換所述網卡驅動的所述第一接口實現模塊,包括:
所述將所述網卡驅動中的N個第一接口實現模塊用所述故障注入模塊中N 個所述第二接口實現模塊替換,N為正整數。
結合第一方面至第一方面第二種可能的實現方式中任一種可能的實現方式,在第三種可能的實現方式中,所述在在所述網絡設備的接口調用所述第二接口實現模塊的情況下,使所述故障注入模塊通過所述第二接口實現模塊向經過與所述網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數后,還包括:
使所述第一接口實現模塊替換所述網卡驅動的所述第二接口實現模塊。
第二方面提供一種網卡故障注入方法,包括:
虛擬機監視器(Hypervisor)在啟動階段加載網卡驅動時,使所述虛擬監視器中的第一網絡設備的第一接口引用網卡驅動的第一接口實現模塊;
在故障注入模式下,將故障注入模塊加載到虛擬機監視器(Hypervisor)中,所述故障注入模塊包括第二接口實現模塊;
將所述故障注入模塊中的所述第二接口實現模塊替換所述網卡驅動的所述第一接口實現模塊,且將所述第一網絡設備用第二網絡設備替換,以使所述第二網絡設備的第二接口引用所述故障注入模塊的所述第二接口實現模塊;
獲取故障描述指令后,將所述故障描述指令發送到所述故障注入模塊的所述第二接口實現模塊,以使所述故障注入模塊的所述第二接口實現模塊從所述故障描述指令中獲取所述故障描述指令攜帶的故障注入參數;
在所述第二網絡設備的第二接口調用所述第二接口實現模塊的情況下,使所述第二接口實現模塊向經過與所述網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數。
在第二方面第一種可能的實現方式中,所述獲取故障描述指令后,將所述故障描述指令發送到所述故障注入模塊的所述第二接口實現模塊,以使所述故障注入模塊的所述第二接口實現模塊從所述故障描述指令中獲取所述故障描述指令攜帶的故障注入參數,具體包括:
獲取故障描述指令后,將所述故障描述指令發送到所述故障注入模塊,所述故障描述指令攜帶故障注入參數,所述故障注入模塊從所述故障描述指令中讀取所述故障注入參數,將所述故障注入參數發送給所述故障注入模塊的所述第二接口實現模塊,以使所述第二接口實現模塊獲取所述故障描述指令攜帶的所述故障注入參數。
結合第二方面至第二方面第一種可能的實現方式中任一種可能的實現方式,在第二種可能的實現方式中,所述將所述故障注入模塊中的所述第二接口實現模塊替換所述網卡驅動的所述第一接口實現模塊,且將所述第一網絡設備用第二網絡設備替換,以使所述第二網絡設備的第二接口引用所述故障注入模塊的所述第二接口實現模塊,包括:
所述將所述第一網卡驅動中的N個第一接口實現模塊用所述故障注入模塊中N個所述第二接口實現模塊替換,且將所述第一網絡設備用第二網絡設備替換,所述第二網絡設備包括N個第二接口,以使所述第二網絡設備的N個第二 接口引用所述故障注入模塊的N個所述第二接口實現模塊,N為正整數。
結合第二方面至第二方面第二種可能的實現方式中任一種可能的實現方式,在第三種可能的實現方式中,所述在所述網絡設備的接口調用所述第二接口實現模塊的情況下,使所述故障注入模塊通過所述第二接口實現模塊向經過與所述網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數之后,還包括:
將所述第二網絡設備的第二接口實現模塊替換為所述第一網絡設備的第一接口實現模塊,且將所述第二網絡設備的第二接口替換為所述第一網絡設備的第一接口。
第三方面提供一種網卡故障注入裝置,包括:協議棧、與網絡設備、與網卡驅動與網卡硬件,所述網卡驅動用于驅動所述網卡硬件傳輸數據包,所述網卡驅動包含第一接口實現模塊,所述網絡設備包含接口,所述網絡設備的所述接口引用所述網卡驅動的第一接口實現模塊以進行數據包的傳輸,所述協議棧與所述網絡設備之間進行數據包的傳輸,其特征在于,還包括:
故障注入模塊,包含參數處理模塊與第二接口實現模塊;
所述第二接口實現模塊,用于在故障注入模式下,替換所述網卡驅動包含的所述第一接口實現模塊;
所述參數處理模塊,用于獲取故障描述指令后,將所述故障描述指令中攜帶的故障注入參數發送給所述第二接口實現模塊;
所述第二接口實現模塊,還用于在所述網絡設備的接口引用所述第二接口實現模塊的情況下,所述第二接口實現模塊向經過與所述網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數。
在第三方面第一種可能的實現方式中,所述參數處理模塊,在所述用于獲取故障描述指令后,將所述故障描述指令中的故障注入參數發送給所述第二接口實現模塊方面,具體用于:
所述參數處理模塊,用于獲取故障描述指令后,所述故障描述指令攜帶故障注入參數,所述參數處理模塊從所述故障描述指令中讀取所述故障注入參數,將所述故障描述指令中的故障注入參數發送給所述第二接口實現模塊。
結合第三方面至第三方面第一種可能的實現方式中任一種可能的實現方式,在第二種可能的實現方式中,所述第一接口實現模塊,在所述所述第二接口實現模塊向經過與所述網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數之后,還用于替換所述網卡驅動的所述第二接口實現模塊。第四方面提供一種網卡故障注入裝置,包括:協議棧、與第一網絡設備、與網卡驅動與網卡硬件,所述網卡驅動用于驅動所述網卡硬件傳輸數據包,所述網卡驅動包含第一接口實現模塊,所述第一網絡設備包含第一接口,所述第一網絡設備的所述第一接口引用網卡驅動的第一接口實現模塊以進行數據包的傳輸,所述協議棧與所述第一網絡設備之間進行數據包的傳輸,其特征在于,還包括:
故障注入模塊與第二網絡設備;
所述故障注入模塊,與所述第一網絡設備相連,包含參數處理模塊與 第二接口實現模塊;
所述第二接口實現模塊,用于在故障注入模式下,替換所述網卡驅動
包含的所述第一接口實現模塊;
所述參數處理模塊,用于獲取故障描述指令后,將所述故障描述指令中的故障注入參數發送給所述第二接口實現模塊;
所述第二網絡設備,用于替換所述第一網絡設備,所述第二網絡設備包含第二接口;
在所述第二網絡設備的第二接口引用所述第二接口實現模塊的情況下,所述第二接口實現模塊向經過與所述網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數。
在第四方面第一種可能的實現方式中,所述所述參數處理模塊,在所述用于獲取故障描述指令后,將所述故障描述指令中的故障注入參數發送給所述第二接口實現模塊方面,具體用于:
所述參數處理模塊,用于獲取故障描述指令后,所述故障描述指令攜帶故障注入參數,所述參數處理模塊從所述故障描述指令中讀取所述故障注入參數,將所述故障描述指令中的故障注入參數發送給所述第二接口實現模塊。
結合第四方面至第四方面第一種可能的實現方式中任一種可能的實現方式,在第二種可能的實現方式中,
所述第一網絡設備的的第一接口,在所述第二接口實現模塊向經過與所述 網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數之后,還用于用于替換所述第二網絡設備的第二接口;
所述第一網絡設備的第一接口實現模塊,在所述第二接口實現模塊向經過與所述網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數之后,還用于替換所述第二網絡設備的第二接口實現模塊。
本發明技術突破通過設置新的故障注入模塊,用所述故障注入模塊替換驅動網卡中的接口實現,從而實現對虛擬機監視器(Hypervisor)進行故障注入,可以用與任何一種具體網卡硬件和網卡驅動無關的方法對各種虛擬機監視器(Hypervisor)(如ESXi)注入網絡故障,與虛擬機監視器(Hypervisor)內核無硬綁定關系,故障注入模塊安裝和卸載簡單,無需修改對虛擬機監視器(Hypervisor)(如ESXi)安裝映像文件,無需重啟系統,而且本發明技術應用場景不受限制,無論是實驗室小規模云化場景還是真實數據中心大規模云化場景都可以應用,為網絡功能虛擬化NFV云化產品的可靠性驗證和評估提供了基礎高效且通用的方法。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本發明實施例提供的一種網卡故障注入方法的實施例一流程圖;
圖2為本發明實施例提供的一種網卡故障注入方法的實施例二流程圖;
圖3為本發明實施例提供的一種網卡故障注入裝置的實施例一結構示意圖;
圖4為本發明實施例提供的一種網卡故障注入裝置的實施例二結構示意圖;
具體實施方式
為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
如圖1所示,本發明實施例提供的一種網卡故障注入方法實施例一,包括:
步驟S101,虛擬機監視器(Hypervisor)在啟動階段加載網卡驅動時,使所述虛擬監視器中的網絡設備的接口引用網卡驅動的第一接口實現模塊;具體地,在虛擬機監視器(Hypervisor)中,網絡包自上而下需要經過幾個模塊的處理,分別是協議棧,網絡設備,網卡驅動,網卡硬件。其中協議棧和網絡設備是屬于虛擬機監視器(如ESXi)自身包含的模塊,網卡驅動是由設備商提供并安裝到虛擬機監視器中的部分。ESXi系統中每個物理網卡對應一個抽象的網絡設備NetDevice,其中包括網絡I/O所需的控制接口和控制數據,所有網絡設備NetDevice形成一個鏈表。系統中每種類型的網卡對應一個網卡驅動程序,屬于同一網卡類型的網絡設備NetDevice關聯到對應的網卡驅動。由于存在不同的網卡產品及其對應的驅動程序需要(Hypervisor,如ESXi)集成,因此網絡設 備層和網卡驅動之間的交互必須遵循一定的規范,這種規范就是接口。網卡驅動提供接口實現模塊,網絡設備持有接口以對網卡驅動提供的接口實現模塊進行引用,網絡設備與網卡驅動之間控制流的轉移就是通過接口來實現。在系統啟動階段加載網卡驅動時,在網卡驅動的接口實現模塊與網絡設備層的接口之間建立起對應關系,即明確特定網絡設備的接口與特定的網卡驅動的接口實現模塊所對應,建立特定網絡設備的接口對特定網卡驅動的引用就是指建立所述對應關系。
步驟S102,在故障注入模式下,將故障注入模塊加載到所述虛擬機監視器(Hypervisor)中,所述故障注入模塊包括第二接口實現模塊;具體地,所述故障注入模塊為新增模塊。所述在故障注入模式下,為在人工輸入故障指令的情況下,或者為在程序自動輸入故障指令的模式下。
步驟S103,將所述故障注入模塊中的所述第二接口實現模塊替換所述網卡驅動的所述第一接口實現模塊,以使所述網絡設備的所述接口引用所述第二接口實現模塊;;具體地,為了向(Hypervisor,如ESXi)注入網絡故障,需要部分改變原有網絡數據的處理流程。網絡設備與驅動程序之間通過接口傳遞控制方式是一種松耦合關系,這種關聯關系是(Hypervisor,如ESXi)運行中動態建立,因此可以被修改。如果把某個網絡設備的接口引用修改成指向具有網絡故障注入能力的非驅動程序提供的接口實現,就能有效實現故障注入。由于網絡包的I/O處理最終需要通過網卡驅動中的接口實現來發送給硬件網卡或者從網卡讀取到內核,因此如果改變接口實現的處理流程就有可能實現注入網絡 故障,例如網絡丟包,傳輸延遲,網絡斷連,網絡閃斷策略參數等。而如果直接修改網卡驅動中的接口實現,就不具有通用性。因此,從網絡設備的角度來看,它所調用的接口實現是通過事先注冊的接口找到的,而并不強制該接口實現究竟是位于網卡驅動或是其他模塊,改變接口的引用關系就相當于改變所引用的接口實現模塊,如果把網絡設備中注冊的接口修改成讓它指向到具備故障注入功能的接口實現,就能實現網絡故障注入。
步驟S104,獲取故障描述指令后,將所述故障描述指令發送到所述故障注入模塊的所述第二接口實現模塊,以使所述故障注入模塊的所述第二接口實現模塊從所述故障描述指令中獲取故障注入參數;;具體地,所述故障注入模塊從網絡包的I/O輸入流中獲取用戶輸入的故障描述指令,所述故障描述指令用于指示網絡故障注入策略,攜帶例如網絡丟包,傳輸延遲,網絡斷連,網絡閃斷等策略的故障注入參數。
步驟S105,在所述網絡設備的接口調用所述第二接口實現模塊的情況下,使所述第二接口實現模塊根據所述故障注入參數,對所述網絡設備對應的網卡硬件所處理的數據包注入故障。具體地,虛擬機監視器(Hypervisor,如ESXi)與外部通信過程中,如果網絡設備層需要訪問網卡驅動,就回調接口引用,實現對所述第二接口實現模塊進行故障注入的同時,使網絡設備層與網卡驅動傳遞的網絡包攜帶了故障。在步驟101中建立特定網絡設備的接口對特定網卡驅動的引用關系的基礎上,當網絡設備的接口與網卡驅動之間實際傳輸數據包時,網絡設備的接口調用先前建立起引用關系的第二接口實現模塊中的程序。
有益效果:本發明技術突破對虛擬機監視器(Hypervisor,如ESXi)無法注入故障的難題,可以用與任何一種具體網卡硬件和網卡驅動無關的方法對虛擬機監視器(Hypervisor,如ESXi)注入網絡故障,對虛擬操作系統(Hypervisor,如ESXi)內核無硬綁定關系,故障注入模塊安裝和卸載簡單,無需修改對虛擬操作系統(Hypervisor,如ESXi)安裝映像文件,無需重啟系統,而且本發明技術應用場景不受限制,無論是實驗室小規模云化場景還是真實數據中心大規模云化場景都可以應用,為網絡功能虛擬化(NFV)云化產品的可靠性驗證和評估提供了基礎高效且通用的方法。
進一步地,步驟S106,獲取故障描述指令后,將所述故障描述指令發送到所述故障注入模塊,所述故障描述指令攜帶故障注入參數,所述故障注入模塊從所述故障描述指令中讀取所述故障注入參數,以使所述故障注入模塊從所述故障描述指令中獲取所述故障描述指令攜帶的故障注入參數。
進一步地,步驟S107,所述將所述網卡驅動中的N個接口實現模塊用所述故障注入模塊中N個所述第二接口實現模塊替換,N為正整數。具體地,所述將故障注入模塊加載到所述虛擬機監視器(Hypervisor)中,所述故障注入模塊包括至少一個第二接口實現模塊。
有益效果:所述故障注入模塊包括一個或多個接口實現模塊,以將各個接口實現模塊分別用于與網絡設備的各個接口進行數據傳輸。在網絡設備存在多個接口的情況下,實現第二網絡設備的N個第二接口分別引用故障注入模塊中N個接口中的一個。
進一步地,步驟S108,將所述第二網絡設備的第二接口實現模塊替換為所述網絡設備的接口實現模塊,且將所述第二網絡設備的第二接口替換為所述網絡設備的接口。
有益效果:在注入故障之后,切換回正常工作時的接口實現模塊或切換回正常工作時的接口實現模塊與網絡設備接口,以使得所述虛擬機監視器(Hypervisor,如ESXi)返回正常工作狀態。
如圖2所示,本發明實施例提供的一種網卡故障注入方法實施例二,包括:步驟S201,虛擬機監視器(Hypervisor)在啟動階段加載網卡驅動時,使所述虛擬監視器中的第一網絡設備的第一接口引用網卡驅動的第一接口實現模塊;具體地,在虛擬機監視器(Hypervisor)中,網絡包自上而下需要經過幾個模塊的處理,分別是協議棧,網絡設備,網卡驅動,網卡硬件。其中協議棧和網絡設備是屬于虛擬操作系統(如ESXi)自身包含的模塊,網卡驅動是由設備商提供并安裝到虛擬操作系統中的部分。ESXi系統中每個物理網卡對應一個抽象的網絡設備NetDevice,其中包括網絡I/O所需的控制接口和控制數據,所有網絡設備NetDevice形成一個鏈表。系統中每種類型的網卡對應一個網卡驅動程序,屬于同一網卡類型的網絡設備NetDevice關聯到對應的網卡驅動。由于存在不同的網卡產品及其對應的驅動程序需要(Hypervisor,如ESXi)集成,因此網絡設備層和網卡驅動之間的交互必須遵循一定的規范,這種規范就是接口。網卡驅動提供接口實現模塊,網絡設備持有接口以對網卡驅動提供的接口實現模塊進行引用,網絡設備與網卡驅動之間控制流的轉移就是通過接口來實現。 在系統啟動階段加載網卡驅動時,在網卡驅動的接口實現模塊與網絡設備層的接口之間建立起對應關系,即明確特定網絡設備的接口與特定的網卡驅動的接口實現模塊所對應,建立特定網絡設備的接口對特定網卡驅動的引用就是指建立所述對應關系。
步驟S202,在故障注入模式下,將故障注入模塊加載到虛擬機監視器(Hypervisor)中,所述故障注入模塊包括第二接口實現模塊;;具體地,所述故障注入模塊為新增模塊。
步驟S203,將所述故障注入模塊中的所述第二接口實現模塊替換所述網卡驅動的所述第一接口實現模塊,且將所述第一網絡設備用第二網絡設備替換,以使所述第二網絡設備的第二接口引用所述故障注入模塊的所述第二接口實現模塊;具體地,為了向虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)注入網絡故障,需要部分改變原有網絡數據的處理流程。網絡設備與驅動程序之間通過接口傳遞控制方式是一種松耦合關系,這種關聯關系是虛擬機監視器(Hypervisor,如ESXi)運行中動態建立,因此可以被修改。如果把某個網絡設備的接口引用修改成指向具有網絡故障注入能力的非驅動程序提供的接口實現,就能有效實現故障注入。由于網絡包的I/O處理最終需要通過網卡驅動中的接口實現來發送給硬件網卡或者從網卡讀取到內核,因此如果改變接口實現的處理流程就有可能實現注入網絡故障,例如網絡丟包,傳輸延遲,網絡斷連,網絡閃斷等。而如果直接修改網卡驅動中的接口實現,就不具有通用性。因此,從網絡設備的角度來看,它所調用的接口實現是通過事先注冊的接口引用找到 的,而并不強制該接口實現究竟是位于網卡驅動或是其他模塊,改變接口引用就相當于改變接口實現,如果把網絡設備中注冊的接口修改成讓它指向到具備故障注入功能的接口實現,就能實現網絡故障注入。
步驟S204,獲取故障描述指令后,將所述故障描述指令發送到所述故障注入模塊的所述第二接口實現模塊,以使所述故障注入模塊的所述第二接口實現模塊從所述故障描述指令中獲取所述故障描述指令攜帶的故障注入參數;具體地,所述故障注入模塊從網絡包的I/O輸入流中獲取用戶輸入的故障描述指令,所述故障描述指令用于指示網絡故障注入策略,攜帶例如網絡丟包,傳輸延遲,網絡斷連,網絡閃斷等策略的故障注入參數。
步驟S205,在所述第二網絡設備的第二接口調用所述第二接口實現模塊的情況下,使所述第二接口實現模塊向經過與所述網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數。具體地,虛擬機監視器(Hypervisor,如ESXi)與外部通信過程中,如果網絡設備層需要訪問網卡驅動,就回調接口引用,實現對所述第二接口實現模塊進行故障注入參數注入的同時,使網絡設備層與網卡驅動傳遞的網絡包攜帶了故障注入參數。在步驟101中建立特定網絡設備的接口對特定網卡驅動的引用關系的基礎上,當網絡設備的接口與網卡驅動之間實際傳輸數據包時,網絡設備的接口調用先前建立起引用關系的第二接口實現模塊中的程序。
有益效果:本發明技術突破對(Hypervisor,如ESXi)無法注入故障的難題,可以用與任何一種具體網卡硬件和網卡驅動無關的方法對虛擬機監視器 (Hypervisor,如ESXi)注入網絡故障,對虛擬操作系統(Hypervisor,如ESXi)內核無硬綁定關系,故障注入模塊安裝和卸載簡單,無需修改對虛擬操作系統(Hypervisor,如ESXi)安裝映像文件,無需重啟系統,而且本發明技術應用場景不受限制,無論是實驗室小規模云化場景還是真實數據中心大規模云化場景都可以應用,為網絡功能虛擬化(NFV)云化產品的可靠性驗證和評估提供了基礎高效且通用的方法。
進一步地,步驟S206,獲取故障描述指令后,將所述故障描述指令發送到所述故障注入模塊,所述故障描述指令攜帶故障注入參數,所述故障注入模塊從所述故障描述指令中讀取所述故障注入參數,將所述故障注入參數發送給所述故障注入模塊的所述第二接口實現模塊,以使所述第二接口實現模塊獲取所述故障描述指令攜帶的所述故障注入參數。
進一步地,步驟S207,所述將所述網卡驅動中的N個接口實現模塊用所述故障注入模塊中N個所述第二接口實現模塊替換,且將所述網絡設備用一個第二網絡設備替換,所述第二網絡設備包括N個第二接口,使所述第二網絡設備的N個第二接口引用所述第二故障注入模塊的N個所述第二接口實現模塊,N為正整數。
有益效果:在網絡設備存在多個接口的情況下,實現第二網絡設備的N個第二接口分別引用故障注入模塊中N個接口中的一個。
進一步地,步驟S208,將所述第二網絡設備的第二接口實現模塊替換為所述網絡設備的接口實現模塊,且將所述第二網絡設備的第二接口替換為所述網 絡設備的接口。
有益效果:在注入故障之后,切換回正常工作時的接口實現模塊或切換回正常工作時的接口實現模塊與網絡設備接口,以使得所述虛擬機監視器(Hypervisor,如ESXi)返回正常工作狀態。
如圖3所示,本發明實施例提供的一種網卡故障注入裝置實施例一的結構示意圖,包括:
協議棧31、與網絡設備32、與網卡驅動33與網卡硬件34,所述網卡驅動33用于驅動所述網卡硬件34傳輸數據包,所述網卡驅動33包含第一接口實現模塊35,所述網絡設備包含接口36,所述網絡設備的所述接口36引用所述網卡驅動的第一接口實現模塊35以進行數據包的傳輸;具體地,在虛擬機監視器(Hypervisor)中,網絡包自上而下需要經過幾個模塊的處理,分別是協議棧,網絡設備,網卡驅動,網卡硬件。其中協議棧和網絡設備是屬于虛擬操作系統(如ESXi)自身包含的模塊,網卡驅動是由設備商提供并安裝到虛擬操作系統中的部分。ESXi系統中每個物理網卡對應一個抽象的網絡設備NetDevice,其中包括網絡I/O所需的控制接口和控制數據,所有網絡設備NetDevice形成一個鏈表。系統中每種類型的網卡對應一個網卡驅動程序,屬于同一網卡類型的網絡設備NetDevice關聯到對應的網卡驅動。由于存在不同的網卡產品及其對應的驅動程序需要虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)集成,因此網絡設備層和網卡驅動之間的交互必須遵循一定的規范,這種規范就是接口。
網卡驅動提供接口實現模塊,網絡設備持有接口以對網卡驅動提供的接口 實現模塊進行引用,網絡設備與網卡驅動之間控制流的轉移就是通過接口來實現。在系統啟動階段加載網卡驅動時,在網卡驅動的接口實現模塊與網絡設備層的接口之間建立起對應關系,即明確特定網絡設備的接口與特定的網卡驅動的接口實現模塊所對應,建立特定網絡設備的接口對特定網卡驅動的引用就是指建立所述對應關系。
所述協議棧31與所述網絡設備32之間進行數據包的傳輸;
所述裝置還包括故障注入模塊37,包含參數處理模塊39與第二接口實現模塊38;具體地,所述故障注入模塊為新增模塊。
所述第二接口實現模塊38,用于在故障注入模式下,替換所述網卡驅動包含的所述第一接口實現模塊35;具體地,為了向虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)注入網絡故障,需要部分改變原有網絡數據的處理流程。網絡設備與驅動程序之間通過接口傳遞控制方式是一種松耦合關系,這種關聯關系是(Hypervisor,如ESXi)運行中動態建立,因此可以被修改。如果把某個網絡設備的接口引用修改成指向具有網絡故障注入能力的非驅動程序提供的接口實現,就能有效實現故障注入。由于網絡包的I/O處理最終需要通過網卡驅動中的接口實現來發送給硬件網卡或者從網卡讀取到內核,因此如果改變接口實現的處理流程就有可能實現注入網絡故障,例如網絡丟包,傳輸延遲,網絡斷連,網絡閃斷等。而如果直接修改網卡驅動中的接口實現,就不具有通用性。因此,從網絡設備的角度來看,它所調用的接口實現是通過事先注冊的接口引用找到的,而并不強制該接口實現究竟是位于網卡驅動或是其他模塊, 改變接口引用就相當于改變接口實現,如果把網絡設備中注冊的接口修改成讓它指向到具備故障注入功能的接口實現,就能實現網絡故障注入。
所述參數處理模塊39,所述參數處理模塊,用于獲取故障描述指令后,將所述故障描述指令中攜帶的故障注入參數發送給所述第二接口實現模塊38;具體地,所述故障注入模塊從網絡包的I/O輸入流中獲取用戶輸入的故障描述指令,所述故障描述指令用于指示網絡故障注入策略,攜帶例如網絡丟包,傳輸延遲,網絡斷連,網絡閃斷等策略的故障注入參數。
所述第二接口實現模塊38,還用于在所述網絡設備的接口36引用所述第二接口實現模塊38的情況下,所述第二接口實現模塊38向經過與所述網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數。具體地,虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)與外部通信過程中,如果網絡設備層需要訪問網卡驅動,就調用接口實現模塊,實現對所述新的接口實現模塊進行故障注入的同時,使網絡設備層與網卡驅動傳遞的網絡包攜帶了故障。在上述建立特定網絡設備的接口對特定網卡驅動的引用關系的基礎上,當網絡設備的接口與網卡驅動之間實際傳輸數據包時,網絡設備的接口調用先前建立起引用關系的第二接口實現模塊中的程序。
有益效果:本發明技術突破對虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)無法注入故障的難題,可以用與任何一種具體網卡硬件和網卡驅動無關的方法對虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)注入網絡故障,對虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)內核無硬綁定關 系,故障注入模塊安裝和卸載簡單,無需修改對虛擬操作系統(Hypervisor,如ESXi)安裝映像文件,無需重啟系統,而且本發明技術應用場景不受限制,無論是實驗室小規模云化場景還是真實數據中心大規模云化場景都可以應用,為網絡功能虛擬化(NFV)云化產品的可靠性驗證和評估提供了基礎高效且通用的方法。
進一步地,所述參數處理模塊39,用于獲取故障描述指令后,將所述故障描述指令中的故障注入參數發送給所述第二接口實現模塊38,具體用于:
所述參數處理模塊39,用于獲取故障描述指令后,所述故障描述指令攜帶故障注入參數,所述參數處理模塊從所述故障描述指令中讀取所述故障注入參數,將所述故障描述指令中的故障注入參數發送給所述第二接口實現模塊38。
所述故障注入模塊37,包括至少一個第二接口實現模塊38。所述網絡設備32,具有至少一個接口36。
有益效果:所述故障注入模塊包括一個或多個接口實現模塊,以將各個接口實現模塊分別用于與網絡設備的各個接口進行數據傳輸。在網絡設備存在多個接口的情況下,實現第二網絡設備的N個新的接口分別引用故障注入模塊中N個接口中的一個。
進一步地,所述第一接口實現模塊,在所述所述第二接口實現模塊向經過與所述網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數之后,還用于替換所述網卡驅動的所述第二接口實現模塊。
有益效果:在注入故障之后,系統切換回正常工作時的第一接口實現模塊, 以使得所述虛擬操作系統(Hypervisor,如ESXi)返回正常工作狀態。
如圖4所示,本發明實施例提供的一種網卡故障注入裝置實施例二的結構示意圖,包括:
協議棧41、與第一網絡設備42、與網卡驅動43與網卡硬件44,所述網卡驅動43用于驅動所述網卡硬件44傳輸數據包,所述網卡驅動43包含第一接口實現模塊46,所述第一網絡設備42包含第一接口45,所述第一網絡設備42的所述第一接口45引用網卡驅動43的第一接口實現模塊46以進行數據包的傳輸,所述協議棧41與所述第一網絡設備42之間進行數據包的傳輸;具體地,在虛擬機監視器(Hypervisor)(Hypervisor)中,網絡包自上而下需要經過幾個模塊的處理,分別是協議棧,網絡設備,網卡驅動,網卡硬件。其中協議棧和網絡設備是屬于虛擬機監視器(Hypervisor)(如ESXi)自身包含的模塊,網卡驅動是由設備商提供并安裝到虛擬操作系統中的部分。ESXi系統中每個物理網卡對應一個抽象的網絡設備NetDevice,其中包括網絡I/O所需的控制接口和控制數據,所有網絡設備NetDevice形成一個鏈表。系統中每種類型的網卡對應一個網卡驅動程序,屬于同一網卡類型的網絡設備NetDevice關聯到對應的網卡驅動。由于存在不同的網卡產品及其對應的驅動程序需要虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)集成,因此網絡設備層和網卡驅動之間的交互必須遵循一定的規范,這種規范就是接口。
網卡驅動提供接口實現模塊,網絡設備持有接口以對網卡驅動提供的接口實現模塊進行引用,網絡設備與網卡驅動之間控制流的轉移就是通過接口來實 現。在系統啟動階段加載網卡驅動時,在網卡驅動的接口實現模塊與網絡設備層的接口之間建立起對應關系,即明確特定網絡設備的接口與特定的網卡驅動的接口實現模塊所對應,建立特定網絡設備的接口對特定網卡驅動的引用就是指建立所述對應關系。
所述裝置還包括故障注入模塊48與第二網絡設備47;
所述故障注入模塊48,與所述第一網絡設備42相連,包含參數處理模塊410與第二接口實現模塊49;具體地,所述故障注入模塊48為新增模塊。
所述第二接口實現模塊49,用于替換所述網卡驅動43包含的所述第一接口實現模塊46;所述第二接口實現模塊,用于在故障注入模式下,替換所述網卡驅動包含的所述第一接口實現模塊;具體地,為了向虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)注入網絡故障,需要部分改變原有網絡數據的處理流程。網絡設備與驅動程序之間通過接口傳遞控制方式是一種松耦合關系,這種關聯關系是虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)運行中動態建立,因此可以被修改。如果把某個網絡設備的接口引用修改成指向具有網絡故障注入能力的非驅動程序提供的接口實現,就能有效實現故障注入。由于網絡包的I/O處理最終需要通過網卡驅動中的接口實現來發送給硬件網卡或者從網卡讀取到內核,因此如果改變接口實現的處理流程就有可能實現注入網絡故障,例如網絡丟包,傳輸延遲,網絡斷連,網絡閃斷等。而如果直接修改網卡驅動中的接口實現,就不具有通用性。因此,從網絡設備的角度來看,它所調用的接口實現是通過事先注冊的接口通過引用關系找到的,而并不 強制該接口實現究竟是位于網卡驅動或是其他模塊,改變接口的引用關系就相當于改變接口實現,如果把網絡設備中注冊的接口修改成讓它指向到具備故障注入功能的接口實現,就能實現網絡故障注入。
所述參數處理模塊410,用于獲取故障描述指令后,將所述故障描述指令中的故障注入參數發送給所述第二接口實現模塊49;具體地,所述故障注入模塊從網絡包的I/O輸入流中獲取用戶輸入的故障描述指令,所述故障描述指令用于指示網絡故障注入策略,如網絡丟包,傳輸延遲,網絡斷連,網絡閃斷等策略參數。
所述第二網絡設備47,用于替換所述第一網絡設備42,所述第二網絡設備包含第二接口411;具體地,所述第二接口411可以為N個。
在所述第二網絡設備的第二接口引用所述第二接口實現模塊的情況下,所述第二接口實現模塊向經過與所述網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數。具體地,虛擬機監視器(Hypervisor)Hypervisor,如ESXi)與外部通信過程中,如果網絡設備層需要訪問網卡驅動,就回調接口引用,實現對所述新的接口實現模塊進行故障注入的同時,使網絡設備層與網卡驅動傳遞的網絡包攜帶了故障。
有益效果:本發明技術突破對虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)無法注入故障的難題,可以用與任何一種具體網卡硬件和網卡驅動無關的方法對虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)注入網絡故障,對虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)內核無硬綁定關 系,故障注入模塊安裝和卸載簡單,無需修改對虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)安裝映像文件,無需重啟系統,而且本發明技術應用場景不受限制,無論是實驗室小規模云化場景還是真實數據中心大規模云化場景都可以應用,為網絡功能虛擬化(NFV)云化產品的可靠性驗證和評估提供了基礎高效且通用的方法。
進一步地,所述參數處理模塊410,在所述用于獲取故障描述指令后,將所述故障描述指令中的故障注入參數發送給所述第二接口實現模塊49方面,具體用于:
所述參數處理模塊,用于獲取故障描述指令后,所述故障描述指令攜帶故障注入參數,所述參數處理模塊從所述故障描述指令中讀取所述故障注入參數,將所述故障描述指令中的故障注入參數發送給所述第二接口實現模塊。
所述故障注入模塊48,包括至少一個第二接口實現模塊49;所述第一網絡設備42,具有至少一個第一接口45;所述第二網絡設備47,具有至少一個第二接口411。
有益效果:在網絡設備存在多個接口的情況下,實現新的網絡設備的N個第二接口分別引用故障注入模塊中N個接口中的一個。有益效果:所述故障注入模塊包括一個或多個第二接口實現模塊,以將各個第二接口實現模塊分別用于與第二網絡設備的各個接口進行數據傳輸。
所述第一網絡設備的的第一接口,在所述第二接口實現模塊向經過與所述 網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數之后,還用于用于替換所述第二網絡設備的第二接口;
所述第一網絡設備的第一接口實現模塊,在所述第二接口實現模塊向經過與所述網絡設備對應的網卡硬件處理的數據包注入所述故障注入參數之后,還用于替換所述第二網絡設備的第二接口實現模塊。
有益效果:在注入故障之后,系統切換回正常工作時的第一接口實現模塊46或切換回正常工作時的第一接口實現模塊46與第一網絡設備的第一接口42,以使得所述虛擬機監視器(Hypervisor)(Hypervisor,如ESXi)返回正常工作狀態。
最后應說明的是:以上各實施例僅用以說明本發明的技術方案,而非對其限制;盡管參照前述各實施例對本發明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分或者全部技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發明各實施例技術方案的范圍。