趙昶宇
(天津津航計算技術(shù)研究所,天津 300308)
以太網(wǎng)技術(shù)作為一種成熟且抗干擾能力強的技術(shù),具有構(gòu)建成本低、物理及數(shù)據(jù)協(xié)議完善、傳輸速率較高等優(yōu)良特性,在VxWorks 嵌入式系統(tǒng)中得到廣泛應用。由于VxWorks 嵌入式系統(tǒng)對以太網(wǎng)具有高實時性和高可靠性的要求,傳統(tǒng)的單一網(wǎng)卡一旦出現(xiàn)故障或受損時,很可能導致整個網(wǎng)絡系統(tǒng)癱瘓,嚴重降低了以太網(wǎng)傳輸?shù)目煽啃院蛯崟r性。因此,目前通常采用一種網(wǎng)卡故障保護機制,即對當前工作網(wǎng)卡進行冗余熱備份,當工作網(wǎng)卡出現(xiàn)故障時,由冗余網(wǎng)卡接替完成網(wǎng)絡通訊任務。
DDS 數(shù)據(jù)分發(fā)服務作為網(wǎng)絡數(shù)據(jù)通訊的核心技術(shù),它能夠保證分布式系統(tǒng)可靠實時地交換分配群體數(shù)據(jù),其傳輸能力比通常的戰(zhàn)術(shù)數(shù)據(jù)鏈高幾個數(shù)量級。DDS 必須確保在極少的時間和不限制網(wǎng)絡中的報告數(shù)據(jù)容量的條件下,高度可靠地傳輸數(shù)據(jù)。為了保證DDS中間件更加可靠穩(wěn)定運行在VxWorks 操作系統(tǒng)中,防止因單獨網(wǎng)卡故障導致DDS中間件不能正常工作的情況發(fā)生,通常DDS 中間件在雙冗余網(wǎng)卡上工作。由于DDS 中間件具有強實時性和QoS 策略的特點,VxWorks 操作系統(tǒng)中大多數(shù)雙冗余網(wǎng)卡的切換方法會導致網(wǎng)卡不能正常切換,或者切換后DDS 中間件不能正常通信。因此,傳統(tǒng)的雙冗余網(wǎng)卡切換的方法不能直接應用在DDS 中間件上。
為了解決VxWorks 系統(tǒng)中基于DDS 中間件的雙冗余網(wǎng)卡切換實時性和可靠性問題,本文提出在DDS中間件上實現(xiàn)雙冗余網(wǎng)卡切換的方法。這些方法能夠保證雙冗余網(wǎng)卡切換時DDS中間件仍然能正常進行網(wǎng)絡通信,同時縮短網(wǎng)卡切換時間,提高網(wǎng)絡數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
DDS 是以數(shù)據(jù)為中心,定義描述網(wǎng)絡環(huán)境下數(shù)據(jù)內(nèi)容/交互行為和服務質(zhì)量要求的標準技術(shù)。它提供了一個獨立于平臺的框架模型,為分布式實時系統(tǒng)發(fā)布、傳遞和接收數(shù)據(jù)的接口和行為定義了統(tǒng)一標準。應用程序可以基于該中間件框架實時發(fā)布信息,并根據(jù)需要訂閱信息[1]。
DDS 規(guī)范包含以下2 個層次的接口:①以數(shù)據(jù)為中心的DCPS(Data-CentricPublish-Subscribe,發(fā)布-訂閱層)。該層位于低層,是DDS 的核心和基礎,提供了DDS 通信的基本服務,用于完成數(shù)據(jù)的訂閱和發(fā)布。②DLRL(Data Local Reconstruction Layer,數(shù)據(jù)本地重構(gòu)層)。該層位于高層,是可選的,它建立在DCPS 的基礎上,將DCPS 層提供的服務進行了抽象,當有數(shù)據(jù)更新后自動重組數(shù)據(jù),并通知所有訂閱者更新本地數(shù)據(jù)。
DDS 架構(gòu)示意圖如圖1 所示。
圖1 DDS 架構(gòu)示意圖
DDS 是一個以數(shù)據(jù)為中心的中間件協(xié)議和API(Application Programming Interface,應用程序編程接口)標準,用戶只關(guān)心自己想要的數(shù)據(jù),數(shù)據(jù)通過主題(Topic)進行標識。這樣發(fā)布者(Publisher)根據(jù)主題發(fā)布數(shù)據(jù),訂閱者(Subscriber)根據(jù)自己感興趣的主題訂閱數(shù)據(jù)。通過上述方式建立了以數(shù)據(jù)為中心的發(fā)布-訂閱模型DCPS。DDS 的通信模型如圖2 所示。
圖2 DDS 通信模型
在DDS 通信模型中,主題(Topic)是數(shù)據(jù)的抽象概念,關(guān)聯(lián)相應數(shù)據(jù)的數(shù)據(jù)類型。把所有的Topic 集合在一起,建立了一個虛擬的全局數(shù)據(jù)空間“Global Data Space”。數(shù)據(jù)寫入者(Data Writer)相當于緩存,將需要發(fā)布的主題從應用層寫入數(shù)據(jù)寫入者(Data Writer)中。數(shù)據(jù)讀取者(Data Reader)也相當于是一種緩存,從訂閱者獲取主題內(nèi)容,并發(fā)送給應用層。發(fā)布者(Publisher)通過調(diào)用Data Writer 的相關(guān)函數(shù)發(fā)布主題數(shù)據(jù),訂閱者(Subscriber)只需負責訂閱主題數(shù)據(jù)。
應用程序使用QoS 策略控制、管理和優(yōu)化在網(wǎng)絡中傳輸?shù)臄?shù)據(jù)流,目前共支持22 種QoS 策略。每種策略都可以應用在不同的角色上,而針對同一角色,可單獨使用一種QoS,也可以組合使用多種QoS 策略。
QoS 是一種網(wǎng)絡傳輸策略,應用程序指定所需要的網(wǎng)絡傳輸質(zhì)量行為,QoS 服務實現(xiàn)這種行為要求,盡可能地滿足客戶對通信質(zhì)量的要求。DDS 定義QoS策略使它對復雜網(wǎng)絡環(huán)境的適應性和魯棒性大大增強,優(yōu)化網(wǎng)絡傳輸質(zhì)量,QoS 可以理解為數(shù)據(jù)提供者和接收者之間的合約。
DDS 中幾種常用并且重要的QoS 參數(shù)有可靠性、數(shù)據(jù)的持久度、數(shù)據(jù)的歷史記錄、周期數(shù)據(jù)的超時、基于時間的過濾、數(shù)據(jù)的有效期、數(shù)據(jù)的所有權(quán)、分區(qū)、資源限制等特點。
為了確保VxWorks 系統(tǒng)下網(wǎng)絡傳輸?shù)慕研院涂煽啃裕ǔT谝粔K電路板上集成2 塊完全相同的網(wǎng)卡芯片。對于上層應用,這2 個網(wǎng)卡應該對它呈現(xiàn)“單網(wǎng)卡”特征。為了滿足這一特征,2 個網(wǎng)卡必須具有完全相同的IP(Internet Protocol,互聯(lián)網(wǎng)協(xié)議)地址和MAC(Media Access Control,媒體訪問控制)地址。若2 個網(wǎng)卡的物理地址不一致,在進行網(wǎng)卡切換時,將會引起協(xié)議棧中ARP(Address Resolution Protocol,地址解析協(xié)議)綁定表的變化,重新對應ARP 綁定表中IP 地址與網(wǎng)卡物理地址的關(guān)系,必然造成2 個網(wǎng)卡之間的切換時間變長[2]。而每個網(wǎng)卡芯片出廠前配置的48 位MAC 地址是全球唯一的,因此,需要通過軟件處理的方式使這2 個網(wǎng)卡的MAC 地址相同。
在VxWorks 系統(tǒng)中可以通過如下方式獲取網(wǎng)卡的MAC 地址: muxIoctl(muxDevAcquire("fei" , 0),EIOCGADDR,(caddr_t)kkphyaddr);其中“fei”是網(wǎng)卡接口類型,在數(shù)組kkphyaddr 中保存該網(wǎng)卡的MAC地址值,即網(wǎng)卡的 MAC 地址為kkphyaddr[0]:kkphyaddr[1] : kkphyaddr[2] : kkphyaddr[3] :kkphyaddr[4]:kkphyaddr[5],kkphyaddr 數(shù)組中每個元素的值代表8 位MAC 地址。
獲取到其中一個網(wǎng)卡MAC 地址后,只需要將2個網(wǎng)卡設置成完全相同的MAC 地址即可,代碼如下:
sprintf(buf,"fei0 lladdr %s%s",hostmac);/*hostmac 存放MAC 地址的字符串*/
ifconfig(buf);/* 設置fei0 網(wǎng)卡的MAC 地址*/
sprintf(buf,"fei1 lladdr%s%s",hostmac);
ifconfig(buf);/* 設置fei1 網(wǎng)卡的MAC 地址*/
VxWorks 系統(tǒng)中雙冗余網(wǎng)卡的切換時間包括網(wǎng)卡故障檢測時間和網(wǎng)卡進行切換動作的時間。為了盡可能減少雙冗余網(wǎng)卡故障時的切換時間,應及時檢測網(wǎng)卡的故障。通常來講,從網(wǎng)卡驅(qū)動層來檢測并判斷網(wǎng)卡芯片的狀態(tài)寄存器的值是否能最大壓縮網(wǎng)卡故障檢測的時間[3]。在VxWorks 系統(tǒng)啟動后,加載網(wǎng)卡驅(qū)動,初始化網(wǎng)卡芯片,并配置好網(wǎng)卡的控制結(jié)構(gòu)后,啟動一個監(jiān)控任務。該監(jiān)控任務負責不間斷查詢當前網(wǎng)卡狀態(tài)寄存器的值,并反饋查詢結(jié)果。
VxWorks 系統(tǒng)上電后進入網(wǎng)卡驅(qū)動的任務監(jiān)測程序后,首次判斷到網(wǎng)卡狀態(tài)寄存器的鏈路狀態(tài)位被置位時,表明網(wǎng)卡的鏈路狀態(tài)發(fā)生變化。此時,若監(jiān)測到網(wǎng)卡A 的鏈路狀態(tài)正常,則用ipAttach()函數(shù)掛載A網(wǎng)卡,用ifconfig()函數(shù)啟動A 網(wǎng)卡,然后用ipAttach()函數(shù)掛載B 網(wǎng)卡,用ifconfig()函數(shù)關(guān)閉B 網(wǎng)卡;若監(jiān)測到網(wǎng)卡B 的鏈路狀態(tài)正常,則用ipAttach()函數(shù)掛載B 網(wǎng)卡,用ifconfig()函數(shù)啟動B 網(wǎng)卡,然后用ipAttach()函數(shù)掛載A 網(wǎng)卡,用ifconfig()函數(shù)關(guān)閉A 網(wǎng)卡。該步驟的目的是在系統(tǒng)上電時,初始化2 個網(wǎng)卡的工作狀態(tài)。
網(wǎng)卡的初始化工作完成后,當前工作網(wǎng)卡為A 網(wǎng)卡,判斷到網(wǎng)卡狀態(tài)寄存器的鏈路狀態(tài)位被置位時,監(jiān)測到網(wǎng)卡A 的鏈路狀態(tài)正常,則不用切換網(wǎng)卡;若監(jiān)測到網(wǎng)卡A 的鏈路狀態(tài)不正常,需判斷網(wǎng)卡B 的鏈路狀態(tài),若網(wǎng)卡B 的鏈路狀態(tài)正常,則系統(tǒng)切換到網(wǎng)卡B 進行工作;當前工作網(wǎng)卡為B 網(wǎng)卡,若判斷到網(wǎng)卡狀態(tài)寄存器的鏈路狀態(tài)位被置位時,監(jiān)測到網(wǎng)卡B的鏈路狀態(tài)正常,則不用切換網(wǎng)卡;若監(jiān)測到網(wǎng)卡B的鏈路狀態(tài)不正常,需判斷網(wǎng)卡A 的鏈路狀態(tài),若網(wǎng)卡A 的鏈路狀態(tài)正常,則系統(tǒng)切換到網(wǎng)卡A 進行工作。若A、B 這2 個網(wǎng)卡的鏈路狀態(tài)均不正常,則向上層用戶程序匯報。
當網(wǎng)卡切換時,若當前故障網(wǎng)卡為A 網(wǎng)卡,備用網(wǎng)卡為B 網(wǎng)卡,且備用網(wǎng)卡的鏈路狀態(tài)正常,則先用ifconfig()函數(shù)關(guān)閉A 網(wǎng)卡,然后用ipAttach()函數(shù)掛載B 網(wǎng)卡,用ifconfig()函數(shù)啟動B 網(wǎng)卡;若當前故障網(wǎng)卡為B 網(wǎng)卡,備用網(wǎng)卡為A 網(wǎng)卡,且備用網(wǎng)卡的鏈路狀態(tài)正常,則先用ifconfig()函數(shù)關(guān)閉B 網(wǎng)卡,然后用ipAttach()函數(shù)掛載A 網(wǎng)卡,用ifconfig()函數(shù)啟動A網(wǎng)卡。
需要特別值得注意的是,在DDS 中間件中進行雙冗余網(wǎng)卡切換時,一定不能調(diào)用ipDetach()函數(shù)卸載故障網(wǎng)卡,而只能用ifconfig 命令將故障網(wǎng)卡的連接狀態(tài)由“up”狀態(tài)設置為“down”狀態(tài),即只是關(guān)閉該故障網(wǎng)卡,否則,切換后DDS 的網(wǎng)絡通訊就會中斷。這是由于DDS中間件的強實時性和QoS服務質(zhì)量策略導致的,這也是與傳統(tǒng)雙冗余網(wǎng)卡切換方法的不同之處。
針對VxWorks 操作系統(tǒng)中大多數(shù)雙冗余網(wǎng)卡的切換方法會導致網(wǎng)卡不能正常切換,或者切換后DDS 中間件不能正常通信的問題,本文提出了一種在DDS 中間件上實現(xiàn)雙冗余網(wǎng)卡切換的方法。利用該方法修改網(wǎng)卡驅(qū)動程序,在驅(qū)動程序的任務監(jiān)測程序中監(jiān)測網(wǎng)卡寄存器的鏈路狀態(tài)。將2 個網(wǎng)卡設置為相同的MAC地址,當監(jiān)測到當前網(wǎng)卡鏈路發(fā)生故障時,關(guān)閉當前網(wǎng)卡,掛載備用網(wǎng)卡,然后啟動備用網(wǎng)卡開始工作;當網(wǎng)卡發(fā)生故障時,不卸載故障網(wǎng)卡,而只是關(guān)閉故障網(wǎng)卡。這種做法不僅縮短了網(wǎng)卡切換的時間,更重要的是,由于DDS 中間件強實時性和QoS 服務質(zhì)量策略的特點,一旦DDS 中間件監(jiān)測到當前網(wǎng)卡被卸載,它無法找到當前的網(wǎng)絡設備,導致通信被迫中斷。因此,該方法極大提高了DDS 中間件網(wǎng)絡通信的可靠性和穩(wěn)定性。