王張平,杜承烈,周彥菲
(西北工業大學 計算機學院,陜西 西安 710129)
在分布式環境下進行一些仿真應用時,常常要進行數據計算、顯示、交換、存儲等多項任務。這需要將整個系統的任務分布到若干節點上,每個節點完成各自的任務。而每個子節點在完成其子任務的每一步計算之后,在開始下一步仿真運算之前都需要和其他節點進行數據的同步和交互,因為它需要其他節點提供的一系列參數在上一時刻的最新值,同時它也要為其他節點提供一些參數的最新值,這就必須要找到一種有效的共享內存機制[1]。
以太網下進行仿真實驗時,目前常用的解決方案是采用一種虛擬共享內存中間件。它有效地實現了數據的透明訪問和交換。在網絡負載不是很大的情況下,具有一定的實時性。但在高網絡負載的情況下,很卻存在著仿真交互數據的刷新延遲,實時性能很差等缺點,限制了仿真系統性能的提高。為了適應現代大型分布式系統的要求,特別是在分布式實時系統中,當網絡負載很大的情況下對系統實時性的需求,提出了一種基于主題的VSM中間件的改進方案。此方案采用了數據的發布/訂閱通信模式,并結合組播技術實現了IP網絡中一點到多點的高效數據傳送,能夠節約大量網絡帶寬、降低了網絡負載。通過引入該機制,優化了網絡通信,提高了VSM中間件的在高網絡負載的情況下的實時性和穩定性。
VSM中間件是結合RPC和DSM(Distributed Shared Memory)的設計思想,將方法和內存都本地化的分布式中間件。VSM中間件是位于平臺操作系統之上、用戶仿真應用程序之下的一組軟件,實現分布式仿真系統中的仿真任務的調度和仿真數據的透明交互,其核心是虛擬共享內存。其基本的結構示意圖如圖1所示。

圖1 VSM的結構示意圖Fig.1 Structure diagram of VSM
通常的設計是共享內存模塊作為網絡的基本單元與通信網絡相連,每個節點內存模塊的內容都是相同的。網絡上每個節點內存為“虛擬共享內存”,它含有網絡中所有用戶可共享的數據和信息,內存中的數據為網絡上所有相關節點內容拷貝的組合,并且內存中的內容可由當前節點計算機的值不斷地刷新,或者由網絡中其他節點不斷地刷新。所有虛擬共享內存數據的相對地址,對網絡中所有節點是相同的,實現的是邏輯上的共享內存[1-2]。每個共享內存的尺寸是由各客戶向服務器注冊時,由服務器分配的動態內存。具體地講就是根據所有客戶機上已經注冊的模塊數目,以及每個模塊實際所需要內存大小來確定的。每個模塊所需求的共享內存區用來存放該模塊中的狀態、變量等參數。由于每個模塊實際變量數目可能不一樣,因此它所需求的共享內存大小也就可能不一樣。
圖2為虛擬共享內存中間件的工作原理示意圖。假設仿真實驗環境有3個節點,每個節點都開辟了同樣大小的共享內存區,當節點A的仿真模塊向某個偏移地址寫入數據Data1時,將即時刷新其他節點中相同偏移地址的的數據。此時節點A的進程會通過廣播的方式將數據映射到其他節點相同偏移地址的共享內存區上。那么節點B和節點C就會讀到數據Data1了。用戶只需關心讀寫操作,底層數據更新由系統自動完成,從而滿足了分布式環境下仿真系統對數據透明交互的需求。

圖2 VSM工作原理示意圖Fig.2 Principle diagram of VSM
VSM中間件分為3個層次:網絡接口層、系統管理層和用戶接口層。網絡接口層負責網絡數據的傳輸并刷新各節點共享內存。系統管理層主要負責仿真任務調度及VSM共享內存的管理。用戶接口層為用戶提供了與內存模塊交互的接口,方便用戶進行讀寫操作[3]。
1)實時性 VSM中間件通過將內存本地化,實現了虛擬共享內存。這種通過空間上的開銷可以達到減少網絡訪問的時間和次數。在一定的仿真環境下,特別是在網絡負載不是很大的情況下具有一定實時性。
2)透明性 VSM中間件使得應用程序不用關心網絡傳輸,對內存的讀寫操作與常規的內存讀寫操作沒有區別,數據的網絡傳輸對用戶而言是透明的。
3)可擴展性和可移植性 由于用戶接口與網絡接口的剝離,當網絡硬件或網絡協議發生變化時,無需更改用戶接口,只需擴展網絡接口,這就增強了VSM對異構網絡的可擴展性和用戶應用程序的可移植性。
VSM的這些優點使VSM能夠為分布仿真試驗提供實時透明的數據交互,但是VSM的設計特點同樣面臨一些的問題。
1)高負載下的實時性 由于VSM中的一個節點的數據更新,底層會自動廣播到其他所有節點的數據,導致所有數據節點的更新。這樣在一個具有n個仿真節點的VSM分布仿真試驗中,更新m字節數據 ,在網絡上將需要傳輸n×m個字節,造成了大量額外開銷。使分布仿真試驗在負載較高的情況下網絡傳輸的實時性難以得到保證。
2)缺乏對大數據的支持 由于VSM網絡傳輸代價很高,當進行大數據的網絡傳輸時,不僅會增加網絡的負載,而且會導致VSM對大數據的刷新延遲,影響VSM系統的實時性能。VSM對總內存大小的支持一般在幾百KB內,只能支持一些中小型仿真系統。
VSM的這些問題,都有一個共同的原因,就是數據更新時,VSM網絡傳輸的代價太高。為了降低VSM網絡傳輸代價,同時保持VSM實時透明的數據交互特性,引入了基于主題的發布訂閱/訂閱通信機制。
如圖2所示,如果節點C僅訂購節點A上的數據Data1,但是根據VSM全局內存的設計思想。當節點A上的數據Data2更新后,那么節點C上的數據Data2也會得到數據更新,但是節點C根本不需要數據Data2。在使用VSM在仿真測試的應用中發現,并不是所有仿真節點對所有共享內存都有需求。比如顯示節點需要計算節點的數據,但計算節點并不需要顯示節點的數據,在VSM中間件的數據交互過程中,仍然會將顯示節點數據更新到計算節點,這就造成了不必要的網絡傳輸開銷,影響了數據交互的實時性。統計發現,在傳統的分布試驗仿真系統中,這種不必要的網絡傳輸開銷,占總開銷的比例在33%至87%之間,具體比例取決于仿真系統中各個仿真節點間的數據依賴關系。
基于上述情況,采用了基于主題的VSM中間件的構思。主題通常是字符串,它是用來表示某個特定數據的代號或者數據名稱。每個節點上的某個主題所代表的數據只可能被對該主題感興趣的訂閱者所接收[4-6]。在基于主題的VSM中表現為節點數據的寫操作只會導致對此數據感興趣節點數據區的刷新。對沒有訂閱此主題的節點,VSM的數據是不會刷新的。這就減少了不必要的網絡帶寬的浪費,降低了網絡負載,提高了數據透明交互的實時性。
和傳統的VSM中間件不同,基于主題的VSM中間件采用了數據的發布/訂閱通信模式。數據的發布訂閱關系指的是仿真實驗中節點間的數據讀寫關系。基于主題的VSM中間件采用的是服務器/客戶端的工作模式,每個節點在仿真實驗前需要向服務器注冊本節點IP地址,節點自身的主題以及節點感興趣的主題。服務器根據節點間的數據依賴關系分配組播地址,客戶端進程讀取數據時,如果數據是其他節點上的數據,就加入該數據所分配的組播地址。當數據得到更新后,相應的組內節點上所訂購的數據也就得到了更新。基于主題的VSM中間件的總體設計思想是:不改變用戶接口層,通過修改系統管理層與網絡接口層實現發布訂閱機制;系統管理層上負責管理發布/訂閱表,網絡接口負責優化網絡傳輸。
2.2.1 虛擬共享內存
為了維護VSM中間件的原有特性,并且能夠減少不必要的數據發送所帶來的網絡資源浪費,在基于主題的VSM中間件中每個仿真節點依然都具有一個全局共享內存,這個全局內存的編址方式也是相同的,但是這個內存的內容不再是網絡上所有節點數據內容拷貝的組合。全局內存中只有仿真節點訂閱的數據所對應的內存才有可用值,只有訂閱了的數據節點才能讀。
2.2.2 數據的發布與訂閱
在基于主題的VSM中間件中,每個節點都有個XML數據文件,文件中描述了本節點數據主題的發布和訂閱信息。系統初始化時,每個節點首先通過解析XML文件形成發布/訂閱表,此表由系統管理層來維護。隨后節點進程根據系統管理層上的發布/訂閱表向服務器注冊本節點的信息,包括有節點IP地址,節點自身的主題以及節點所訂購的數據主題。服務器在接收到各節點的注冊信息后,首先判斷是否有相同的主題,以確保主題的唯一性,然后根據數據主題的訂購關系為被訂購的主題統一分配組播地址,并通過廣播的方式分發到各個節點上。在收到服務器廣播信息后,節點系統管理層向自身的發布/訂閱表填寫主題所分配的組播地址、端口等信息,并分配VSM共享內存和創建共享內存表。節點的注冊流程如圖3所示。

圖3 注冊流程圖Fig.3 Flow chart of register
2.2.3 網絡接口的實現
網絡接口的功能主要負責數據的網絡傳輸,在VSM仿真系統執行寫操作時,根據數據主題查找系統管理層中的共享內存表,找到對應數據在虛擬共享內存中的相對地址,從而向對應內存寫入數據,在寫操作完成后立即啟動數據發送線程對其他節點進行數據組播。數據發送線程完成了網絡接口發送模塊的功能,當數據發送線程收到通知后,通過查找系統管理層中的發布/訂閱表獲得數據主題的組播地址,以該組播地址將數據組播出去。如若獲取該數據主題的組播地址失敗,則組播地址不存在,說明此數據主題沒有被任何節點訂購,數據發送線程結束。對于用戶而言,寫數據與普通寫操作無異,數據的發送由數據發送線程自動完成,用戶無需關心。數據發送流程如圖4所示。

圖4 數據發送線程流程圖Fig.4 Flow chart of sending data
在數據訂閱者端,當數據要執行讀操作時,由于在節點向服務器注冊完畢后,訂閱者通過遍歷系統管理層中的發布/訂閱表,找到所感興趣主題的組播地址,并加入該組播地址,隨后啟動數據接收線程,數據接收線程只會接收到本節點感興趣的主題數據。對用戶而言,讀操作和普通讀操作無異,數據的更新由底層數據接收線程自動完成,無需用戶關心。數據接收流程如圖5所示。

圖5 數據接收線程流程圖Fig.5 The flow chart of receiving data
在實現過程中,組播地址采用統一的端口號,這樣節點在加入組播組時,只需要填充相應的組播IP地址[7],因此采用單線程就可以實現數據的接收。
從2.2中可以看出,改進后VSM中間件并不影響用戶寫操作,只是在數據的網絡傳輸過程中增加了一個發布表的查找過程。在仿真應用過程中,一般都是通過邏輯時間或者物理時間推進來運行的,數據的讀操作一般發生在下一步時間推進的運行過程中。因此對仿真性能影響并不大[8-10]。最重要的是,基于主題的VSM中間件的發布/訂閱功能,實現了數據有選擇的發送和接收,在仿真節點一定的情況下,降低了仿真數據的網絡傳輸量,保證了共享內存中數據更新的穩定性,從而提高了數據交互的實時性能。
此外改進后的VSM中間件對原VSM透明的數據交互等特性沒有任何影響。原VSM中間件上的應用程序,只需增加調用數據的發布/訂閱接口,便可直接移植到新VSM平臺上。可以看出很好了保持了原VSM的優點。
從上述分析可以看出,基于主題的VSM中間件具有以下特性:
1)提高了實時性能 使用組播技術優化了網絡傳輸,同時采用基于主題的發布/訂閱通信機制進一步降低了網絡通信量,并且所有節點的數據更新時間與網絡上實際連接的節點數量無關。這就增加了VSM通信的穩定性,提高了VSM的實時性能。
2)支持大數據的網絡傳輸 和傳統的VSM中間件相比,在滿足一定實時性要求下,VSM共享內存區中最大數據塊能夠由之前的數百kb增加到10 Mb左右,這樣便能支持一些大的數據傳輸。
為了驗證該方案的實際性能,搭建了3臺節點計算機的分布式環境。在以太網下,網絡帶寬為100 Mb/s交換機為TP-Link TL-SL1226,3臺計算機內存均為1 Gb,CPU為Intel Core雙核。操作系統為Windows XP。對大小不同的數據包的傳輸延時和丟包情況進行了記錄。其中丟包率測試時發送數據包為100 000次。測試結果如表1所示。為了進行性能對比,在同樣的資源環境下,使用傳統的VSM中間件進行了同樣的測試,測試結果如表2所示。

表1 基于主題的系統性能測試Tab.1 The perform ance test of topic-based system

表2 原系統性能測試Tab.2 The performance test of traditional system
由于數據的發布/訂閱關系是通過解析XML文件[11]而形成的,這有別于傳統的發布/訂閱關系,不能從真正意義上來支持動態的數據發布/訂閱功能。因此,為了支持動態的數據發布/訂閱功能,允許所有的節點進程在運行期可與服務器建立一個新的連接。數據的發送方將自身所要發送的主題發布到服務器上,服務器首先對系統中的發布/訂閱表進行查閱,如果該主題在系統中還不存在,則服務器負責為該主題分配一個組播地址,并且將該組播地址返回給該節點進程;如果發布/訂閱表中已經存在該主題或者存在對該主題的訂閱,則服務器將已經分配的對應于該主題的組播地址返回給節點進程。數據的接收方將自身所需要的主題發送到服務器。服務器對系統中的發布/訂閱表進行查詢,如果存在該主題,則將主題所對應的組播地址返回給接收節點進程,否則為該主題分配一個新的組播地址,并將該組播地址返回給節點進程。服務器在返回各節點組播地址后,節點都會更新自身的發布訂閱表。
另外,系統中采用的是UDP來組播數據,由于受到底層發送緩沖區大小的限制,一個完整的大數據塊在發送過程會出現數據的丟失或者無法發送。為了支持更大數據塊的傳輸,需要再有自定義協議模塊的設計。
基于主題的發布/訂閱通信模式在通信領域占有重要的地位,它適應了計算機向實時、分布式發展的趨勢。通過將基于主題的發布訂閱模式引入分布式仿真平臺的VSM中,一定程度上降低了網絡通信的負載,增強了VSM數據通信的實時性,從而滿足分布式仿真逐漸增強實時性需求,以適應計算機仿真領域的不斷發展。
[1]吳成富,歐峰,陳懷民,等.基于組播技術的共享內存網絡設計與實現[J].測控技術,2009,28(10):55-58.WU Cheng-fu,OU Feng,CHEN Huai-min,et al.Design and impletation of VSM network based on multicast[J].Measurement&Control,2009,28(10):55-58.
[2]常青,杜承烈.基于虛擬共享內存中的分布式仿真平臺構架方法研究[J].測控技術,2001,20(3):50-52.CHANG Qing,DU Cheng-lie.Research on the method of distributed simulation platform architecture based on the Virtual shared memory[J].Measurement&Control,2001,20(3):50-52.
[3]王瓊,杜承烈.基于DSM技術的VSM中間件的研究與開發[J].計算機應用研究,2005(12):201-203.WANG Qiong,DU Cheng-lie.Research and development of VSM middleware based on DSM technology[J].Application Reaearch Of Computers,2005(12):201-203.
[4]苑洪亮.基于內容的“發布/訂閱”若干關鍵技術研究[D].湖南:國防科技大學,2006.
[5]Pongthawornkamol,Nahrstedt,WANG Gui-jun.Probabilistic QoS modeling for reliability/timeliness prediction in distributed content-based publish/subscribe system over best-effort networks[C]//New York,NY,USA:ACM,2010,185-194.
[6]Eugster P,Felber P,Guerraoui R.The many faces of Publish/Subscribe[J].ACM Computing Survey,2003,35(2):114-131.
[7]斯蒂文斯.TCP/IP詳解,卷1:協議[M].范建華,譯.北京:機械工業出版社,2000.
[8]劉旭軍,馬躍,于東.發布/訂閱通信模式的實時性能分析與評估[J].計算機工程,2010,36(20):229-231.LIU Xu-jun,MA Yue,YU Dong.Analysis and evaluation on the real-time performance based on Publish/Subscribe communi-cation model[J].Computer Engineering,2010,36(20):229-231.
[9]伍智鋒,唐碩,杜承烈.基于共享內存機制的分布式飛行仿真研究[J].計算機仿真,2002, 19(6):18-21.WU Zhi-feng,TANG Shuo,DU Cheng-lie.Research on the distributed flight simulation based on the mechanism of VSM[J].Computer Simulation,2002,19(6):18-21.
[10]黃姝娟,杜承烈,尤濤.中間件技術實時性能的比較[J].計算機工程,2009,5(11):32-37.HUANG Zhu-juan,DU Cheng-lie,YOU-Tao.Comparison of real-time performance for the middleware technology[J].Computer Engineering,2009,5(11):32-37.
[11]劉雨瀟.基于SAX的XML數據解析技術分析研究[J].現代電子技術,2010(12):55-56,65.LIU Yu-xiao.Analysis and research of XML data analytical technique based on SAX[J].Modern Electronics Technique,2010(12):55-56,65.