摘 要: AFDX網(wǎng)絡(luò)端系統(tǒng)實(shí)現(xiàn)符合ARINC664P7協(xié)議的網(wǎng)絡(luò)數(shù)據(jù)的傳輸功能,在AFDX網(wǎng)絡(luò)端系統(tǒng)數(shù)據(jù)接收方面,總結(jié)了AFDX網(wǎng)絡(luò)數(shù)據(jù)的特點(diǎn),分析了查詢接收方式和中斷接收方式各自的不足,設(shè)計(jì)并實(shí)現(xiàn)了一種基于查詢和中斷的混合式數(shù)據(jù)接收方法。該方法在保證查詢接收方式高效的前提下,有效降低了對(duì)主機(jī)系統(tǒng)處理器資源的占用,并解決了中斷接收方式引起的丟包問題。
關(guān)鍵詞: AFDX端系統(tǒng);數(shù)據(jù)接收方法;查詢;中斷
AFDX網(wǎng)絡(luò)端系統(tǒng)實(shí)現(xiàn)符合ARINC664P7協(xié)議標(biāo)準(zhǔn)的數(shù)據(jù)傳輸接口功能,支持主機(jī)系統(tǒng)接入AFDX網(wǎng)絡(luò)。一般情況下,AFDX網(wǎng)絡(luò)端系統(tǒng)以接口卡的形式與主機(jī)系統(tǒng)連接,并支持主機(jī)系統(tǒng)發(fā)送和接收AFDX網(wǎng)絡(luò)數(shù)據(jù)。數(shù)據(jù)的接收一般在主機(jī)系統(tǒng)端通過軟件完成,主機(jī)端軟件通過查詢或者中斷的方式接收網(wǎng)絡(luò)數(shù)據(jù)。采用查詢的方式增加了主機(jī)系統(tǒng)的負(fù)載;中斷的方式降低了系統(tǒng)的負(fù)載,但是頻繁的數(shù)據(jù)接收中斷會(huì)存在中斷嵌套及覆蓋的情況,導(dǎo)致中斷的丟失現(xiàn)象,引起數(shù)據(jù)丟包的問題。針對(duì)這些問題,本文提出了一種中斷和查詢結(jié)合的數(shù)據(jù)接收方法,減輕主機(jī)系統(tǒng)負(fù)載的同時(shí),避免了由于中斷丟失而引起的數(shù)據(jù)丟包問題。
1 AFDX網(wǎng)絡(luò)端系統(tǒng)通信分析
AFDX網(wǎng)絡(luò)在以太網(wǎng)的基礎(chǔ)上發(fā)展而來,在以太網(wǎng)的基礎(chǔ)上增加了確定性及雙通道的約束,提高了數(shù)據(jù)傳輸?shù)目煽啃裕WC了數(shù)據(jù)傳輸?shù)拇_定性。在以AFDX網(wǎng)絡(luò)為核心的機(jī)載網(wǎng)絡(luò)中,網(wǎng)絡(luò)端系統(tǒng)作為網(wǎng)絡(luò)接口卡,將各個(gè)主機(jī)系統(tǒng)連接至核心網(wǎng)絡(luò),其主要作用[1]如下。
?。?)實(shí)現(xiàn)基于IEEE 802.3協(xié)議標(biāo)準(zhǔn)的物理層;
?。?)實(shí)現(xiàn)基于虛擬鏈路VL的通信調(diào)度功能;
?。?)實(shí)現(xiàn)ICMP協(xié)議、UDP/IP通信協(xié)議棧;
?。?)面向主機(jī)系統(tǒng)提供采樣、周期及SAP通信端口服務(wù)。
1.1 網(wǎng)絡(luò)端系統(tǒng)架構(gòu)
標(biāo)準(zhǔn)的AFDX網(wǎng)絡(luò)系統(tǒng)采用雙冗余的設(shè)計(jì),采用星形的結(jié)構(gòu),其基本架構(gòu)[2]如圖1所示。
圖1描述了3個(gè)主機(jī)系統(tǒng)構(gòu)成的雙余度AFDX網(wǎng)絡(luò)交換網(wǎng)絡(luò)結(jié)構(gòu),通過兩臺(tái)互為備份的交換機(jī)實(shí)現(xiàn)了雙路冗余數(shù)據(jù)的傳輸,即使端系統(tǒng)模塊單個(gè)端口或者某個(gè)交換機(jī)出現(xiàn)故障,仍可以由另外一個(gè)端口通過交換機(jī)進(jìn)行數(shù)據(jù)的傳輸,保證網(wǎng)絡(luò)數(shù)據(jù)的可靠性。在圖1中,網(wǎng)絡(luò)端系統(tǒng)安裝在主機(jī)模塊,構(gòu)成主機(jī)系統(tǒng),支持主機(jī)系統(tǒng)的AFDX網(wǎng)絡(luò)通信,端系統(tǒng)模塊與主機(jī)模塊一般采用PCI總線,利用PMC接口實(shí)現(xiàn)主機(jī)模塊與端系統(tǒng)模塊的交互,端系統(tǒng)和主機(jī)模塊架構(gòu)如圖2所示。
圖2中,端系統(tǒng)通過PCI接口與主機(jī)模塊連接,和主機(jī)模塊一起構(gòu)成一個(gè)主機(jī)系統(tǒng),通過雙通道CHA和CHB與外部AFDX網(wǎng)絡(luò)交互。采用圖2的方式,端系統(tǒng)模塊負(fù)責(zé)進(jìn)行AFDX網(wǎng)絡(luò)數(shù)據(jù)的處理,包括數(shù)據(jù)的接收、有效性檢查、UDP/IP協(xié)議棧處理、數(shù)據(jù)解包等工作,直接將有效的數(shù)據(jù)內(nèi)容傳送至主機(jī)模塊。主機(jī)模塊只需從相應(yīng)的存儲(chǔ)器進(jìn)行數(shù)據(jù)讀操作即可完成數(shù)據(jù)接收,而不用進(jìn)行大運(yùn)算量的AFDX網(wǎng)絡(luò)協(xié)議處理工作,減少了主機(jī)模塊的運(yùn)行負(fù)載。
1.2 AFDX網(wǎng)絡(luò)數(shù)據(jù)分類及其接收方式分析
AFDX網(wǎng)絡(luò)數(shù)據(jù)分為采樣數(shù)據(jù)、隊(duì)列數(shù)據(jù)及SAP數(shù)據(jù)3種。其中,采樣數(shù)據(jù)為周期性數(shù)據(jù),數(shù)據(jù)以一定的周期進(jìn)行傳輸,數(shù)據(jù)接收緩沖區(qū)采用覆蓋的方式,新數(shù)據(jù)到來將會(huì)覆蓋舊數(shù)據(jù),采樣數(shù)據(jù)適用于周期性的狀態(tài)消息,且應(yīng)用僅關(guān)心最近一次采樣數(shù)據(jù)。隊(duì)列數(shù)據(jù)為事件性數(shù)據(jù),數(shù)據(jù)的到來沒有特定的規(guī)律,以隨機(jī)的形式進(jìn)行傳輸,因此,隊(duì)列數(shù)據(jù)需要一定深度的數(shù)據(jù)緩沖區(qū),用于對(duì)接收到的數(shù)據(jù)進(jìn)行緩存,而當(dāng)緩沖區(qū)滿后,新來的數(shù)據(jù)被丟棄,隊(duì)列數(shù)據(jù)適用于事件性的消息傳輸。AFDX網(wǎng)絡(luò)SAP數(shù)據(jù)主要用于高層協(xié)議,支持目的IP及端口號(hào)的設(shè)定等功能,一般不用于普通的AFDX網(wǎng)絡(luò)數(shù)據(jù)通信。
數(shù)據(jù)的接收一般分為查詢方式和中斷方式兩種。查詢方式具備實(shí)現(xiàn)簡(jiǎn)單、數(shù)據(jù)吞吐量較快的優(yōu)勢(shì),但查詢方式在無數(shù)據(jù)傳輸時(shí)仍在進(jìn)行查詢操作,因此,查詢方式增加了處理器的負(fù)擔(dān),對(duì)于任務(wù)較重的主機(jī)系統(tǒng),不適合用查詢方式進(jìn)行數(shù)據(jù)接收。采用中斷的方式,數(shù)據(jù)接收可大大減輕處理器的負(fù)擔(dān),僅當(dāng)有數(shù)據(jù)時(shí),處理器才參與數(shù)據(jù)接收,但當(dāng)數(shù)據(jù)量較大時(shí),會(huì)引起頻繁的中斷。由于中斷嵌套及覆蓋等原因,會(huì)存在中斷丟失或響應(yīng)不及時(shí)的情況,導(dǎo)致數(shù)據(jù)的丟失或順序錯(cuò)亂。
對(duì)于AFDX網(wǎng)絡(luò)基本通信,包括采樣數(shù)據(jù)通信和隊(duì)列數(shù)據(jù)通信兩種。采樣數(shù)據(jù)本身具有周期性的特點(diǎn),因此,在主機(jī)模塊接收可以采用查詢的方式,主機(jī)模塊以定時(shí)器的方式按照采樣數(shù)據(jù)的周期每隔一定的時(shí)間進(jìn)行數(shù)據(jù)接收即可,不會(huì)造成主機(jī)模塊的無效查詢和處理器資源的浪費(fèi)。而對(duì)于隊(duì)列數(shù)據(jù),其具有不可預(yù)知的特點(diǎn),因此,對(duì)于數(shù)據(jù)量較大的數(shù)據(jù)傳輸,采用查詢方式進(jìn)行接收能夠提高數(shù)據(jù)接收的效率,而對(duì)于數(shù)據(jù)量較小的數(shù)據(jù)傳輸,采用中斷的方式可以節(jié)省處理器資源,降低主機(jī)系統(tǒng)的負(fù)載。而在實(shí)際應(yīng)用中,由于其數(shù)據(jù)傳輸?shù)牟豢深A(yù)知性,對(duì)于隊(duì)列數(shù)據(jù),單獨(dú)采用查詢方式或者中斷方式無法滿足既降低主機(jī)負(fù)載又提高接收效率的數(shù)據(jù)接收要求。
2 端系統(tǒng)接收方法設(shè)計(jì)
針對(duì)AFDX網(wǎng)絡(luò)端系統(tǒng)隊(duì)列數(shù)據(jù)的特點(diǎn),為了滿足既降低主機(jī)負(fù)載又提高接收效率的要求,本文提出一種將中斷和查詢結(jié)合起來的方式,在無數(shù)據(jù)傳輸時(shí),不消耗主機(jī)處理器資源,在數(shù)據(jù)傳輸量較大時(shí),以查詢的方式進(jìn)行接收從而提高數(shù)據(jù)接收效率。
本文端系統(tǒng)接收方法核心思想是:通過中斷通知主機(jī)接收數(shù)據(jù),而在數(shù)據(jù)接收時(shí)通過查詢方式進(jìn)行。端系統(tǒng)接收方法設(shè)計(jì)如圖3所示。
圖3(a)為端系統(tǒng)模塊的數(shù)據(jù)接收流程,圖3(b)為主機(jī)模塊數(shù)據(jù)接收流程。在端系統(tǒng)模塊,當(dāng)從網(wǎng)絡(luò)上接收到數(shù)據(jù)時(shí),首先進(jìn)行數(shù)據(jù)的正確性校驗(yàn),當(dāng)數(shù)據(jù)校驗(yàn)無誤時(shí),將數(shù)據(jù)中的UDP/IP協(xié)議頭及校驗(yàn)等信息去除,進(jìn)行解包處理,獲取到有效數(shù)據(jù),并通過DMA的方式將有效數(shù)據(jù)傳送至主機(jī)模塊內(nèi)存中,檢測(cè)數(shù)據(jù)的類型,當(dāng)為隊(duì)列數(shù)據(jù)時(shí),觸發(fā)主機(jī)PCI中斷信號(hào),通知主機(jī)進(jìn)行數(shù)據(jù)接收。在主機(jī)模塊,當(dāng)有中斷信號(hào)發(fā)生時(shí),獲取數(shù)據(jù)端口號(hào),進(jìn)行數(shù)據(jù)接收,當(dāng)完成一次數(shù)據(jù)接收后,繼續(xù)查看數(shù)據(jù)接收隊(duì)列是否為空,如果不為空,繼續(xù)接收數(shù)據(jù),直至數(shù)據(jù)接收隊(duì)列為空。
圖3中在主機(jī)模塊進(jìn)行數(shù)據(jù)接收時(shí),需要查詢接收隊(duì)列,接收隊(duì)列存放了端系統(tǒng)模塊接收到的消息的端口號(hào)信息,接收隊(duì)列存放在端系統(tǒng)模塊上,通過PCI地址映射,在主機(jī)模塊上可以訪問。
消息接收隊(duì)列緩沖區(qū)如圖4所示。在端系統(tǒng)模塊上,消息接收隊(duì)列緩沖區(qū)以循環(huán)雙口RAM形式進(jìn)行維護(hù),提供讀指針PR給主機(jī)模塊,提供寫指針PW給端系統(tǒng)模塊。當(dāng)端系統(tǒng)接收到數(shù)據(jù)時(shí),通過PW指針將接收到數(shù)據(jù)的端口號(hào)信息寫至消息接收隊(duì)列,然后PW指針加1;當(dāng)PW指針超過緩沖區(qū)長(zhǎng)度時(shí),PW指針重新指向緩沖區(qū)對(duì)頭第一個(gè)緩沖區(qū)。當(dāng)主機(jī)模塊接收到中斷信號(hào)后,通過PR指針依次從消息隊(duì)列中取出端口號(hào)信息,并進(jìn)行數(shù)據(jù)接收,直至消息隊(duì)列中無數(shù)據(jù)。即PR和PW相等時(shí),PR指針每取出一個(gè)端口號(hào)進(jìn)行加1操作,當(dāng)超過緩沖區(qū)長(zhǎng)度時(shí),PR指針重新指向緩沖區(qū)對(duì)頭的第一個(gè)緩沖區(qū)。
采用圖3的數(shù)據(jù)接收流程和圖4所示端系統(tǒng)消息接收隊(duì)列,將中斷方式和查詢方式結(jié)合起來。一方面,一次中斷就可以將接收隊(duì)列中的數(shù)據(jù)全部接收,即中斷后采用查詢方式將接收隊(duì)列中的數(shù)據(jù)全部接收,提高接收效率;另一方面,當(dāng)無數(shù)據(jù)時(shí),主機(jī)模塊不進(jìn)行接收的任何操作,不用增加主機(jī)負(fù)載。同時(shí),當(dāng)出現(xiàn)丟中斷的情況時(shí),不會(huì)出現(xiàn)數(shù)據(jù)丟失的問題,數(shù)據(jù)會(huì)在上一次中斷或下一次中斷時(shí)通過查詢的方式被接收。
3 端系統(tǒng)接收方法實(shí)現(xiàn)
端系統(tǒng)模塊實(shí)現(xiàn)了AFDX網(wǎng)絡(luò)功能,向主機(jī)模塊提供了數(shù)據(jù)接收的API接口。在端系統(tǒng)接收方法的實(shí)現(xiàn)上,一方面需要在主機(jī)模塊上維護(hù)消息接收的中斷處理函數(shù);另一方面,需要設(shè)計(jì)阻塞式接收的API接口,提供給主機(jī)應(yīng)用使用。
軟件設(shè)計(jì)上利用信號(hào)量機(jī)制[3]來實(shí)現(xiàn)端系統(tǒng)的數(shù)據(jù)接收功能。在主機(jī)模塊初始化時(shí),建立信號(hào)量,當(dāng)有數(shù)據(jù)接收中斷發(fā)生時(shí),在中斷函數(shù)中,首先通過semGive函數(shù)釋放信號(hào)量,然后進(jìn)行清中斷操作。主機(jī)模塊數(shù)據(jù)接收API函數(shù)設(shè)計(jì)如圖5所示。
如圖5所示,數(shù)據(jù)接收API函數(shù)在運(yùn)行時(shí),首先判斷接收標(biāo)識(shí)是否為0,如果接收標(biāo)志為0,表明無中斷通知主機(jī)有數(shù)據(jù),通過semTake函數(shù)進(jìn)入阻塞狀態(tài);如果接收標(biāo)志不為0,表明已經(jīng)有中斷通知主機(jī)有數(shù)據(jù),且接收隊(duì)列不為空,則直接從接收隊(duì)列中獲取接收端口號(hào),進(jìn)行數(shù)據(jù)接收。當(dāng)在中斷處理函數(shù)中通過semGive釋放信號(hào)量后,主機(jī)模塊接收API獲取到信號(hào)量,首先將接收標(biāo)志置1,然后遍歷接收隊(duì)列,將接收隊(duì)列中端口號(hào)信息的數(shù)據(jù)接收完成之后,將接收標(biāo)志置0,完成一次中斷接收過程。
主模塊數(shù)據(jù)接收API函數(shù)采用阻塞接收的方式,當(dāng)沒有信號(hào)量且接收標(biāo)志為0時(shí),API函數(shù)處于阻塞狀態(tài),不占用主機(jī)模塊的處理器資源,而僅當(dāng)有接收中斷發(fā)生時(shí),才占用處理器資源進(jìn)行數(shù)據(jù)接收。
本文總結(jié)了AFDX網(wǎng)絡(luò)端系統(tǒng)數(shù)據(jù)接收方式及利用中斷和查詢方式進(jìn)行數(shù)據(jù)接收的不足,設(shè)計(jì)了一種將中斷和查詢兩種方式混合在一起的數(shù)據(jù)接收方式,并對(duì)其進(jìn)行了軟件實(shí)現(xiàn)。通過這種方式,很好地解決了AFDX網(wǎng)絡(luò)數(shù)據(jù)查詢接收方式主機(jī)負(fù)載重的問題,也解決了AFDX網(wǎng)絡(luò)中斷接收方式丟包的問題,在保證數(shù)據(jù)高效接收的同時(shí),降低了處理處理器資源的占用,在AFDX網(wǎng)絡(luò)端系統(tǒng)工程實(shí)踐中得到了很好的應(yīng)用。
參考文獻(xiàn)
[1] 664P7-1, Aircraft data network part7: avionics full duplex switched ethernet network[S].
[2] 趙永庫(kù),李貞,唐來勝.AFDX網(wǎng)絡(luò)協(xié)議研究[J].計(jì)算機(jī)測(cè)量與控制,2011,19(12):3137-3142.
[3] 張楊,于銀濤.VxWorks內(nèi)核、設(shè)備驅(qū)動(dòng)與BSP開發(fā)詳解[M].北京:人民郵電出版社,2009.