崔 超,張明權(quán),于 洪,肖 峰(.天津市濱海新區(qū)信息技術(shù)創(chuàng)新中心,天津 300450;.解放軍戰(zhàn)略支援部隊信息工程大學(xué),河南 鄭州 45000)
隨著信息技術(shù)的快速發(fā)展,基于RapidIO 協(xié)議的交換芯片越來越多地應(yīng)用到航空、航天、國防和電信等各個領(lǐng)域。基于這些領(lǐng)域?qū)νㄐ畔到y(tǒng)的安全性、可靠性和穩(wěn)定性的高要求,在交換芯片發(fā)生異常時,能否準(zhǔn)確、及時地被主控系統(tǒng)檢測到是至關(guān)重要的。交換芯片因異常引發(fā)的事件有很多種,而且有時會在短時間內(nèi)發(fā)生大量事件,主控系統(tǒng)需要準(zhǔn)確監(jiān)測到每種異常事件,不能有漏報、錯報現(xiàn)象,這樣才能依據(jù)事件的種類來采取相應(yīng)的處理措施。因此,需要一種穩(wěn)定可靠的事件監(jiān)聽系統(tǒng)對基于RapidIO 協(xié)議的交換芯片的異常事件進(jìn)行監(jiān)聽。
RapidIO 規(guī)范是一種開放式標(biāo)準(zhǔn),由RapidIO 貿(mào)易協(xié)會支持開發(fā),并指導(dǎo)RapidIO 架構(gòu)的未來發(fā)展方向。國際標(biāo)準(zhǔn)化組織(ISO)和國際電工協(xié)會(IEC)已批準(zhǔn)RapidIO 互連規(guī)范為ISO/IEC DIS 18372 標(biāo)準(zhǔn),成為第一個嵌入式互連國際標(biāo)準(zhǔn)[1]。RapidIO 技術(shù)一般使用面向串行背板、DSP 和相關(guān)串行控制平面應(yīng)用的串行接口進(jìn)行互連[2],是一種高性能、低引腳數(shù)、基于報文可靠交換的互連體系結(jié)構(gòu),具有高帶寬、低時延、高效率、高可靠性等優(yōu)點。本文提出的事件監(jiān)聽系統(tǒng)主要針對串行RapidIO交換網(wǎng)絡(luò)。
與以太網(wǎng)一樣,RapidIO 也是基于包交換的互聯(lián)技術(shù)。RapidIO 相比于其他總線的接口具有明顯的優(yōu)勢,它支持豐富的維護(hù)和錯誤管理功能,支持最初的系統(tǒng)發(fā)現(xiàn)、配置、錯誤管理和錯誤恢復(fù)機(jī)制。維護(hù)操作是通過訪問器件的維護(hù)寄存器(如錯誤檢測和狀態(tài)寄存器)來讀取相關(guān)的器件信息,或者通過寫寄存器使RapidIO 器件關(guān)閉或恢復(fù)。在錯誤管理方面,RapidIO 協(xié)議本身具有強(qiáng)大的容錯能力,它提供了許多錯誤檢測機(jī)制來保護(hù)數(shù)據(jù)包,進(jìn)行錯誤恢復(fù)。
RapidIO 錯誤管理可以分為錯誤檢測和錯誤恢復(fù)。有2 種向系統(tǒng)軟件通報錯誤的方法:一種是交換芯片向主控系統(tǒng)發(fā)出一個中斷,另一種是交換芯片檢測到錯誤之后向主控系統(tǒng)發(fā)出維護(hù)端口寫(maint port-write)報文[3]。本系統(tǒng)采用的是第2 種方法。當(dāng)邏輯層、傳輸層或物理層有錯誤,且被交換芯片檢測出來時,交換芯片將主要錯誤信息組成port-write 報文(在RapidIO 協(xié)議中port-write 是一種用于錯誤信息上報的事件報文的格式)發(fā)送到主控系統(tǒng)。
在交換芯片的設(shè)計中,port-write 操作是錯誤管理模塊(Error_management)將記錄下來的錯誤上報給維護(hù)包處理模塊(Maint_transaction)的一種方式。其主要目的是通過維護(hù)包處理模塊,將錯誤信息封裝成port-write 維護(hù)包報文,告知遠(yuǎn)端的主控系統(tǒng)錯誤發(fā)生的類型和位置。它不保證遞送,也沒有相關(guān)的響應(yīng)。軟件通過清除port-write 待處理狀態(tài)位表明它已經(jīng)發(fā)現(xiàn)了該操作。
RapidlO 中有些錯誤不需要軟件干預(yù),由硬件完成錯誤恢復(fù),這些錯誤是與協(xié)議相關(guān)的物理層的錯誤。還有一些錯誤需要錯誤管理軟件才能成功恢復(fù),包括邏輯層的錯誤和執(zhí)行錯誤。現(xiàn)將多種錯誤歸納,可以分為可自動恢復(fù)的錯誤和非自動恢復(fù)的錯誤。
非致命傳輸錯誤(如被破壞的包或控制符,產(chǎn)生協(xié)議錯誤)都存在于物理層,是可自動恢復(fù)的錯誤。錯誤將在端口錯誤控制狀態(tài)寄存器中適當(dāng)?shù)奈挥蛑梦???苫謴?fù)錯誤不產(chǎn)生中斷或請求操作,只存在于物理層中。
檢測到錯誤時端口會進(jìn)入錯誤停止?fàn)顟B(tài)。進(jìn)入停止?fàn)顟B(tài)后端口會開始一個恢復(fù)過程以嘗試從錯誤情況中恢復(fù)。除可能使用錯誤計數(shù)器來檢測錯誤率外,系統(tǒng)一般不會檢測到鏈路中的錯誤,也不能從錯誤中自動恢復(fù)。
非自動恢復(fù)的錯誤可產(chǎn)生中斷,會通知主控系統(tǒng),由錯誤管理軟件恢復(fù)。對RapidIO 中非自動恢復(fù)的錯誤,目前還沒有比較成熟的解決方案,本文提出了以下3種設(shè)計思路。
a)當(dāng)網(wǎng)絡(luò)中的交換芯片發(fā)生錯誤或異常時,只向網(wǎng)絡(luò)主控設(shè)備發(fā)送中斷信號,再由網(wǎng)絡(luò)主控設(shè)備主動查詢交換芯片內(nèi)部的錯誤狀態(tài)寄存器,進(jìn)而確定發(fā)生了哪種錯誤。
b)當(dāng)網(wǎng)絡(luò)中的交換芯片發(fā)生錯誤或異常時,會向網(wǎng)絡(luò)主控設(shè)備發(fā)送port-write 類型的異常事件報文,該異常事件報文被存儲到預(yù)先分配好的存儲空間。網(wǎng)絡(luò)主控設(shè)備定時輪詢上述存儲空間,若發(fā)現(xiàn)有異常事件報文,則提取并解析該異常事件報文。
c)采用signal 通信機(jī)制結(jié)合中斷處理機(jī)制的方式,對b)進(jìn)行了改進(jìn)。當(dāng)port-write報文到達(dá)預(yù)先分配的臨時接收空間后,立即被拷貝到用于存儲和解析的存儲空間。
設(shè)計思路a)和b)具有如下缺點。
a)定時輪詢會占用較多的網(wǎng)絡(luò)主控設(shè)備CPU 的資源,影響其他進(jìn)程對CPU資源的使用。
b)定時輪詢檢測異常事件的實時性較差,檢測到異常事件的時間與異常事件實際發(fā)生的時間會存在時間差。
c)在短時間內(nèi)發(fā)生大量事件的情況下,由于主控處理器的處理能力限制,網(wǎng)絡(luò)主控設(shè)備不能監(jiān)測出所有事件,會丟失部分事件。
設(shè)計思想c)可以實時監(jiān)聽到交換芯片上報的事件報文,通過signal 通信機(jī)制,在短時間內(nèi)發(fā)生大量事件的情況下能監(jiān)測到所有事件;并可對事件進(jìn)行存儲、解析和顯示,提高了事件監(jiān)聽系統(tǒng)的實時性和自動化程度。
下面主要介紹該事件監(jiān)聽系統(tǒng)的詳細(xì)實現(xiàn)流程,并搭建試驗應(yīng)用場景對該系統(tǒng)進(jìn)行驗證分析。
基于RapidIO 交換芯片的事件監(jiān)聽系統(tǒng)運行于網(wǎng)絡(luò)主控設(shè)備,監(jiān)聽來自交換芯片的事件,監(jiān)聽到異常事件時由網(wǎng)絡(luò)主控設(shè)備做出響應(yīng)。本系統(tǒng)主要包含如下模塊:系統(tǒng)初始化模塊、signal初始化模塊、中斷處理模塊、單次事件存儲模塊、事件接收模塊和事件處理模塊。其主要組成如圖1所示。
圖1 事件監(jiān)聽系統(tǒng)模塊組成
系統(tǒng)初始化模塊用于開啟事件監(jiān)控系統(tǒng)時的初始化,主要包括以下5個初始化單元。
事件接收模塊初始化單元:申請接收port-write 報文的臨時存儲隊列,默認(rèn)為總空間大小為64 KB、起始地址64 B對齊的數(shù)組;使能主控芯片的port-write報文的接收功能;清除主控設(shè)備中port-write 接收相關(guān)的標(biāo)志位,并且開啟snoop功能。
中斷處理模塊初始化單元:注冊RapidIO 中斷服務(wù)程序;使能RapidIO中斷向量。
事件處理模塊初始化單元:申請事件處理存儲空間,默認(rèn)為struct errorInfo 類型的數(shù)組,可存儲64K 個事件報文。
交換芯片模塊初始化單元:使能交換芯片的CFG、LT、IIC、JTAG、PORT 等類型事件上報功能,并且選擇上報方式為向主控處理器發(fā)送port-write 報文;設(shè)置port-write 報文的默認(rèn)目的ID 和源ID。設(shè)置交換芯片的默認(rèn)路由,使生成的port-write 報文可以自動路由到主控處理器。
signal 模塊初始化單元:選擇signal 類型,注冊signal處理函數(shù)。
中斷處理模塊:發(fā)送signal 至事件處理模塊,啟動事件處理;清除中斷標(biāo)志位,清除接收隊列標(biāo)志位;更新port-write 報文計數(shù)器;更新事件接收模塊的存儲隊列指針,用于接收新的port-write報文。
事件接收模塊:主要用于存儲來自交換芯片的事件報文到預(yù)先申請的臨時存儲隊列。
事件處理模塊:接收到中斷處理模塊發(fā)送的signal,開始處理事件;從事件接收模塊的臨時存儲隊列提取事件報文,并按照port-write 報文格式解析關(guān)鍵信息;將關(guān)鍵信息存儲到struct errorInfo類型的數(shù)組中。
事件監(jiān)聽流程如圖2所示。交換芯片事件監(jiān)聽系統(tǒng)啟動后,首先進(jìn)行系統(tǒng)初始化,分別進(jìn)行事件接收模塊初始化、中斷處理模塊初始化、事件處理模塊初始化、交換芯片模塊初始化和signal 模塊初始化。信號(signal)是在多任務(wù)操作系統(tǒng)中進(jìn)程間通信的一種機(jī)制,是在軟件層次上模擬中斷機(jī)制,而且信號是進(jìn)程間唯一的異步通信機(jī)制[4],由某個進(jìn)程或者外部特殊事件觸發(fā)之后發(fā)送給預(yù)先注冊到這個signal 的進(jìn)程,使該進(jìn)程啟動。本系統(tǒng)中signal 類型選擇SIGRES1。因為SIGRES1 是VxWorks 系統(tǒng)中的一種signal 類型,可用于用戶自定義的signal 通信機(jī)制,避免和其他類型singal沖突。
圖2 事件監(jiān)聽流程
系統(tǒng)初始化完成之后,主控處理器開始監(jiān)聽來自交換芯片的事件報文,當(dāng)事件接收模塊接收到交換芯片發(fā)來的port-write 事件報文時,將事件報文存儲至預(yù)先分配的臨時存儲隊列,同時設(shè)置port-write 相關(guān)狀態(tài)標(biāo)志位為1,可以選擇增加事件計數(shù)器以記錄接收到的事件報文的數(shù)量。
中斷處理模塊發(fā)送signal 至事件處理模塊,以使事件處理模塊從臨時存儲隊列提取事件報文并處理事件報文,同時清除port-write相關(guān)狀態(tài)標(biāo)志位。
事件處理模塊解析事件報文,獲取事件報文中包含的事件信息(也就是交換芯片發(fā)生的錯誤信息)并保存下來。可選擇解析出事件信息之后立即打印出來或者只存儲不打印,也可以直接根據(jù)錯誤信息進(jìn)行錯誤處理或故障恢復(fù)等工作,本文中只涉及前2 種操作,重點在于實時獲取和存儲錯誤信息。以上是整個事件監(jiān)聽系統(tǒng)的主要工作流程。
部分主要函數(shù)和數(shù)據(jù)結(jié)構(gòu)說明如下。
RapidIOInit():初始化主控芯片的RapidIO功能。
pwInit():初始化主控芯片的port-write 接收和處理功能,包括注冊中斷處理函數(shù)、申請接收port-write報文緩存、注冊signal處理函數(shù)到指定signal等。
getPwInfo():解析、存儲port-write 報文信息,可以選擇實時打印顯示。
portWrite():初始化交換芯片的port-write功能。
portWriteGen():主動觸發(fā)交換芯片若干個不同類型的錯誤,使交換芯片向主控處理器發(fā)送port-write 報文,數(shù)量和類型自定義。
pw_counter_show():查看中斷統(tǒng)計,port-write 報文接收統(tǒng)計。
showAllPwInfo():查看所有接收到的port-write 報文的詳細(xì)內(nèi)容。
struct errorInfo 結(jié)構(gòu)體:描述port-write 的data payload詳細(xì)信息定義如下。
為了驗證此系統(tǒng)的功能實現(xiàn)與可靠性,筆者搭建以下試驗場景進(jìn)行驗證測試。
2.3.1 實驗環(huán)境
硬件環(huán)境:選擇Freescale 的MPC8548E 處理器作為主控處理器,MPC8548E是基于Freescale 的PowerPC架構(gòu)的PowerQuiccIII處理器,具備較強(qiáng)大的處理能力,較適合于高速率、低時延的業(yè)務(wù)處理。同時選擇天津芯海創(chuàng)科技有限公司自主研發(fā)的NRS1800 作為RapidIO 交換芯片。NRS1800 芯片滿足RapidIO 2.1 協(xié)議規(guī)范,支持48 路通道和最多18 個端口,具有低延遲、可靠數(shù)據(jù)傳輸和高吞吐量的特性,適合于板內(nèi)互聯(lián)、通過背板的板件互聯(lián)與機(jī)箱互聯(lián)。硬件環(huán)境拓?fù)溥B接如圖3所示。
圖3 測試環(huán)境硬件拓?fù)?/p>
軟件環(huán)境:選擇VxWorks 作為嵌入式操作系統(tǒng),VxWorks操作系統(tǒng)是美國公司W(wǎng)ind River于1983年設(shè)計開發(fā)的一種嵌入式實時操作系統(tǒng)(DGHI),具有良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境。IDE 是Wind River 公司開發(fā)的Workbench 嵌入式開發(fā)平臺。在PC 上編碼和編譯,下載程序到MPC8548E 處理器上運行。在ftp 程序下載工具上正確設(shè)置PC 機(jī)的IP 地址和鏡像文件在PC 機(jī)上的路徑,MPC8548E上電或重啟就可以自動下載鏡像文件。
2.3.2 測試流程及分析
系統(tǒng)初始化過程已經(jīng)使交換芯片處于可上報port-write報文的狀態(tài),由于需要統(tǒng)計port-write報文數(shù)量和信息,所以采用寫交換芯片錯誤探測寄存器的方式主動創(chuàng)造錯誤進(jìn)而引起事件。交換芯片觸發(fā)事件之后,統(tǒng)計主控處理器上的中斷觸發(fā)次數(shù)和接收到的port-write 報文數(shù)量,結(jié)合主動觸發(fā)的事件數(shù)量判斷是否發(fā)生漏報問題,并查看解析出來的data payload 信息判斷是否發(fā)生接收錯誤問題。
由于打印信息會造成延時,影響事件接收能力和實際統(tǒng)計結(jié)果,所以測試分以下2個層次。
a)在較慢事件觸發(fā)速率的情況下,實時打印顯示出事件的詳細(xì)信息。
b)在較快事件觸發(fā)速率的情況下,只存儲和統(tǒng)計事件的詳細(xì)信息,不再實時打印顯示,待一次完整測試完成之后再全部打印顯示和驗證是否正確。
如果觸發(fā)錯誤數(shù)量、觸發(fā)中斷數(shù)量和收到的portwrite 報文數(shù)量都相同,且port-write 報文內(nèi)容無誤,則可以認(rèn)為在當(dāng)前的錯誤事件觸發(fā)頻率下所有的portwrite報文都可以成功接收。
如果觸發(fā)中斷數(shù)量和收到的port-write 報文數(shù)量相同,但是小于觸發(fā)錯誤數(shù)量,且port-write 報文內(nèi)容無誤,則可以認(rèn)為只要在主控處理器中斷承受能力之內(nèi)的port-write 報文都可以成功接收,接收能力瓶頸主要受主控處理器的中斷處理能力影響。
使用本監(jiān)聽系統(tǒng)時,觸發(fā)錯誤的間隔時間過短,會導(dǎo)致監(jiān)聽機(jī)制不能監(jiān)聽并解析到所有實際發(fā)出的port-write 報文,將觸發(fā)錯誤的時間間隔增加taskDelay(1)(在VxWorks 系統(tǒng)中默認(rèn)為1/60 s)延時之后,可以監(jiān)聽并解析到全部port-write 報文(測試0x100 個portwrite包),隨后將錯誤觸發(fā)的時間間隔縮短到1/6 000 s(167 μs)左右時為不丟包的臨界值,測試記錄如表1所示。
表1 事件監(jiān)聽測試結(jié)果
上述實驗結(jié)果表明本系統(tǒng)將signal 這種進(jìn)程間的通信機(jī)制與中斷結(jié)合應(yīng)用到RapidIO 交換芯片的事件監(jiān)聽解決方案中,可以實時地監(jiān)聽到上報的事件;在觸發(fā)錯誤事件時間間隔不小于1/6 000 s的時候觸發(fā)大量事件的情況下能監(jiān)測到所有事件,可以自動解析、存儲、顯示上報的事件;當(dāng)觸發(fā)錯誤事件時間間隔小于1/6 000 s 的時候就會發(fā)生丟包現(xiàn)象,但是觸發(fā)中斷的數(shù)量和收到的port-write報文數(shù)量相同。
經(jīng)過分析,主控處理器丟包原因主要有2個:一是MPC8548E 處理器的中斷處理能力和運算能力相對于高速率觸發(fā)錯誤事件的應(yīng)用場景較低,在高速率觸發(fā)中斷的情況下承受能力有限,高速率接收port-write 報文會發(fā)生丟包問題;二是事件監(jiān)聽系統(tǒng)軟件架構(gòu)應(yīng)該還有進(jìn)一步優(yōu)化的空間,可以在一定程度上提高portwrite報文接收速率。
本文提出的RapidIO 交換芯片的事件監(jiān)聽系統(tǒng)是基于VxWorks 系統(tǒng),采用signal 通信機(jī)制結(jié)合中斷的設(shè)計方案,可以實時監(jiān)聽到交換芯片上報的事件報文,在短時間內(nèi)發(fā)生大量事件上報的情況下能監(jiān)測到所有事件,并且可以通過事件處理模塊自動解析事件報文、存儲事件信息、顯示事件信息,提高了RapidIO事件監(jiān)聽系統(tǒng)的實時性和自動化程度。而且,該方法無需網(wǎng)絡(luò)主控設(shè)備的處理器定時輪詢事件報文的存儲空間或者主動查詢交換芯片的錯誤狀態(tài)寄存器,很大程度地節(jié)約了網(wǎng)絡(luò)主控處理器的資源,有利于網(wǎng)絡(luò)主控處理器更高效、更穩(wěn)定地維護(hù)RapidIO網(wǎng)絡(luò)。
同時,由于在交換芯片高速率事件觸發(fā)的場景下存在性能瓶頸,所以優(yōu)化工作需要繼續(xù)開展。后續(xù)計劃采用性能更強(qiáng)的處理器作為主控設(shè)備,緩解中斷處理能力瓶頸,并且優(yōu)化軟件設(shè)計方案,縮短能承受的事件觸發(fā)時間間隔。