專利名稱:一種千兆交換環境下千兆網卡的快速切換方法
技術領域:
本發明涉及計算機領域中的高可用技術,特指一種千兆交換環境下千兆網卡的快 速切換方法。
背景技術:
由于服務器的特殊地位,保持服務器的高可用性和安全性是企業級IT環境的重 要指標,其中最重要的一點是服務器網絡連接的高可用性,隨著網絡技術的發展,網絡的規 模逐漸的增大。網卡綁定技術是提高服務器網絡連接的可用性和可靠性的有效方法之一。 多網卡綁定就是通過軟硬件設置將兩塊或者多塊網卡綁定在同一個IP地址上,使用起來 就好像在使用一塊網卡。許多高檔服務器的網卡(例如intel825^系列、3COM服務器網卡 等)都具有多網卡綁定功能。應用和實踐表明,在千兆交換環境下,千兆網卡在綁定模式下工作時系統的可靠 性和實時性并不能滿足需求。具體表現為當兩塊千兆網卡工作在綁定驅動程序的主備模 式下時,一旦當前工作網卡的鏈路發生故障,綁定驅動程序自動將收發報文的工作切換到 備份網卡上,從而使得系統能夠正常運行。在百兆環境下,千兆網卡在切換速度已經達到十 毫秒級,而千兆環境下千兆網卡的切換速度卻是百毫秒級。究其原因,千兆交換網絡是一 種全雙工能糾錯的系統,網卡物理層總是同時接收鏈路對方和本地傳輸的數據。因而,當 鏈路斷裂時,雖然網卡物理層接收不到任何鏈路對方的數據,但是它仍然在接收本地的傳 輸信號,不會去做鏈路檢測工作。因此,IEEE 802. 3標準規范第40條規定,當網卡內部的 maxwait_timer定時器(設置時間350士5毫秒)超時后才能判定鏈路狀態斷裂故障。在許 多對高可靠和高靈敏性要求極高的關鍵服務器應用中,這種情況無疑將無法滿足需求。
發明內容
本發明要解決的問題就在于針對千兆網卡在操作系統內核中千兆環境下切換速 度過慢的缺陷,本發明提供一種千兆網卡鏈路狀態監控技術方法,該方法應用于千兆網卡 設備驅動程序中后,可以實現在千兆網絡環境下,操作系統內核中的千兆網卡設備驅動程 序對網卡鏈路故障的感知性能提升一個數量級,即百毫秒級提升至十毫秒級。為解決上述技術問題,本發明的技術方案為設計一個輪詢定時器、一個歷史鏈路 狀態變量和一個鏈路斷裂變量,在千兆網卡設備驅動程序中加入用于輪詢網卡寄存器的定 時器,該定時器通過輪詢網卡寄存器內容檢測網絡鏈路狀態變化情況,在鏈路狀態從連通 變化到斷開時,設置網卡中斷寄存器的鏈路狀態改變位,來提前引發鏈路狀態改變中斷。本發明設計一個輪詢定時器、一個歷史鏈路狀態變量和一個鏈路斷裂變量,以實 現對鏈路狀態斷裂信息的快速獲取和快速響應,從而實現網卡的快速切換,借助鏈路狀態 寄存器的值變化來獲取網絡鏈路斷裂信息。網卡寄存器輪詢定時器在網卡設備驅動初始化函數中進行對歷史鏈路狀態變量 和鏈路斷裂變量的初始化和本定時器的啟動,在網卡驅動反初始化函數中關閉本定時器,定時器函數通過讀取網卡鏈路狀態改變寄存器值獲取本次網卡鏈路狀態和歷史網卡鏈路 狀態,從而判斷當前網卡的鏈路斷裂狀態,并通過設置網卡中斷寄存器鏈路狀態改變中斷 位引發網卡鏈路改變中斷,定時器時間間隔可根據鏈路狀態信息在500毫秒和20毫秒之間 進行切換。輪詢定時器函數的工作步驟為(1)、讀取當前網卡媒體獨立接口寄存器組中鏈路狀態寄存器的值,獲得本次掃描 時鏈路的狀態信息(鏈路是否連通);O)、讀取上一次掃描后保存的當前網卡的鏈路狀態,如果非連通,設置定時器下 次啟動時間間隔為500毫秒,轉(5);(3)、如果本次掃描的鏈路狀態為非連通,即鏈路狀態從連通狀態變化為非連通狀 態,設置中斷屏蔽寄存器使中斷寄存器寫使能,將中斷寄存器鏈路狀態改變位置位,引發網 卡鏈路狀態改變中斷,標記鏈路斷裂狀態,并設置定時器下次啟動時間為500毫秒,轉(5);(4)、如果本次掃描的鏈路狀態為連通,即兩次掃描鏈路狀態都連通,設置定時器 下次啟動時間為20毫秒;(5)、將本次掃描獲得的鏈路狀態進行記錄,初始化輪詢定時器函數和定時器。輪詢定時器的初始化步驟為(1)、初始化鏈路斷裂狀態為0 ;(2)、設置輪詢定時器時間間隔為20毫秒;(3)、初始化定時器函數句柄;(4)、讀取鏈路狀態寄存器,獲取當前鏈路狀態,記錄在歷史鏈路狀態變量中;(5)、啟動網卡寄存器輪詢定時器。網卡寄存器輪詢定時器嵌入千兆網卡設備驅動程序中,通過讀取網卡鏈路狀態寄 存器值獲取本次網卡鏈路狀態和歷史網卡鏈路狀態,從而判斷當前網卡的鏈路斷裂狀態, 并通過設置網卡中斷寄存器鏈路狀態改變中斷位引發網卡鏈路改變中斷,定時器時間間隔 可根據鏈路狀態信息在500毫秒和20毫秒之間進行切換。歷史網卡鏈路狀態變量,記錄上次掃描網卡寄存器時的鏈路狀態值,為1代表鏈 路狀態連通,為0代表鏈路狀態非連通,輪詢定時器函數每次執行都會更新歷史網卡鏈路 狀態變量的值。鏈路斷裂狀態變量,記錄在過去20毫秒時間內當前工作網卡的鏈路狀態是否從 連通改變非連通,為1代表發生鏈路斷裂,為0代表未發生鏈路斷裂。輪詢定時器通過網卡 寄存器掃描結果與歷史網卡鏈路狀態進行對比獲取鏈路斷裂狀態進行賦值,網卡驅動程序 可通過該變量獲取網卡鏈路斷裂狀態信息。與現有技術相比,本發明的優點在于1、本發明由于設置的定時器時間間隔為20毫秒,遠小于網卡的maxwait_timer定 時器值(300毫秒以上),使得千兆網卡設備驅動程序對網卡鏈路狀態斷裂信息的感知能力 得到顯著提高。例如對于基于intel 825 系列網絡控制芯片的千兆網卡來說,傳統千兆 網卡設備驅動檢測到鏈路斷裂狀態需要400毫秒左右的時間,而基于網卡寄存器輪詢定時 器,改進的千兆網卡設備驅動程序檢測到鏈路斷裂狀態只需不到100毫秒的時間。因此,網 卡驅動程序對鏈路斷裂的感知性能得到大大提升。
2、本發明設計不會引入網卡過多額外開銷,千兆網卡物理層接收報文的中斷時間 間隔為十微秒級,本發明設置的定時器間隔為20毫秒,對網卡接收報文的性能影響幾乎不 可見。3、本發明在千兆網卡設備驅動中引入兩個變量和一個函數,只需對原有網卡驅動 程序的設備初始化和反初始化函數進行少量修改,重新編譯即可實現,對原有設備驅動改 動不大,應用過程方便敏捷。4、本發明支持平臺的多樣性,具有通用性。本發明使用通用編程語言實現,可在 Linux、Unix、Solaris、Windows 多種平臺進行應用。5、本發明中,通過設置編譯開關可完全兼容傳統的千兆網卡驅動程序,兼容性和 移植性好。
圖1是本發明試驗環境結構圖;圖2是服務器端發包程序流程圖;圖3是客戶端收包程序流程圖;圖4是鏈路斷開時網卡及驅動的處理流程圖;圖5是千兆網絡中網卡鏈路監控狀態轉換圖;圖6是網卡寄存器輪詢定時器。
具體實施例方式以下將結合附圖和具體實施例對本發明做進一步詳細說明。千兆網卡在千兆網絡環境的切換試驗環境如圖1所示,其中服務器端配置兩塊 千兆以太網卡進行綁定互備運行,兩塊網卡通過千兆網線連接到千兆交換機上,客戶端機 器使用一塊網卡,同樣連接到千兆交換機上,通過在交換機上拔插服務器端工作網卡到交 換機的網線,模擬網絡鏈路故障。切換試驗環境還包括一個服務器端的發包程序和客戶端的收包程序,針對本發明 的實際情況,我的測試環境主要包括一個發包程序和一個收包程序,即服務器端發包程序 可以根據需要,以10毫秒的時間間隔不間斷的向客戶端發送固定格式的報文,報文內容包 括發送報文的時間戳。客戶端收包程序通過統計接收的數據包情況來生成丟包時間間隔和 丟包個數等丟包信息,并計算出網卡切換時所需要的時間。以下結合附圖分別介紹服務器 端發包程序和客戶端收包程序的具體工作流程。服務器端發包程序流程如圖2所示,在完成數據結構和網絡套接字變量的初始化 后,進行到客戶端程序的套接字鏈接建立工作,如果鏈接建立不成功,說明客戶端端口監聽 程序未啟動,退出本程序;如果能成功與客戶端程序建立鏈接,進入發送報文循環,先獲取 系統毫秒級時間戳,將時間戳封裝成報文,將報文寫入套接字緩沖區,寫入成功后,睡眠10 毫秒后再進入發送報文流程。客戶端收包程序流程如圖3所示,在完成數據結構和網絡套接字變量的初始化 后,客戶端收包程序就持續監聽網絡端口報文,當報文到達時,對報文進行解析,如果是第 一次接收報文即繼續接收下一報文,否則將報文解析得到的報文發送時間信息與上一次接收報文的時間戳進行求差計算得到兩次報文發送的時間差,若時間差大于20毫秒即輸出 報文編號和時間差值。試驗過程中,當服務器端報文發送程序和客戶端報文接收程序都啟動后,通過拔 取服務器端工作網卡鏈接到交換機的網線來模擬網卡網絡鏈路故障,服務器的綁定設備驅 動程序自動完成網卡切換過程,可以在客戶端報文接收程序的輸出結果中獲取網卡切換時 間長度。試驗環境建立后,多次測試表明,在模擬網卡網絡鏈路故障時,在千兆交換機環境 下,網卡切換時間均在350毫秒以上,而若圖1中的交換機換成百兆交換機,網卡切換時間 基本不超過一百毫秒。因此,本發明過程的一個重要環節和難點是分析和查找千兆交換環 境下網卡切換過程的瓶頸所在。網卡鏈路狀態發生改變時網卡設備及網卡設備驅動的處理流程如圖4所示,,當 工作網卡鏈路斷裂時,首先是物理網卡設備通過中斷寄存器產生中斷上傳到設備驅動程 序,設備驅動的中斷處理程序通過對私有數據的置位來記錄網卡狀態,然后由網卡的看門 狗定時器通過狀態監測確立網絡斷裂狀態,進行網卡關閉操作,綁定驅動程序檢測到工作 網卡關閉后,即啟動備份網卡進行工作。根據上述分析,網卡鏈路斷裂時涉及到三個對象,綁定驅動、網卡驅動和物理網 卡,從而可以推測出網卡切換時間過長的原因可能有以下幾種(1)綁定驅動問題在做網卡切換時,綁定驅動進行網卡切換的速度太慢;(2)網卡驅動問題網卡設備驅動對網卡物理設備中斷處理不及時;(3)物理網卡問題網卡設備中斷產生時間較晚。分別在網卡設備驅動里的網卡關閉、網卡啟動、網卡看門狗狀態監測和網卡設備 中斷處理等幾個函數里加入毫秒級時間戳獲取函數并進行輸出,通過時間先后關系和時間 差的比較分析可以發現從網卡鏈路斷裂到網卡設備向上發送鏈路狀態改變中斷的時間間 隔就已經到達350毫秒以上,也就是說切換時間過長的根本原因在于物理網卡。IEEE 802. 3標準里對千兆網路的鏈路狀態監控過程進行了詳細的說明,從圖5中 可以看出,當網卡loc_rcvr_status值為Ν0Τ_0Κ并且maxwait_timer_done值為真時,網卡 設備才認為物理層鏈路由由良好狀態進入鏈路斷開狀態。其中maxWait_timer_done為真 的條件就是maxwait_timer定時器超時,而maxwait_timer寄存器的值至少設置在350毫 秒左右。因此可以說,網卡物理層的標準規范也限制了物理網卡快速地向上層設備驅動程 序發送鏈路狀態改變中斷。本發明另一個十分重要的工作就是需要在鏈路斷裂后,在物理網卡未發送中斷之 前,確定網卡的各個寄存器中哪些寄存器的值能夠記錄鏈路對方斷裂的信息。通過設計網 卡寄存器輪詢定時器函數,在網絡鏈路斷裂試驗模擬過程比較分析網卡各種控制寄存器和 狀態寄存器的值發現當網卡鏈路狀態從良好變化為故障時,在數毫秒的時間間隔里,網卡 媒體獨立接口寄存器組里的鏈路狀態寄存器第12位值從1變化為0。這就提供了一種快速 獲取網絡鏈路狀態的方法,即將輪詢定時器時間間隔設為一個較小的值,通過讀取鏈路狀 態寄存器的值來判斷網絡鏈路狀態,如果鏈路狀態寄存器的值發生了從1到0的變化,就發 生了鏈路斷裂事件。在發生鏈路斷裂事件后,可以借助網卡的中斷處理方法,通過設置網卡中斷寄存器的鏈路狀態改變中斷位來提前觸發網卡往上層設備驅動程序發送的中斷,此后的流程與 正常情況下網卡往上層驅動程序發送鏈路狀態改變中斷一致。本發明就是借助鏈路狀態寄存器的值變化來獲取網絡鏈路斷裂信息,通過設計一 個輪詢定時器、一個歷史鏈路狀態變量和一個鏈路斷裂變量來實現對鏈路狀態斷裂信息的 快速獲取和快速響應,從而實現網卡的快速切換。網卡寄存器輪詢定時器在網卡設備驅動初始化函數中進行對歷史鏈路狀態變量 和鏈路斷裂變量的初始化和本定時器的啟動,在網卡驅動反初始化函數中關閉本定時器, 定時器函數通過讀取網卡鏈路狀態改變寄存器值獲取本次網卡鏈路狀態和歷史網卡鏈路 狀態,從而判斷當前網卡的鏈路斷裂狀態,并通過設置網卡中斷寄存器鏈路狀態改變中斷 位引發網卡鏈路改變中斷,定時器時間間隔可根據鏈路狀態信息在500毫秒和20毫秒之間 進行切換。輪詢定時器的工作流程如圖6所示,其工作流程可描述如下(1)、讀取當前網卡媒體獨立接口寄存器組中鏈路狀態寄存器的值,獲得本次掃描 時鏈路狀態信息;O)、讀取上一次掃描后保存的當前網卡的鏈路狀態,如果非連通,設置定時器下 次啟動時間間隔為500毫秒,轉(5);(3)、如果本次掃描的鏈路狀態為非連通,即鏈路狀態從連通狀態變化為非連通狀 態,設置中斷屏蔽寄存器使中斷寄存器寫使能,將中斷寄存器鏈路狀態改變位置位,引發網 卡鏈路狀態改變中斷,標記鏈路斷裂狀態,并設置定時器下次啟動時間為500毫秒,轉(5);(4)、如果本次掃描的鏈路狀態為連通,即兩次掃描鏈路狀態都連通,設置定時器 下次啟動時間為20毫秒;(5)、將本次掃描獲得的鏈路狀態進行記錄,初始化輪詢定時器函數和定時器。歷史網卡鏈路狀態變量,記錄上次掃描網卡寄存器時的鏈路狀態值,為1代表鏈 路裝連通,為0代表鏈路狀態非連通,輪詢定時器函數每次執行都會更新歷史網卡鏈路狀 態變量的值。鏈路斷裂狀態變量,記錄在過去20毫秒時間內當前工作網卡的鏈路狀態是否從 連通改變非連通,為1代表發生鏈路斷裂,為0代表未發生鏈路斷裂。輪詢定時器通過網卡 寄存器掃描結果與歷史網卡鏈路狀態進行對比獲取鏈路斷裂狀態進行賦值,網卡驅動程序 可通過該變量獲取網卡鏈路斷裂狀態信息。本發明在支持軍隊某些特殊型號項目和關鍵行業服務器應用中成功將綁定千兆 網卡的網卡切換時間從百毫秒級縮短為十毫秒級,能有效滿足關鍵應用對高可靠、強實時 性的嚴格需求。本發明已獲得驗證并取得良好的應用效果。本發明不并局限于具體的目標 操作系統平臺,對于Linux、Unix、Windows、Solaris等操作系統平臺具有通用性。
權利要求
1.一種千兆交換環境下千兆網卡的快速切換方法,其特征在于設計一個輪詢定時 器、一個歷史鏈路狀態變量和一個鏈路斷裂變量,在千兆網卡設備驅動程序中加入用于輪 詢網卡寄存器的定時器,該定時器通過輪詢網卡寄存器內容檢測網絡鏈路狀態變化情況, 在鏈路狀態從連通變化到斷開時,設置網卡中斷寄存器的鏈路狀態改變位,來提前引發鏈 路狀態改變中斷。
2.根據權利要求1所述的一種千兆交換環境下千兆網卡的快速切換方法,其特征在 于網卡寄存器輪詢定時器在網卡設備驅動初始化函數中進行對歷史鏈路狀態變量和鏈路 斷裂變量的初始化和本定時器的啟動,在網卡驅動反初始化函數中關閉本定時器,定時器 函數通過讀取網卡鏈路狀態改變寄存器值獲取本次網卡鏈路狀態和歷史網卡鏈路狀態,從 而判斷當前網卡的鏈路斷裂狀態,并通過設置網卡中斷寄存器鏈路狀態改變中斷位引發網 卡鏈路改變中斷,定時器時間間隔根據鏈路狀態信息在500毫秒和20毫秒之間進行切換。
3.根據權利要求1所述的一種千兆交換環境下千兆網卡的快速切換方法,其特征在 于輪詢定時器函數的工作步驟為(1)、讀取當前網卡媒體獨立接口寄存器組中鏈路狀態寄存器的值,獲得本次掃描時鏈 路狀態信息;O)、讀取上一次掃描后保存的當前網卡的鏈路狀態,如果非連通,設置定時器下次啟 動時間間隔為500毫秒,轉(5);(3)、如果本次掃描的鏈路狀態為非連通,即鏈路狀態從連通狀態變化為非連通狀態, 設置中斷屏蔽寄存器使中斷寄存器寫使能,將中斷寄存器鏈路狀態改變位置位,引發網卡 鏈路狀態改變中斷,標記鏈路斷裂狀態,并設置定時器下次啟動時間為500毫秒,轉(5);、如果本次掃描的鏈路狀態為連通,即兩次掃描鏈路狀態都連通,設置定時器下次 啟動時間為20毫秒;(5)、將本次掃描獲得的鏈路狀態進行記錄,初始化輪詢定時器函數和定時器。
4.根據權利要求1所述的一種千兆交換環境下千兆網卡的快速切換方法,其特征在 于輪詢定時器的初始化步驟為(1)、初始化鏈路斷裂狀態為0;(2)、設置輪詢定時器時間間隔為20毫秒;(3)、初始化定時器函數句柄;(4)、讀取鏈路狀態寄存器,獲取當前鏈路狀態,記錄在歷 史鏈路狀態變量中;(5)、啟動網卡寄存器輪詢定時器。
全文摘要
本發明涉及一種千兆交換環境下千兆網卡的快速切換方法。該方法在千兆網卡設備驅動程序中加入用于輪詢網卡寄存器的定時器,該定時器通過輪詢網卡寄存器內容檢測網絡鏈路狀態變化情況,在鏈路狀態從連通變化到斷開時,設置網卡中斷寄存器的鏈路狀態改變位,來提前引發鏈路狀態改變中斷。本發明改進的千兆網卡設備驅動程序檢測到鏈路斷裂狀態只需不到100毫秒的時間。因此,網卡驅動程序對鏈路斷裂的感知性能得到大大提升。
文檔編號H04L12/24GK102064964SQ20101058638
公開日2011年5月18日 申請日期2010年12月13日 優先權日2010年12月13日
發明者劉曉建, 吳慶波, 孔金珠, 戴華東, 易曉東, 董攀, 邵立松, 顏躍進 申請人:中國人民解放軍國防科學技術大學