歐陽軍 蔡志明 王希敏
(海軍工程大學電子工程學院 武漢 430033)
隨著Internet技術的廣泛應用和計算機技術的飛速發展,各種應用系統的體系結構呈現出以網絡為中心的趨勢,這對通信的實時性、動態靈活性提出了更高要求,同時要求分布式系統各參與者間采用一種具有松散耦合特性和QoS(Quality of Service)支持的靈活通信模型和交互機制。因此需一種能為實時系統應用開發者提供高級抽象接口的同時還能有效合理地控制部署實時系統所需的QoS策略的系統要來滿足分布式實時應用需求。
在 CORBA[1]基礎上制定的 DDS[2](Data Distribution Service)數據分發服務規范解決了分布式實時系統“在正確的時間、正確的位置獲取正確的數據”的需求,該規范描述了分布式系統中數據發布、傳遞和接收的接口和行為,定義了以數據為中心的發布-訂閱(Data Centric Publish Subscriber,DCPS)機制,提供了一個與平臺無關的數據模型。而DDS信息分發中間件是一種輕便的、能夠提供實時信息傳送的中間件技術。目前,成熟的DDS中間件產品有多種,其中由PrismTech公司開發實現的OpenSplice DDS,實現了完整的DDS規范(包括DCPS和DLRL)。針對分布式系統的需求,本文將著重對OpenSplice DDS中間件的實時和吞吐性能進行第三方測試。
OpenSplice DDS獨立于操作系統和編程語言,極大地方便了不同系統之間的通訊。系統設計者通過可擴展的傳輸框架結構連接多個物理端點。傳輸方式包括以太網絡、共享內存或其他連接方式。具有多種服務質量策略(QoS)參數可供調整,方便設計者調整其應用程序達到性能和資源使用的最佳組合。OpenSplice DDS是位于網絡協議棧最上層的軟件,它屏蔽底層網絡代碼,代之以通用的、基于標準的應用程序接口(API)。通過API提供易于理解的基于發布/訂閱的通訊模式。這種模式定義了兩種基本的角色:
·發布者:創建數據,給數據命名(稱為主題Topic),并將數據分發給感興趣的訂閱者;
·訂閱者:注冊感興趣的主題,并在主題數據有變化時接收數據。
任意一個節點可以成為發布者、訂閱者或兩者皆是,并可擁有多個主題。DDS處理所有的網絡輸入輸出,管理可靠和透明的傳輸:消息尋址、數據組合和分散、流控制、重試等等。所有這些都不需要應用程序干預,大大降低了用戶的工作量,用戶可以把精力花在應用程序的設計等。
OpenSplice DDS為設計者提供了運行平臺和DDS開發調試工具[3],前者用于設計者編程實現分布式系統的通訊,后者用于調試分布式通訊中出現的問題,這些工具及其所具有的功能分別如下:
·IDL Preprocessor[4]:產生類型指定的主題,類型指定的數據寫入者和讀取者。
·OpenSplice Tuner[5]:用于檢測和控制 DDS域。
·OpenSplice Configurator:可簡化服務配置過程。
·OpenSplice DDS Power Tools[6]:為設計者提供了操作簡便的、可動態圖形化建模的環境。
OpenSplice DDS實現了DDS規范的兩層,分別是數據本地重構層DLRL[7]和以數據為中心的發布-訂閱層 DCPS[8]。DLRL層將 DCPS層提供的服務進行了抽象,在DLRL層建立了與底層服務的映射關系,DCPS層則是DDS的核心和基礎,提供了通信的基本服務。
DCPS層建立了一個全局數據空間的概念,發布者和訂閱者在該全局空間中分別發布和訂閱自己需要的數據類型,通過中間件處理后,再進行數據傳送。DCPS層將用戶對資源的需求情況和資源的可用情況都轉化為服務質量QoS參數。
每個發布者都有一個與之關聯的數據寫入者。當數據通過適當的數據寫入者與發布者通信時,發布者負責發布數據寫入者描述的數據類型的數據(發布者將根據它自己的QoS來完成,或根據相應數據寫入者的QoS)。當發布者與數據寫入者關聯時就形成了一個發布。
訂閱者負責對發布的數據進行接收并使數據能被接收應用程序(根據訂閱者的QoS)所使用。它能接收并分發不同類型的數據。為了訪問被接收到的數據,應用程序必須使用和訂閱者相關聯的數據閱讀者。當訂閱者與數據閱讀者關聯后就形成了訂閱。
訂閱獲取信息有兩種模式:異步方式和同步方式。異步模式下,DDS提供監聽(Listener)接口,當數據發布或狀態改變時,中間件通知Listener接口,Listener通過相應的回調(callback)獲取信息。同步模式下,應用調用 WaitSet阻塞調用線程,一旦與WaitSet關聯的條件(如readcondition、querycondition、statuscondition、guardcondition)之一被滿足時停止阻塞,應用程序就可通過數據讀取者獲取最新的數據信息。
主題用于聯系發布和訂閱。發布方在中間件上發布一個主題后,訂閱方根據主題來查閱發布方發布的信息。中間件負責檢查發布方發布的主題是否滿足訂閱方的要求,并檢查其QoS策略是否兼容。訂閱方對相關服務質量策略指定一個申請值,而發布方則對該服務質量策略指定一個供應值,系統確定發布方的供應值和訂閱方的申請值是否一致,如果雙方QoS策略一致,則通信正常建立;如果不一致,則系統服務不會在這兩個實體對象之間建立通信,并會通知發送方和接收方。
開發OpenSplice DDS應用有幾個主要步驟:從Prismtech公司下載評估版的相關軟件;安裝OpenSplice DDS和Power Tools;運行守護程序,通過Power Tools設計發布/訂閱應用程序。
Power Tools為設計者提供了便于操作、可圖形化建模的環境,該工具具有開發指導、集成簡單、實時檢查錯誤、自動連接生成代碼的功能。
利用Power Tools進行應用開發的具體步驟如下:
s1:打開Create an OpenSplice Project向導;
s2:在Project Name文本框內輸入工程名,可用默認路徑也可自定義路徑,再點擊Finish;
s3:添加DDS應用所需的DDS實體,Power Tools組件和資源;
s4:設置DDS實體的屬性和所需的QoS策略值;
s5:創建Diagram組件,通過Diagram Editor可創建新的DDS實體并可將相應的DDS實體連接起來,進行圖形化建模;
s6:對建立好的OpenSplice工程產生DDS源代碼;
s7:使用相應的編譯器對應用進行編譯,如VS2005、VS2008等。
Power Tools為初學者提供教學用開發示例:聊天室應用[9],并介紹了具體的操作步驟和源代碼,如圖1所示。

圖1 聊天室應用示例
對源代碼進行編譯后,運行效果如圖2所示。

圖2 聊天室運行效果圖
基于OpenSplice DDS的發布/訂閱系統性能無法通過理論計算得到,因此需實驗測量,才能驗證系統性能是否滿足應用需求。
選取端到端時延和吞吐量這兩個性能指標進行測試[10],時延構成通常為處理時延、傳輸時延、傳播時延和排隊時延等,實際為應用層時延;吞吐量亦為應用層的吞吐量。
DDS的點到點傳播特性決定了網絡拓撲結構的簡單性,只需在網絡上的兩臺計算機就可建立發布訂閱系統,因此實驗可在兩臺計算機上完成,計算機配置如表1所示。

表1 測試環境軟硬件配置
本文采用單端計時的方法測試往返時延,取往返時延值的一半為端到端時延值。采用的測試模型如圖3,每一端既是發布者又是訂閱者,訂閱者端采用WaitSet阻塞方式獲取發布的數據信息,假設兩端分別為A和B,測試的過程如下:

圖3 端到端往返時延測試模型
B端先作為訂閱者被阻塞,等待接收事件,A端作為發布者發布事件,B先于A運行,即事件接收在事件發送之前。當A發送完畢一個信息,立即轉換為訂閱者并阻塞;同時B接收完畢一個事件,立即轉換為發布者,并發送事件。在B發送事件前,A已經被阻塞并準備接收事件,因此同樣B發送事件后,A將接收到事件。這樣,相當于同樣的發布/訂閱事件發生兩次,端到端的時延計算公式為:

吞吐量采用訂閱者端計時的方式,測試模型如圖4所示。一端為發布者端,另一端為訂閱者端,訂閱者端采用WaitSet阻塞方式獲取事件,發布者端不斷發布事件,訂閱者端從接收事件時開始計時,直到接收10000次事件后停止計時。這樣,吞吐量計算公式為:

Buffer為事件大小,count為計數次數。

圖4 吞吐量測試模型

圖5 端到端時延

圖6 不同事件大小下的吞吐量
時延測試時事件大小固定為16384B,共進行10個批次,每批次事件被往返發送10000次,測試結果包括平均值、最大值和最小值。如圖5所示,平均值在4000μs附近擺動,最大值為18924.5μs,最小值為1840μs。
吞吐量測試時按照事件大小分別進行測量:128B,256B,512B,1024B,4096B,8192B,16384B,測試結果如圖6所示,可見吞吐量隨著事件的增大呈近似線性增加趨勢。
OpenSplice DDS是DDS規范的一個實現,采用發布/訂閱通信機制,建立全局數據空間,根據主題進行點對點數據傳送,有效地減少了不必要的網絡流量,通過提供應用級QoS,使用戶對發布/訂閱行為可控、可見,并且具有應用規定語義下的可靠性。本文通過實例對實時和吞吐性能進行了測試,今后的工作是深入研究其提供的QoS策略及DLRL層,并逐步應用到分布式實時嵌入式系統(DRE)中。
[1]OMG.Real-time CORBA Specification[R].Version1.2,Jan.2005
[2]OMG.Data Distribution Service for Real-time Systems Specification[R].Version1.1,Nov.2005
[3]Prismtech.OpenSplice DDS Version 5.x Getting Started Guide[R].Doc Issue 39,8October 2010:5~6
[4]Prismtech.OpenSplice DDS Version 5.x IDL Pre-processor Guide[R].Doc Issue 22,25October 2010
[5]Prismtech.OpenSplice DDS Version 5.x Tuner Guide[R].Doc Issue 21,11May 2010
[6]Prismtech.OpenSplice DDS Version 2.2DDS Power Tools[R].Doc Issue 38,22September 2009:71~94
[7]Prismtech.OpenSplice DDS Version 5.x DLRL Code Generator Guide[R].Doc Issue 14,11May 2010
[8]Prismtech.OpenSplice DDS Version 5.x C Reference Guide[R].Doc Issue 30,6January 2011
[9]Prismtech.OpenSplice DDS Version 5.x C Tutorial Guide[R].Doc Issue 23,11May 2010
[10]胡鈺銑,王希敏.基于實時CORBA與DDS的發布/訂閱系統的設計與實現[D].武漢:海軍工程大學碩士學位論文,2007:78~87