王立澤,劉 斌,周禮亮
(北京航空航天大學工程系統(tǒng)工程系,100191北京,wanglize@dse.buaa.edu.cn)
在國內(nèi)外航空航天等領域,仿真測試環(huán)境多采用Hardware-In-Loop(HIL)方式和分布式結(jié)構(gòu)來分散繁重的計算任務,測試實時嵌入式軟件,進而驗證軟件可靠性[1].而如何保證分布式測試環(huán)境各節(jié)點間的實時通信則是一個難題[2].
近幾年高速網(wǎng)絡技術(shù)有Fibre Channel(FC)、Gigabit Ethernet(GigE)、反射內(nèi)存網(wǎng)等,而反射內(nèi)存網(wǎng)因用硬件實現(xiàn)通信、傳輸延遲確定、移植性強等優(yōu)點,成為解決分布式測試環(huán)境節(jié)點間的實時通信問題的一種行之有效的方法.關于反射內(nèi)存網(wǎng)的研究主要集中于協(xié)議設計[3-8]及理論研究[9-10]兩方面.協(xié)議設計在功能實現(xiàn)上可分為兩類:一類實現(xiàn)了支持一定程度異步、周期通訊模式的通訊協(xié)議,但它們都與應用綁定,不能靈活支持系統(tǒng)中不同種類的復雜通信,離開應用,協(xié)議需重新實現(xiàn),缺乏通用性[3-6],如文獻[4]為解決周期同步和通信問題進行了設計,協(xié)議建立連接后,通訊雙方在約定好的位置傳輸某種確定的數(shù)據(jù)如同步數(shù)據(jù),傳輸模式不能配置并伴隨整個系統(tǒng)運行過程;另一類雖然實現(xiàn)了一定的通用性,但只支持異步通信,缺乏特殊的優(yōu)先級機制,也不支持周期通訊[7-8].理論研究主要基于一定的計算模型計算實時網(wǎng)絡的開銷[9-10].通過分析,現(xiàn)有基于反射內(nèi)存網(wǎng)的相關協(xié)議設計,都不能滿足本文分布式測試系統(tǒng)的通用通信要求.
本文研究并利用反射內(nèi)存網(wǎng)絡SCRAMNet設計一種能實現(xiàn)周期和異步通訊的、通用性較強的實時通訊協(xié)議,并給出了較為完善的系統(tǒng)開銷算法,以解決分布式測試環(huán)境節(jié)點間的實時通信問題.
在分布式測試環(huán)境中,測試環(huán)境結(jié)構(gòu)分為兩層:測試開發(fā)層和測試執(zhí)行層[1],見圖1.測試執(zhí)行層存在原子事務、時鐘同步、任務同步、通信等問題.原子事務的解決主要靠在各節(jié)點設置事務協(xié)調(diào)者,使之維護本地日志,并負責啟動、分派、結(jié)束事務的執(zhí)行,各事務協(xié)調(diào)者遵循一定協(xié)議通信[2,11],如各節(jié)點對測試開始、結(jié)束的一致響應.其它問題與原子事務類似,靠節(jié)點按即定算法周期或異步協(xié)作.節(jié)點間任何通信都要借助網(wǎng)絡完成,通訊類型多,實時性高,且處理上有緩急之分.有的任務如仿真任務隨待測系統(tǒng)不同而變化,因此還要求通訊有一定的配置靈活性.這就需要一個專門的實時通信層來適應節(jié)點間的通訊要求.
綜合以上分析,為解決分布式測試系統(tǒng)的通信問題,需要基于實時網(wǎng)絡為實時通信層設計一種通用的實時通訊協(xié)議,滿足諸多任務的協(xié)作、通信.
圖1 分布嵌入式仿真軟件測試環(huán)境結(jié)構(gòu)
反射內(nèi)存網(wǎng)是實時性要求較高的專用通訊網(wǎng)絡,它的工作原理[12]是各實時節(jié)點有反射內(nèi)存卡,主機內(nèi)存映射到各卡的獨立局部內(nèi)存,局部內(nèi)存映射到全局網(wǎng)絡內(nèi)存,使各卡邏輯上共用一段地址.各節(jié)點將數(shù)據(jù)寫入主機內(nèi)存同時也寫入所有其他各卡內(nèi)存.全局內(nèi)存對所有節(jié)點都可見,從而實現(xiàn)節(jié)點間數(shù)據(jù)通訊.
經(jīng)需求分析知,分布式測試系統(tǒng)中既有較多周期通訊,又有靈活異步通訊需求,對異步通訊,不但強調(diào)實時性,某些類型消息還應優(yōu)先處理,如測試指令消息應先于數(shù)據(jù)消息接收.本文基于SCRAMNet實現(xiàn)了一種支持周期和異步數(shù)據(jù)傳輸?shù)膮f(xié)議,異步傳輸基于消息和優(yōu)先級機制,周期傳輸基于數(shù)據(jù)流機制,稱實現(xiàn)為Message-Stream Test Protocol(MSTP).
本協(xié)議的設計目的及特點主要有:
1)能夠?qū)崿F(xiàn)測試系統(tǒng)任務間的異步通訊傳輸原語,發(fā)送消息,查詢消息,接收消息;
2)允許兩任務間異步通訊有一定持久性,即通過合理分配內(nèi)存,允許發(fā)送多條消息,接收與發(fā)送順序一致;
3)允許異步通訊有優(yōu)先級機制,使某類通信能夠被優(yōu)先處理;
4)能夠?qū)崿F(xiàn)任務間的周期性通訊,且不同的協(xié)議配置,傳輸不同的周期數(shù)據(jù).
內(nèi)存布局解決的問題是如何為MSTP進行內(nèi)存分配,使協(xié)議對用戶透明.
根據(jù)反射內(nèi)存網(wǎng)的廣播特點,同一內(nèi)存區(qū)不能被多個用戶同時寫操作,如同時寫則必須實現(xiàn)加鎖機制,而加鎖會增加開銷,所以,協(xié)議的核心設計思想是為每個進程開辟一塊寫操作區(qū)域,全局只有此進程擁有寫操作權(quán),即一塊內(nèi)存區(qū)有且只能有1個寫操作者.設參加通訊的進程數(shù)為proc-num.
為實現(xiàn)上述思路,對內(nèi)存進行訪問控制,將其分為2個區(qū)域:數(shù)據(jù)區(qū)和控制區(qū).為實現(xiàn)異步通訊,為每個進程分配各自的數(shù)據(jù)區(qū)和控制區(qū),數(shù)據(jù)區(qū)存放消息,控制區(qū)存放各消息對應的控制信息,見圖2.為實現(xiàn)任意兩進程間的周期通訊,分配1個全局的數(shù)據(jù)區(qū)和1個通訊登記區(qū),見圖3.
異步通訊數(shù)據(jù)區(qū)由所屬進程管理并執(zhí)行寫操作,當有異步消息發(fā)送時,發(fā)送進程申請并將消息寫入數(shù)據(jù)區(qū)內(nèi)存,發(fā)送后,目的進程只能讀取消息.為實現(xiàn)優(yōu)先級機制,消息數(shù)據(jù)區(qū)按頁(page)分配.當優(yōu)先級不同的消息共存時,高優(yōu)先級消息先被取走而導致在數(shù)據(jù)區(qū)產(chǎn)生外部內(nèi)存碎片,為每個消息分配一定數(shù)量頁面可避免碎片產(chǎn)生.每條消息可分配多頁,呈鏈表結(jié)構(gòu),每頁頭部的頁指針指向下一頁.布局示意見圖2.
與消息數(shù)據(jù)區(qū)同屬發(fā)送進程的控制區(qū)劃分為3個子區(qū)域:消息描述區(qū),已發(fā)送標記區(qū)(send),響應區(qū)(ack).每個進程最多發(fā)送某一固定數(shù)量的消息,記為msg-num.每個消息對應1個消息描述區(qū),分別表示所屬進程的從第1到第msgnum個消息的位置和屬性信息,包括首頁(firstpage),長度,發(fā)送序號,類型,優(yōu)先級等.首頁記錄起始頁號.長度表示消息字節(jié)數(shù).另外,控制區(qū)還各含有proc-num-1個send標記和ack標記,每個標記有msg-num個位.每個send標記代表源進程向目的進程發(fā)送的消息序列,自左至右的位序號對應了消息序號,代表源進程是否向目的進程發(fā)送消息,同理,ack標記則代表消息是否已被目的進程接收.消息描述區(qū)、send區(qū)、ack區(qū),同消息數(shù)據(jù)區(qū)一樣,在協(xié)議初始化后,大小位置都固定不變.
圖2 MSTP異步通訊內(nèi)存布局
圖3 MSTP周期通訊內(nèi)存布局
協(xié)議描述規(guī)定了用戶如何使用MSTP及其實現(xiàn)的原理.對異步通信,MSTP要求明確所有參與通信的進程數(shù)量.每個進程對應1個邏輯地址,即在進程集中的編號.
API定義如下:
1)mstp-asyn-init(int proc-logic,int procnum),異步通訊初始化.參數(shù)分別為異步進程邏輯地址和異步進程數(shù).返回指針struct mstp*,以后進程proc-logic將用此指針收發(fā)消息.初始化指針包括了進程邏輯地址,消息數(shù)據(jù)區(qū)和控制區(qū)地址及通訊狀態(tài)等信息;
mstp-perd-init(),周期通訊協(xié)議初始化;
mstp-perd-regist(int id,struct reg* info),登記1個通訊區(qū),info包括通訊標識、周期等信息.
2)mstp-asyn-send(struct mstp*,char* buf,int len,int dest,short msg-type,short priority);向dest進程發(fā)送緩沖區(qū)buf內(nèi)的len字節(jié)的數(shù)據(jù),msg-type是用戶定義的消息類型.默認為最低優(yōu)先級;
mstp-perd-send(int id,char* buf,int size);寫數(shù)據(jù)流buf到通訊標識id.
3)mstp-asyn-inquiry(struct mstp* this,int source);查詢是否有從source發(fā)送至this的消息,若有,返回進程邏輯地址,反之 -1;若source為-1,查詢是否有從所有任務發(fā)送至this的消息.
單軸壓縮實驗在YAW-2000液壓伺服試驗機上進行,實驗過程采用軸向位移控制方式,加載速率恒定在0.01mm/s,實驗前選取20個直徑和高度誤差均小于±0.05%的標準煤樣,分為4組,每組5個煤樣。
4)mstp-asyn-recv(struct mstp* this-proc,char* buf,int max-len,int source,short&msgtype);從source接收max-len字節(jié)消息至buf.先取得高優(yōu)先級的消息,同優(yōu)先級消息按發(fā)送順序取得.
mstp-perd-recv(int id,char* buf);讀數(shù)據(jù)流.
源進程向目的進程發(fā)送異步消息時,協(xié)議內(nèi)部動作:1)按消息大小申請空閑內(nèi)存區(qū),得到1個或多個內(nèi)存頁,根據(jù)頁號為每頁的指針頭賦值; 2)將數(shù)據(jù)拷貝至內(nèi)存數(shù)據(jù)區(qū);3)根據(jù)目的進程的send標記和ack標記,計算出消息緩沖區(qū)號,根據(jù)通訊狀態(tài)得出消息發(fā)送序號;4)將新的send標記和消息描述信息寫入控制區(qū).發(fā)送端協(xié)議自動計算消息序號.發(fā)送端節(jié)點維護其對應控制區(qū)信息.
進程接收源進程發(fā)來的異步消息時,協(xié)議動作:1)根據(jù)源進程的send標記和ack標記,得到未接收消息列表;2)讀取消息列表相應描述區(qū)信息,根據(jù)優(yōu)先級和發(fā)送序號,得出應讀消息號;3)將消息讀出;4)置ack標記.
由于本地內(nèi)存操作比讀寫反射內(nèi)存快,所以協(xié)議內(nèi)部的實現(xiàn)應盡可能減少反射內(nèi)存讀寫.可利用狀態(tài)信息實現(xiàn).
周期通訊的關鍵在于通訊登記表的建立.雙方經(jīng)過通訊標識確立通訊關系,協(xié)議負責為通訊雙方在數(shù)據(jù)區(qū)維護內(nèi)存資源.在通訊配置建立時,發(fā)送方協(xié)議通過分布式互斥算法向登記區(qū)增加記錄,然后通過異步消息通知目的方獲取記錄項.通訊過程中,為保證實時性能,協(xié)議不允許改變登記表.
實現(xiàn)MSTP需確定如下參數(shù):異步通訊進程個數(shù)proc-num,每個進程發(fā)送最大消息數(shù)msgnum,每個進程消息數(shù)據(jù)區(qū)長度data-area-len,消息數(shù)據(jù)區(qū)最小內(nèi)存單元page-size,最小內(nèi)存單元指針頭 page-head,消息描述區(qū) data-descsize,周期通訊連接數(shù)perd-num,登記表項大小reg-size.優(yōu)先級數(shù)、消息類型、周期通訊數(shù)據(jù)區(qū)大小perd-data-size根據(jù)應用確定.確定參數(shù)后,協(xié)議實現(xiàn)異步消息通訊需要的實時網(wǎng)絡內(nèi)存為
實現(xiàn)周期通訊登記表需要的內(nèi)存為
本文在測試環(huán)境中實現(xiàn)了MSTP:異步通訊進程數(shù)32,每進程數(shù)據(jù)區(qū)1 M,最大消息數(shù)64,最小內(nèi)存單元48 B,指針頭4 B,消息描述區(qū)16 B,優(yōu)先級別10級,最高0級.周期通訊最大連接數(shù)300,登記表項24 B,數(shù)據(jù)區(qū)2 MB,計算得實際使用實時網(wǎng)絡內(nèi)存35 691 800 B.
協(xié)議初始化后,為異步通訊每個進程分配的指針維護了指向數(shù)據(jù)區(qū)和控制區(qū)、狀態(tài)信息數(shù)據(jù)結(jié)構(gòu)的指針.為避免頻繁訪問反射內(nèi)存,狀態(tài)信息將最近一次操作反射內(nèi)存的數(shù)據(jù)緩存至其中,包括消息數(shù)據(jù)區(qū)內(nèi)存緩存、發(fā)送標記、序號、已探測到但還未接收的消息等.發(fā)送和接收進程根據(jù)send標記和相應ack標記是否相等判斷此消息號是否在已發(fā)送隊列中,若相等,說明其空閑.
為檢驗MSTP設計效果,在分布式測試環(huán)境下設計了周期和異步通訊性能測試實驗.分別位于2個實時節(jié)點的多對仿真任務并發(fā)運行,對異步和周期通訊,依次對每種負載持續(xù)測試1 s以驗證是否有丟包或碰撞現(xiàn)象.異步消息優(yōu)先級為0或5.周期通訊周期為1 ms.測試負載為4 B,64 B,…,16 kB,32 kB.為每種測試負載分配1對異步、周期任務,對比發(fā)送與接收的數(shù)據(jù)以判斷通訊正確性.測試設備為 Pentium4 2.8GHz PC機,OS VxWorks5.5,PCI 64 SCRAMNet,示波器.實驗數(shù)據(jù)如圖4所示.
圖4 MSTP測試數(shù)據(jù)
根據(jù)實驗作以下分析:1)MSTP的異步和周期模式在并發(fā)運行、不同數(shù)據(jù)量、多次測試情況下,無丟包現(xiàn)象,均正常工作,且未知所攜帶的數(shù)據(jù)含義,與應用分離;2)文獻[4]未給出性能測試數(shù)據(jù),但應用系統(tǒng)的周期和異步協(xié)議工作在25~40 Hz間;文獻[8]使用異步協(xié)議實現(xiàn)仿真應用的周期和異步數(shù)據(jù)傳輸,測得3節(jié)點網(wǎng)絡系統(tǒng)的性能約為300 μs/800 B,320 μs/1600 B;文獻[5]實現(xiàn)用周期和異步方式傳輸HLA聯(lián)邦成員,性能在70 μs~30 ms之間.而本文提出的MSTP,在具備通用性的前提下,從圖4實驗數(shù)據(jù)可看出也具有強實時特性,滿足大多數(shù)應用的實時性要求; 3)異步通訊中優(yōu)先級高的消息總是先于低的被接收;4)傳輸延遲大小受數(shù)據(jù)包大小影響很大,因此要獲得強實時性,需盡可能減小每次通訊的數(shù)據(jù)量.
實驗結(jié)論:MSTP通用性設計可行,較已有設計有更廣適用范圍,且實時性強,可靠性高,能夠基于其解決分布式測試環(huán)境的各種協(xié)議實現(xiàn)問題.
文獻[10]采用估算法設計了1個專用于反射內(nèi)存網(wǎng)絡的根據(jù)各節(jié)點的訪問次數(shù)開銷計算系統(tǒng)總開銷的計算模型,本文進一步完善文獻[10]中關鍵量的算法,得到更為精確的系統(tǒng)總開銷算式.
文獻[10]假設節(jié)點i各進程內(nèi)存區(qū)大小未知,且各進程讀/寫內(nèi)存次數(shù)比率同為β(i),所以在計算總開銷時采用估算法,設i所有進程每次讀寫操作時訪問i的全部內(nèi)存區(qū)S(i).而在本文及實際應用中[3-6],文獻[10]的假設會帶來網(wǎng)絡訪問開銷的增加和效率的降低,相反,節(jié)點i的各進程j一般不共享使用S(i),而是使用各自內(nèi)存s(j),內(nèi)存相互獨立、大小不同,且讀 /寫次數(shù)比率不同,記為β(j),以提高網(wǎng)絡內(nèi)存訪問效率.因而該估算法會因缺乏準確性而帶來誤差,本文綜合以上因素,給出更為符合實際的計算模型改進算法.計算原理及關鍵量的改進算法如下.
規(guī)定一個時間段Tlcm,在Tlcm內(nèi)所有訪問反射內(nèi)存的進程必須至少執(zhí)行1次,且假定有R個節(jié)點,節(jié)點i上有j個進程,各進程執(zhí)行時間τ(j)已知.這樣,
式中:c(i)為i節(jié)點的內(nèi)存區(qū)訪問開銷;N(i,j)為平均每個進程j對單位數(shù)據(jù)的訪問次數(shù);S(i)為節(jié)點i各進程內(nèi)進程內(nèi)存和.各節(jié)點內(nèi)存訪問開銷和為系統(tǒng)總開銷.
根據(jù)節(jié)點i上各進程的執(zhí)行時間τ(j)等量,求得i的平均單元數(shù)據(jù)訪問時間Δ(i):
其中φ(j)為進程j在Tlcm內(nèi)執(zhí)行次數(shù);τ(j)為j執(zhí)行時間;s(j)為j內(nèi)存數(shù)量;β(j)為j讀/寫次數(shù)比率.
加入節(jié)點i各進程j執(zhí)行時間權(quán)重,計算j在Tlcm間單元數(shù)據(jù)訪問次數(shù)N(i,j)為
節(jié)點i的單元數(shù)據(jù)訪問次數(shù)總開銷C(i)為各進程j對單元數(shù)據(jù)訪問開銷的平均值,即
求得C(i)后,將C(i)組成矩陣C,各節(jié)點i進程數(shù)組成K,各節(jié)點進程實際內(nèi)存分配組成X,則系統(tǒng)總開銷 =[KC]TX.
另外,系數(shù)矩陣A、X、內(nèi)存限制矩陣b組成限制條件AX≤b.各矩陣表示如下.
可從統(tǒng)計角度將改進后的系統(tǒng)總訪問開銷的算式用于判斷各節(jié)點上各任務的內(nèi)存分配合理與否的量化評估.可使用MATLAB“LINPROG”等工具對其進行分析,以最小化總訪問開銷[10].關于計算模型的說明及非關鍵量的計算參見文獻[10].
本文設計了一種基于反射內(nèi)存網(wǎng)的支持異步、周期性數(shù)據(jù)通訊的實時傳輸協(xié)議MSTP,解決分布式測試環(huán)境的復雜通訊問題,較已有設計通用性強.并基于理論計算模型,給出了計算系統(tǒng)開銷的更為完善的算法.實驗表明本STP能夠滿足分布式測試平臺實時通信、時鐘同步、任務同步等需要.體現(xiàn)了較好的通用性、可配置性和集成性,對基于反射內(nèi)存網(wǎng)的應用協(xié)議設計人員具有重要的參考價值.下一步將基于MSTP設計分布式測試平臺的相應算法開展工作.
[1]劉斌,高小鵬,陸民燕,等.嵌入式軟件可靠性仿真測試系統(tǒng)研究[J].北京航空航天大學學報,2000,26 (4):490-493.
[2]ANDREW S T.分布式系統(tǒng)原理與泛型[M].楊劍鋒,譯.北京:清華大學出版社,2004:9.
[3]HAVLICSEK S H,ZANA L.Improving real-time communication between host and motion system in a HWIL simulation[C]//Procedings of SPIE.Pittsburgh PA: Acutronic USA,2004:33-43.
[4]TAKAHASHI H.Synchronized data distribution and acquisition system using reflective memory for J-PARC 3GeV RCS[C]//Processings of the 11th European Particle Accelerator Conference.Genoa:[s.n.],2008: TUPPO13.
[5]李海,吳嗣亮.基于HLA和反射內(nèi)存網(wǎng)的半實物衛(wèi)星對抗仿真系統(tǒng)[J].系統(tǒng)仿真學報,2008,18(6): 1520-1523.
[6]蒲源,王仕成.多網(wǎng)絡半實物實時仿真平臺研究[J].系統(tǒng)仿真學報,2008,20(10):2572-2574.
[7]JACUNSKI M G,MOORTHY V.Low latency messagepassing for reflective memory networks[C]//In Proceedings of CANPC.Orlando:[s.n.],1999:211-224.
[8]LAWTON J V,BROSNAN J J.Building a high performance message-passing system for memory chaninel clusters[J].Digital Technical Journal,1996,8(2):96-116.
[9]STOCKINGER H,STOCKINGER K.Towards a cost model for distributed and replicated data stores[C]//In Proceeding of Ninth Euromicro Workshop on Parallel and Distributed Processing.Italy:[s.n.],2001:461-467.
[10]RYOU M S.Optimization of data accesses in reflective memory systems[C]//TENCON 2006,IEEE Region 10 Conference.HongKong:[s.n.],2006:1-4.
[11]ABRAHAM S.操作系統(tǒng)概念[M].第六版.鄭扣根,譯.北京:高等教育出版社,2005:4.
[12]SCRAMNet G T.A new technology for shared-memory communication in high-throughput networks[EB/OL].[2009].http://www.cwcembedded.com/documents/ contentdocuments/White-Paper-SCRAMNet-GT.pdf.