王運(yùn)盛,王 堅(jiān),周 紅
(1.中電科航空電子有限公司,成都 611731;2.總參陸航部駐成都地區(qū)軍事代表室,成都 610036)
隨著硬件和軟件技術(shù)的不斷發(fā)展,越來越多的系統(tǒng)設(shè)計(jì)采用分布式處理體系結(jié)構(gòu),多個(gè)處理器、模塊甚至機(jī)箱協(xié)同工作,這就對相互之間的數(shù)據(jù)交換網(wǎng)絡(luò)提出了更高的要求。
RapidIO是一種開放標(biāo)準(zhǔn)的交換網(wǎng)絡(luò)技術(shù),提供高性能、可靠、高效、可擴(kuò)展的互連網(wǎng)絡(luò),RapidIO得到了超過50家制造商和供應(yīng)商的支持。RapidIO構(gòu)架是一種基于高性能包交換的互連技術(shù),主要功能是完成在一個(gè)系統(tǒng)內(nèi)的微處理器、DSP、通信和網(wǎng)絡(luò)處理器、系統(tǒng)存儲器以及外設(shè)之間數(shù)據(jù)的高速傳輸。它成功解決了處理器集成芯片之間和線路板之間的互連問題。RapidIO采用通用的物理層、傳輸層、邏輯層和應(yīng)用層劃分,提供基于地址的讀和寫操作功能,也提供包括DMA控制器的通用數(shù)據(jù)傳輸和消息發(fā)送功能,同時(shí)流數(shù)據(jù)和封裝過程傾向于采用DMA機(jī)制完成基本的數(shù)據(jù)傳輸。RapidIO的最新規(guī)范還提供了對原子操作、消息中斷、服務(wù)質(zhì)量和封裝等功能。
但是,RapidIO規(guī)范并沒有定義應(yīng)用層的API,用戶要使用RapidIO網(wǎng)絡(luò)必須自己實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議棧和應(yīng)用程序接口函數(shù)[1]。RapidIO中必須附加開放的應(yīng)用層協(xié)議和接口,才能充分發(fā)揮其高速傳輸、低開銷和可移植等特點(diǎn)。同時(shí)開放的接口也有助于軟件開發(fā)和系統(tǒng)集成,更加方便地實(shí)現(xiàn)網(wǎng)絡(luò)容錯(cuò)和降級使用等功能,極大地提高嵌入式系統(tǒng)的網(wǎng)絡(luò)和傳輸性能。TIPC就是滿足這些功能要求的開放的網(wǎng)絡(luò)協(xié)議和接口。筆者將TIPC網(wǎng)絡(luò)協(xié)議與RapidIO總線相結(jié)合,在AMC8548上實(shí)現(xiàn)了基于RapidIO網(wǎng)絡(luò)的TIPC通信軟件,該通信軟件在實(shí)際的軟硬結(jié)合測試環(huán)境中表現(xiàn)良好。
透明的處理器間通信(Transparent Inter-Processor Communication,TIPC)是一種開放的處理器間通信的協(xié)議,它提供面向消息的、與位置無關(guān)的通信服務(wù)。TIPC具有高速、實(shí)現(xiàn)代碼量少和良好的可擴(kuò)展性等特點(diǎn)。同時(shí)它還提供低效運(yùn)行、可靠傳輸和系統(tǒng)監(jiān)控能力,適合于高速、延時(shí)要求苛刻的實(shí)時(shí)處理系統(tǒng)。TIPC還符合標(biāo)準(zhǔn)的套接字API接口,支持從多核到簇系統(tǒng)規(guī)模的網(wǎng)絡(luò),支持動(dòng)態(tài)的網(wǎng)絡(luò)發(fā)現(xiàn)。TIPC最早由愛立信提出,并用在其電信基站等系統(tǒng)中完成數(shù)據(jù)收發(fā)和中繼功能。除了普通的進(jìn)程間的通信,TIPC的設(shè)計(jì)甚至考慮了多核處理器同一內(nèi)核上的進(jìn)程之間以及不同處理器內(nèi)核之間通信,并保持尋址與接口的透明,因此TIPC的運(yùn)行性能優(yōu)于TCP/IP。
TIPC對網(wǎng)絡(luò)的通信過程進(jìn)行抽象,形成通用的通信模型,如圖1所示。TIPC定義了端口、處理器節(jié)點(diǎn)、鏈路、傳輸設(shè)備等抽象模型。這些模型的抽象,不僅提高了TIPC在不同硬件平臺上的可移植性,也使得TIPC實(shí)現(xiàn)了與位置無關(guān)的通信能力。
圖1 TIPC的通信模型Fig.1 TIPC communication module
如圖1所示,在TIPC通信系統(tǒng)中,端口與功能關(guān)聯(lián)。處理器節(jié)點(diǎn)根據(jù)所提供的服務(wù)功能向外發(fā)布自己端口,其他處理器節(jié)點(diǎn)根據(jù)發(fā)布的服務(wù)和端口信息動(dòng)態(tài)地維護(hù)本地的命名表,并將標(biāo)志服務(wù)的端口與處理器的物理標(biāo)識關(guān)聯(lián),通過高效的算法將邏輯端口轉(zhuǎn)換成實(shí)際的物理地址。處理器通過物理ID確定通信的鏈路,最終由傳輸設(shè)備將數(shù)據(jù)發(fā)送出去。通信鏈路完成消息傳輸、序列排隊(duì)和重發(fā)的任務(wù);承載者是物理或者邏輯上的傳輸介質(zhì),是完成數(shù)據(jù)發(fā)送和接收的傳輸設(shè)備,如以太網(wǎng)的硬件設(shè)備或者是邏輯上的UDP通信協(xié)議,也可以是RapidIO傳輸設(shè)備。
TIPC對網(wǎng)絡(luò)進(jìn)行劃分,從大到小分為區(qū)域、簇和節(jié)點(diǎn),節(jié)點(diǎn)又分為主節(jié)點(diǎn)和從節(jié)點(diǎn)。TIPC支持消息路由,消息可以在不同的區(qū)域之間、不同的處理器之間以及主處理器和從處理器之間進(jìn)行路由,最終到達(dá)消息被指定的接收方,如圖2所示。
圖2 TIPC的網(wǎng)絡(luò)模型Fig.2 TIPC network module
TIPC網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)都保留著所有的從處理器節(jié)點(diǎn)、外部組和外部簇的路由信息,這些信息都被TIPC實(shí)時(shí)維護(hù)。每個(gè)節(jié)點(diǎn)的路由表發(fā)生變化時(shí)都會(huì)向其他節(jié)點(diǎn)發(fā)出廣播信息,通知路由表的變化,使得組內(nèi)節(jié)點(diǎn)的路由表始終保持一致。TIPC也是采用這種方式來維護(hù)命名表的一致性。
在RapidIO與TIPC的結(jié)合中,RapidIO總線協(xié)議的物理層、傳輸層和邏輯層實(shí)現(xiàn)ISO會(huì)話層以下的功能。在對RapidIO和操作系統(tǒng)接口做適當(dāng)?shù)母膭?dòng)后,將TIPC移植到RapidIO總線上,將為用戶提供基于RapidIO的高效、完整的軟硬件解決方案,支持與位置無關(guān)的數(shù)據(jù)傳輸。圖3分別對RapidIO、TIPC以及硬件環(huán)境進(jìn)行了說明。
圖3 基于RapidIO的TIPC通信層次Fig.3 Layered TIPC communication protocol based on RapidIO
TIPC層不但完成通信的資源管理、數(shù)據(jù)緩存管理、發(fā)送接收隊(duì)列管理和中斷管理,還具有建立發(fā)送和接收的數(shù)據(jù)塊描述字鏈表,通過鏈表的方式實(shí)現(xiàn)數(shù)據(jù)用戶數(shù)據(jù)到底層驅(qū)動(dòng)的零拷貝的功能。同時(shí)TIPC層還監(jiān)控網(wǎng)絡(luò)狀態(tài),一旦網(wǎng)絡(luò)發(fā)生阻塞時(shí),TIPC層會(huì)對要求發(fā)送的數(shù)據(jù)進(jìn)行緩存,待網(wǎng)絡(luò)恢復(fù)正常時(shí)再發(fā)送,并對發(fā)送出錯(cuò)的數(shù)據(jù)進(jìn)行錯(cuò)誤管理和重發(fā)管理。
RapidIO及其驅(qū)動(dòng)程序提供數(shù)據(jù)通信的通道,通過共享內(nèi)存的方式將數(shù)據(jù)交給TIPC處理。在RapidIO規(guī)范定義的數(shù)據(jù)幀結(jié)構(gòu)中RapidIO的地址定義如圖4所示。RapidIO的地址定義使得RapidIO數(shù)據(jù)具有邏輯的地址空間,可以在處理器的內(nèi)存空間與RapidIO的邏輯空間之間建立映射關(guān)系,從而將具有一定RapidIO邏輯地址的數(shù)據(jù)存放到目的端指定的內(nèi)存中去。
圖4 RapidIO數(shù)據(jù)包格式Fig.4 Format of RapidIO data packet
在RapidIO總線上實(shí)現(xiàn)的共享內(nèi)存通信過程如圖5所示。發(fā)送端首先將需要發(fā)送的數(shù)據(jù)的RapidIO地址設(shè)置成一段確定的RapidIO地址空間,并將數(shù)據(jù)通過 RapidIO網(wǎng)絡(luò)發(fā)送到目的端的RapidIO節(jié)點(diǎn)。接收端的接口設(shè)備可以配置RapidIO地址窗口,建立本地處理器內(nèi)存與RapidIO地址之間的對應(yīng)關(guān)系,將符合該窗口地址的數(shù)據(jù)發(fā)送到相應(yīng)的地址空間中去。通常發(fā)送端也是通過開窗的方式,建立本地的地址與發(fā)送的RapidIO地址之間的對應(yīng)關(guān)系。RapidIO的內(nèi)存映射是雙向的過程,反之亦然,這樣就建立了發(fā)送和接收的雙向通道。
圖5 RapidIO內(nèi)存映射工作原理Fig.5 Principle of RapidIO memory mapping
筆者在AMC8548上實(shí)現(xiàn)了基于RapidIO總線的TIPC通信協(xié)議。首先通過采用一個(gè)AMC8548作為主節(jié)點(diǎn),對RapidIO網(wǎng)絡(luò)進(jìn)行初始化,并掃描網(wǎng)絡(luò)中其他的RapidIO節(jié)點(diǎn),然后分配其他RapidIO節(jié)點(diǎn)的網(wǎng)絡(luò)ID。當(dāng)網(wǎng)絡(luò)通信工作正常后,先對內(nèi)存映射機(jī)制的數(shù)據(jù)發(fā)送速率進(jìn)行測試,然后再對TIPC的功能進(jìn)行測試。
在對內(nèi)存映射機(jī)制的數(shù)據(jù)發(fā)送速率測試中,先由MPC8548處理器的ATMU單元建立發(fā)送接收的地址窗口,再將本地內(nèi)存地址和RapidIO邏輯地址建立映射關(guān)系,采用共享內(nèi)存的方式實(shí)現(xiàn)兩個(gè)處理器之間的通信。在此基礎(chǔ)上,對TIPC的承載者進(jìn)行修改,使之能夠驅(qū)動(dòng)基于RapidIO的內(nèi)存映射的數(shù)據(jù)收發(fā)。
測試的軟件環(huán)境要求如下:
Wind River Workbench 3.0;
Wind River Compiler 5.6;
Wind River GNU Compiler 4.1.2 forVxWorks 6.6;
Wind River VxWorks 3.0;
Wind River TIPC 1.7 Source。
主AMC8548設(shè)置為INBOUND窗,從AMC8548設(shè)置為OUTBOUND窗,從AMC8548調(diào)用DMA控制器將本地空間的海量數(shù)據(jù)(512 Mbyte)通過OUTBOUND窗拷貝到主AMC8548的本地內(nèi)存(NWRITE或NWRITE_R操作)。筆者分別對4k/8k/16k/32k/1M/2M/4M窗測試其數(shù)據(jù)吞吐率,測試結(jié)果如圖6所示。
圖6 基于RapidIO共享內(nèi)存吞吐率Fig.6 Throughput of communication based on RapidIO memory mapping
NREAD讀操作,因?yàn)樾枰l(fā)出讀請求,數(shù)據(jù)才能讀回,因此時(shí)間的開銷比NWRITE寫操作和NWRITE-R帶響應(yīng)的寫操作多,所以在映射同樣大小的窗口情況下,讀操作的數(shù)據(jù)吞吐率最低。三種操作方式在映射窗口不斷增大的情況下,數(shù)據(jù)吞吐率也隨之增大,因?yàn)镹WRITE寫操作不帶響應(yīng),所以其吞吐率最高。
對內(nèi)存映射機(jī)制的數(shù)據(jù)發(fā)送速率的測試完成后,在WorkBench的開發(fā)環(huán)境中打開VxWorks-6.6的組件配置視圖,添加對TIPC通信協(xié)議的支持,并在BSP中將TIPC的底層函數(shù)映射到基于RapidIO的共享內(nèi)存數(shù)據(jù)收發(fā)函數(shù)接口上,進(jìn)行對TIPC的功能測試。首先分別為兩端綁定本地的TIPC地址和端口:
隨后進(jìn)行TIPC的端口建立,其接口函數(shù)與通用的socket接口一致。也可采用VxWorks中TIPC所提供的測試組建,在shell下輸入 tipcTS進(jìn)行測試。tipcTS集成了15個(gè)測試用例分別對TIPC的端口打開關(guān)閉、數(shù)據(jù)收發(fā)等功能進(jìn)行測試,結(jié)果如下:
采用在RapidIO網(wǎng)絡(luò)上實(shí)現(xiàn)共享內(nèi)存并構(gòu)建TIPC的通信層次是可實(shí)現(xiàn)的。需要指出的是,TIPC所面向的網(wǎng)絡(luò)是類似于電信基站的大規(guī)模網(wǎng)絡(luò),相當(dāng)一部分功能是對網(wǎng)絡(luò)拓?fù)浜吐酚尚畔⒌木S護(hù),而通常情況下面向嵌入式應(yīng)用的RapidIO網(wǎng)絡(luò)規(guī)模很小,且網(wǎng)絡(luò)連接固定,直接將TIPC應(yīng)用到RapidIO網(wǎng)絡(luò)并不能完全發(fā)揮兩者的優(yōu)勢。對TIPC進(jìn)行有針對性地裁剪,并結(jié)合RapidIO的網(wǎng)絡(luò)特點(diǎn)和基本操作,將有助于發(fā)揮兩者優(yōu)勢,為嵌入式分布式系統(tǒng)提供高效方便的通信環(huán)境。
[1] Fuller S.RapidIO:The Embedded System Interconnect[M].北京:電子工業(yè)出版社,2006.Fuller S.RapidIO:The Embedded System Interconnect[M].Beijing:Publishing House of Electronic Industry,2006.