王立澤,劉 斌,周禮亮
(北京航空航天大學工程系統工程系,100191北京,wanglize@dse.buaa.edu.cn)
在國內外航空航天等領域,仿真測試環境多采用Hardware-In-Loop(HIL)方式和分布式結構來分散繁重的計算任務,測試實時嵌入式軟件,進而驗證軟件可靠性[1].而如何保證分布式測試環境各節點間的實時通信則是一個難題[2].
近幾年高速網絡技術有Fibre Channel(FC)、Gigabit Ethernet(GigE)、反射內存網等,而反射內存網因用硬件實現通信、傳輸延遲確定、移植性強等優點,成為解決分布式測試環境節點間的實時通信問題的一種行之有效的方法.關于反射內存網的研究主要集中于協議設計[3-8]及理論研究[9-10]兩方面.協議設計在功能實現上可分為兩類:一類實現了支持一定程度異步、周期通訊模式的通訊協議,但它們都與應用綁定,不能靈活支持系統中不同種類的復雜通信,離開應用,協議需重新實現,缺乏通用性[3-6],如文獻[4]為解決周期同步和通信問題進行了設計,協議建立連接后,通訊雙方在約定好的位置傳輸某種確定的數據如同步數據,傳輸模式不能配置并伴隨整個系統運行過程;另一類雖然實現了一定的通用性,但只支持異步通信,缺乏特殊的優先級機制,也不支持周期通訊[7-8].理論研究主要基于一定的計算模型計算實時網絡的開銷[9-10].通過分析,現有基于反射內存網的相關協議設計,都不能滿足本文分布式測試系統的通用通信要求.
本文研究并利用反射內存網絡SCRAMNet設計一種能實現周期和異步通訊的、通用性較強的實時通訊協議,并給出了較為完善的系統開銷算法,以解決分布式測試環境節點間的實時通信問題.
在分布式測試環境中,測試環境結構分為兩層:測試開發層和測試執行層[1],見圖1.測試執行層存在原子事務、時鐘同步、任務同步、通信等問題.原子事務的解決主要靠在各節點設置事務協調者,使之維護本地日志,并負責啟動、分派、結束事務的執行,各事務協調者遵循一定協議通信[2,11],如各節點對測試開始、結束的一致響應.其它問題與原子事務類似,靠節點按即定算法周期或異步協作.節點間任何通信都要借助網絡完成,通訊類型多,實時性高,且處理上有緩急之分.有的任務如仿真任務隨待測系統不同而變化,因此還要求通訊有一定的配置靈活性.這就需要一個專門的實時通信層來適應節點間的通訊要求.
綜合以上分析,為解決分布式測試系統的通信問題,需要基于實時網絡為實時通信層設計一種通用的實時通訊協議,滿足諸多任務的協作、通信.

圖1 分布嵌入式仿真軟件測試環境結構
反射內存網是實時性要求較高的專用通訊網絡,它的工作原理[12]是各實時節點有反射內存卡,主機內存映射到各卡的獨立局部內存,局部內存映射到全局網絡內存,使各卡邏輯上共用一段地址.各節點將數據寫入主機內存同時也寫入所有其他各卡內存.全局內存對所有節點都可見,從而實現節點間數據通訊.
經需求分析知,分布式測試系統中既有較多周期通訊,又有靈活異步通訊需求,對異步通訊,不但強調實時性,某些類型消息還應優先處理,如測試指令消息應先于數據消息接收.本文基于SCRAMNet實現了一種支持周期和異步數據傳輸的協議,異步傳輸基于消息和優先級機制,周期傳輸基于數據流機制,稱實現為Message-Stream Test Protocol(MSTP).
本協議的設計目的及特點主要有:
1)能夠實現測試系統任務間的異步通訊傳輸原語,發送消息,查詢消息,接收消息;
2)允許兩任務間異步通訊有一定持久性,即通過合理分配內存,允許發送多條消息,接收與發送順序一致;
3)允許異步通訊有優先級機制,使某類通信能夠被優先處理;
4)能夠實現任務間的周期性通訊,且不同的協議配置,傳輸不同的周期數據.
內存布局解決的問題是如何為MSTP進行內存分配,使協議對用戶透明.
根據反射內存網的廣播特點,同一內存區不能被多個用戶同時寫操作,如同時寫則必須實現加鎖機制,而加鎖會增加開銷,所以,協議的核心設計思想是為每個進程開辟一塊寫操作區域,全局只有此進程擁有寫操作權,即一塊內存區有且只能有1個寫操作者.設參加通訊的進程數為proc-num.
為實現上述思路,對內存進行訪問控制,將其分為2個區域:數據區和控制區.為實現異步通訊,為每個進程分配各自的數據區和控制區,數據區存放消息,控制區存放各消息對應的控制信息,見圖2.為實現任意兩進程間的周期通訊,分配1個全局的數據區和1個通訊登記區,見圖3.
異步通訊數據區由所屬進程管理并執行寫操作,當有異步消息發送時,發送進程申請并將消息寫入數據區內存,發送后,目的進程只能讀取消息.為實現優先級機制,消息數據區按頁(page)分配.當優先級不同的消息共存時,高優先級消息先被取走而導致在數據區產生外部內存碎片,為每個消息分配一定數量頁面可避免碎片產生.每條消息可分配多頁,呈鏈表結構,每頁頭部的頁指針指向下一頁.布局示意見圖2.
與消息數據區同屬發送進程的控制區劃分為3個子區域:消息描述區,已發送標記區(send),響應區(ack).每個進程最多發送某一固定數量的消息,記為msg-num.每個消息對應1個消息描述區,分別表示所屬進程的從第1到第msgnum個消息的位置和屬性信息,包括首頁(firstpage),長度,發送序號,類型,優先級等.首頁記錄起始頁號.長度表示消息字節數.另外,控制區還各含有proc-num-1個send標記和ack標記,每個標記有msg-num個位.每個send標記代表源進程向目的進程發送的消息序列,自左至右的位序號對應了消息序號,代表源進程是否向目的進程發送消息,同理,ack標記則代表消息是否已被目的進程接收.消息描述區、send區、ack區,同消息數據區一樣,在協議初始化后,大小位置都固定不變.

圖2 MSTP異步通訊內存布局

圖3 MSTP周期通訊內存布局
協議描述規定了用戶如何使用MSTP及其實現的原理.對異步通信,MSTP要求明確所有參與通信的進程數量.每個進程對應1個邏輯地址,即在進程集中的編號.
API定義如下:
1)mstp-asyn-init(int proc-logic,int procnum),異步通訊初始化.參數分別為異步進程邏輯地址和異步進程數.返回指針struct mstp*,以后進程proc-logic將用此指針收發消息.初始化指針包括了進程邏輯地址,消息數據區和控制區地址及通訊狀態等信息;
mstp-perd-init(),周期通訊協議初始化;
mstp-perd-regist(int id,struct reg* info),登記1個通訊區,info包括通訊標識、周期等信息.
2)mstp-asyn-send(struct mstp*,char* buf,int len,int dest,short msg-type,short priority);向dest進程發送緩沖區buf內的len字節的數據,msg-type是用戶定義的消息類型.默認為最低優先級;
mstp-perd-send(int id,char* buf,int size);寫數據流buf到通訊標識id.
3)mstp-asyn-inquiry(struct mstp* this,int source);查詢是否有從source發送至this的消息,若有,返回進程邏輯地址,反之 -1;若source為-1,查詢是否有從所有任務發送至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字節消息至buf.先取得高優先級的消息,同優先級消息按發送順序取得.
mstp-perd-recv(int id,char* buf);讀數據流.
源進程向目的進程發送異步消息時,協議內部動作:1)按消息大小申請空閑內存區,得到1個或多個內存頁,根據頁號為每頁的指針頭賦值; 2)將數據拷貝至內存數據區;3)根據目的進程的send標記和ack標記,計算出消息緩沖區號,根據通訊狀態得出消息發送序號;4)將新的send標記和消息描述信息寫入控制區.發送端協議自動計算消息序號.發送端節點維護其對應控制區信息.
進程接收源進程發來的異步消息時,協議動作:1)根據源進程的send標記和ack標記,得到未接收消息列表;2)讀取消息列表相應描述區信息,根據優先級和發送序號,得出應讀消息號;3)將消息讀出;4)置ack標記.
由于本地內存操作比讀寫反射內存快,所以協議內部的實現應盡可能減少反射內存讀寫.可利用狀態信息實現.
周期通訊的關鍵在于通訊登記表的建立.雙方經過通訊標識確立通訊關系,協議負責為通訊雙方在數據區維護內存資源.在通訊配置建立時,發送方協議通過分布式互斥算法向登記區增加記錄,然后通過異步消息通知目的方獲取記錄項.通訊過程中,為保證實時性能,協議不允許改變登記表.
實現MSTP需確定如下參數:異步通訊進程個數proc-num,每個進程發送最大消息數msgnum,每個進程消息數據區長度data-area-len,消息數據區最小內存單元page-size,最小內存單元指針頭 page-head,消息描述區 data-descsize,周期通訊連接數perd-num,登記表項大小reg-size.優先級數、消息類型、周期通訊數據區大小perd-data-size根據應用確定.確定參數后,協議實現異步消息通訊需要的實時網絡內存為

實現周期通訊登記表需要的內存為

本文在測試環境中實現了MSTP:異步通訊進程數32,每進程數據區1 M,最大消息數64,最小內存單元48 B,指針頭4 B,消息描述區16 B,優先級別10級,最高0級.周期通訊最大連接數300,登記表項24 B,數據區2 MB,計算得實際使用實時網絡內存35 691 800 B.
協議初始化后,為異步通訊每個進程分配的指針維護了指向數據區和控制區、狀態信息數據結構的指針.為避免頻繁訪問反射內存,狀態信息將最近一次操作反射內存的數據緩存至其中,包括消息數據區內存緩存、發送標記、序號、已探測到但還未接收的消息等.發送和接收進程根據send標記和相應ack標記是否相等判斷此消息號是否在已發送隊列中,若相等,說明其空閑.
為檢驗MSTP設計效果,在分布式測試環境下設計了周期和異步通訊性能測試實驗.分別位于2個實時節點的多對仿真任務并發運行,對異步和周期通訊,依次對每種負載持續測試1 s以驗證是否有丟包或碰撞現象.異步消息優先級為0或5.周期通訊周期為1 ms.測試負載為4 B,64 B,…,16 kB,32 kB.為每種測試負載分配1對異步、周期任務,對比發送與接收的數據以判斷通訊正確性.測試設備為 Pentium4 2.8GHz PC機,OS VxWorks5.5,PCI 64 SCRAMNet,示波器.實驗數據如圖4所示.

圖4 MSTP測試數據
根據實驗作以下分析:1)MSTP的異步和周期模式在并發運行、不同數據量、多次測試情況下,無丟包現象,均正常工作,且未知所攜帶的數據含義,與應用分離;2)文獻[4]未給出性能測試數據,但應用系統的周期和異步協議工作在25~40 Hz間;文獻[8]使用異步協議實現仿真應用的周期和異步數據傳輸,測得3節點網絡系統的性能約為300 μs/800 B,320 μs/1600 B;文獻[5]實現用周期和異步方式傳輸HLA聯邦成員,性能在70 μs~30 ms之間.而本文提出的MSTP,在具備通用性的前提下,從圖4實驗數據可看出也具有強實時特性,滿足大多數應用的實時性要求; 3)異步通訊中優先級高的消息總是先于低的被接收;4)傳輸延遲大小受數據包大小影響很大,因此要獲得強實時性,需盡可能減小每次通訊的數據量.
實驗結論:MSTP通用性設計可行,較已有設計有更廣適用范圍,且實時性強,可靠性高,能夠基于其解決分布式測試環境的各種協議實現問題.
文獻[10]采用估算法設計了1個專用于反射內存網絡的根據各節點的訪問次數開銷計算系統總開銷的計算模型,本文進一步完善文獻[10]中關鍵量的算法,得到更為精確的系統總開銷算式.
文獻[10]假設節點i各進程內存區大小未知,且各進程讀/寫內存次數比率同為β(i),所以在計算總開銷時采用估算法,設i所有進程每次讀寫操作時訪問i的全部內存區S(i).而在本文及實際應用中[3-6],文獻[10]的假設會帶來網絡訪問開銷的增加和效率的降低,相反,節點i的各進程j一般不共享使用S(i),而是使用各自內存s(j),內存相互獨立、大小不同,且讀 /寫次數比率不同,記為β(j),以提高網絡內存訪問效率.因而該估算法會因缺乏準確性而帶來誤差,本文綜合以上因素,給出更為符合實際的計算模型改進算法.計算原理及關鍵量的改進算法如下.
規定一個時間段Tlcm,在Tlcm內所有訪問反射內存的進程必須至少執行1次,且假定有R個節點,節點i上有j個進程,各進程執行時間τ(j)已知.這樣,

式中:c(i)為i節點的內存區訪問開銷;N(i,j)為平均每個進程j對單位數據的訪問次數;S(i)為節點i各進程內進程內存和.各節點內存訪問開銷和為系統總開銷.
根據節點i上各進程的執行時間τ(j)等量,求得i的平均單元數據訪問時間Δ(i):

其中φ(j)為進程j在Tlcm內執行次數;τ(j)為j執行時間;s(j)為j內存數量;β(j)為j讀/寫次數比率.
加入節點i各進程j執行時間權重,計算j在Tlcm間單元數據訪問次數N(i,j)為

節點i的單元數據訪問次數總開銷C(i)為各進程j對單元數據訪問開銷的平均值,即

求得C(i)后,將C(i)組成矩陣C,各節點i進程數組成K,各節點進程實際內存分配組成X,則系統總開銷 =[KC]TX.
另外,系數矩陣A、X、內存限制矩陣b組成限制條件AX≤b.各矩陣表示如下.


可從統計角度將改進后的系統總訪問開銷的算式用于判斷各節點上各任務的內存分配合理與否的量化評估.可使用MATLAB“LINPROG”等工具對其進行分析,以最小化總訪問開銷[10].關于計算模型的說明及非關鍵量的計算參見文獻[10].
本文設計了一種基于反射內存網的支持異步、周期性數據通訊的實時傳輸協議MSTP,解決分布式測試環境的復雜通訊問題,較已有設計通用性強.并基于理論計算模型,給出了計算系統開銷的更為完善的算法.實驗表明本STP能夠滿足分布式測試平臺實時通信、時鐘同步、任務同步等需要.體現了較好的通用性、可配置性和集成性,對基于反射內存網的應用協議設計人員具有重要的參考價值.下一步將基于MSTP設計分布式測試平臺的相應算法開展工作.
[1]劉斌,高小鵬,陸民燕,等.嵌入式軟件可靠性仿真測試系統研究[J].北京航空航天大學學報,2000,26 (4):490-493.
[2]ANDREW S T.分布式系統原理與泛型[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和反射內存網的半實物衛星對抗仿真系統[J].系統仿真學報,2008,18(6): 1520-1523.
[6]蒲源,王仕成.多網絡半實物實時仿真平臺研究[J].系統仿真學報,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.操作系統概念[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.