呂 浩,劉文科
一種CORBA中間件通信時延性能優(yōu)化方法
呂 浩,劉文科
(中國電子科技集團公司第二十研究所,西安 710068)
CORBA是一種廣泛應(yīng)用于軟件無線電系統(tǒng)的中間件。為了滿足軟件無線電系統(tǒng)高實時性要求,本文提出基于oneway關(guān)鍵字的中間件通信時延性能優(yōu)化方法。利用該方法,通信時延降低近60%。
CORBA;軟件無線電;oneway;通信時延
在分布式互聯(lián)互通技術(shù)領(lǐng)域中,公共對象請求代理體系結(jié)構(gòu)(Common Object Request Broker Architecture,CORBA)中間件憑借著強大的跨語言、跨操作系統(tǒng)和跨異構(gòu)平臺的能力被廣泛應(yīng)用。隨著CORBA被SCA規(guī)范所采用,越來越多的軟件無線電研究者開始關(guān)注和研究CORBA,并且開始將CORBA的應(yīng)用領(lǐng)域擴展到軟件無線電系統(tǒng)中,然而軟件無線電系統(tǒng)具有很多不同于傳統(tǒng)的計算機系統(tǒng)的特點,包括嚴(yán)格的實時性要求和靈活的通信機制等[1]。因此,為了滿足高實時性的要求,降低中間件通信時延,提高傳輸效率顯得尤為重要。
本文提出一種基于oneway的中間件通信時延性能優(yōu)化方法,并以omniORB為例進行測試,結(jié)果表明該方法能夠大幅度降低CORBA中間件的通信時延。
CORBA[2]是對象管理組織(Object Management Group,OMG)提出的一種面向?qū)ο蟮闹虚g件標(biāo)準(zhǔn),能屏蔽底層硬件平臺和操作系統(tǒng)的差異性,實現(xiàn)分布式環(huán)境下客戶端與服務(wù)端的通信。

圖1 CORBA體系架構(gòu)
CORBA對象代理請求體系結(jié)構(gòu)如圖1所示,由對象請求代管者(Object Request Broker,ORB)核心及其接口、客戶端碼根(Stub)、服務(wù)器端框架(Skeleton)、動態(tài)調(diào)用接口(Dynamic Invocation Interface,DII)、動態(tài)框架接口(Dynamic Skeleton Interface,DSI)、接口庫(Interface Repository)、實現(xiàn)庫(Implementation Repository)和對象適配器(Object Adapter)等組成[3]。
(1)ORB核心
ORB是CORBA的核心部分,提供客戶端與對象實現(xiàn)之間透明通信的機制,它的基本任務(wù)是把客戶端的請求傳遞到被激活的對象實現(xiàn)中去。
(2)接口定義語言(Interface Description Language,IDL)和語言映射
IDL用來描述對象接口,定義對象通信的操作和數(shù)據(jù)類型。IDL的語法與C++類似,同時它也增加了一些支持分布式處理的關(guān)鍵字如in、out和inout等。一個IDL說明可以包含一個或多個接口,也可以包含模塊說明。
IDL語法是一種描述性語言而非一種具體實現(xiàn)語言,利用IDL語言進行應(yīng)用程序開發(fā)時,需要將IDL語言映射為具體的編程語言,包括C++和C。IDL語言映射是CORBA應(yīng)用程序開發(fā)的關(guān)鍵,它提供了CORBA中抽象概念和模型的具體實現(xiàn)方法。
(3)碼根(Stub)和框架(Skeleton)
碼根和框架都是由IDL文件編譯生成的,且特定的框架接受特定的、對某個接口的請求。因此,通過碼根和框架的調(diào)用被通稱為靜態(tài)調(diào)用。碼根的作用是代表客戶創(chuàng)建并發(fā)請求;框架的作用則是把請求交給CORBA對象實現(xiàn)。
(4)動態(tài)調(diào)用接口DII
提供動態(tài)調(diào)用和實現(xiàn)方式。在動態(tài)方式下,客戶端或?qū)ο髮崿F(xiàn)需要查詢由接口庫提供的相應(yīng)對象接口的描述信息。在使用DII時,用戶必須自定義請求信息,包括相應(yīng)的操作及有關(guān)參數(shù)等。
(5)對象適配器
根據(jù)CORBA規(guī)范的定義,對象適配器的功能主要是完成對象引用的生成與解釋、根據(jù)對象引用找到對應(yīng)的對象實現(xiàn)、對象與實現(xiàn)的激活和終止激活、對象實現(xiàn)的注冊等。
(6)接口庫
接口庫作為一個對象而存在。應(yīng)用程序可以像調(diào)用其他CORBA對象所提供的操作一樣,來調(diào)用接口庫的操作。接口庫允許應(yīng)用程序在運行時訪問OMG IDL類型系統(tǒng)。
(7)實現(xiàn)庫
實現(xiàn)庫存儲有關(guān)服務(wù)器的信息,如服務(wù)器的名字以及相關(guān)可執(zhí)行程序的路徑。它所完成的功能與接口庫類似,只不過它存儲的是對象實現(xiàn)的信息。
(8)通用對象請求代理間通信協(xié)議(General Inter-ORB Protocol,GIOP)
OMG定義了兩個ORB之間的通信協(xié)議,即GIOP協(xié)議[2]。GIOP規(guī)范包含以下兩個元素:
1)公共數(shù)據(jù)表示(Common Data Representation,CDR)
公共數(shù)據(jù)表示是一種傳送語法,將IDL定義的數(shù)據(jù)類型映射為二進制形式。所有的IDL數(shù)據(jù)類型都使用統(tǒng)一的CDR語法編碼,保證不同的ORB實現(xiàn)之間能夠通信。它描述了如何編碼/解碼操作中的數(shù)據(jù),以便所有可能的服務(wù)端都可以抽取參數(shù)并調(diào)用遠程操作,且數(shù)據(jù)交換不會產(chǎn)生多義性。
2)GIOP消息類型
GIOP定義8種消息類型:請求消息(Request)、應(yīng)答消息(Reply)、取消請求(Cancel Request)、定位請求(Locate Request)、定位應(yīng)答(Locate Reply)、關(guān)閉連接(Close Connection)、錯誤消息(Message Error)以及分段消息(Fragment),支持ORB之間的通信。
3)GIOP消息傳輸
GIOP是一個抽象的協(xié)議,并不能進行具體的數(shù)據(jù)傳輸,它必須要被映射為具體的傳輸協(xié)議。目前應(yīng)用最廣泛的Internet上的GIOP協(xié)議就是GIOP消息到TCP/IP的映射,稱為互聯(lián)網(wǎng)內(nèi)部對象請求代理協(xié)議(Inter Inter-ORB Protocol,IIOP)。

圖2 通信時延示意圖
中間件通信過程是指客戶端與服務(wù)端的不同域之間或者相同域內(nèi)的ORB之間使用GIOP/IIOP傳輸協(xié)議進行數(shù)據(jù)交互的過程,其中中間件通信時延是指為完成一次通信過程所需要的時間,如圖2所示。為保證準(zhǔn)確性,應(yīng)多次測試取平均值。
本文提出一種基于oneway的中間件通信時延優(yōu)化方法,并以omniORB為例測試驗證。
oneway是IDL規(guī)范中定義的一個關(guān)鍵字,表明該操作是單向的。與雙向調(diào)用相比,單向調(diào)用的客戶端發(fā)出請求后,CORBA中間件將調(diào)用請求轉(zhuǎn)發(fā)給合適的服務(wù)端應(yīng)用進行處理,而客戶端不需要等服務(wù)器端的應(yīng)答,立即返回執(zhí)行后續(xù)處理,客戶端并不清楚該操作是否被正常調(diào)用[4]。單向調(diào)用以及雙向調(diào)用示意圖如圖3~圖4所示。

圖3 單向調(diào)用示意圖

圖4 雙向調(diào)用示意圖
因此,利用oneway關(guān)鍵字修飾操作,可以提高操作的傳輸效率。
本文首先對oneway操作的實現(xiàn)及其可靠性進行測試,并在可靠傳輸?shù)幕A(chǔ)上,測試基于oneway操作的中間件通信時延。
以Zynq7015處理器作為測試硬件平臺,其操作系統(tǒng)為Linux,構(gòu)建兩個組件通信的C/S場景,LLC作為客戶端,Net作為服務(wù)端,基于以太網(wǎng)的omniORB中間件完成通信,IP地址為192.168.10.20,測試環(huán)境如圖5所示。

圖5 測試環(huán)境示意圖
3.2.1 oneway操作實現(xiàn)可行性及其可靠性
本文測試定義簡單接口,接口中設(shè)計一個包含單向操作的函數(shù),不具備其他功能,其參數(shù)則作為傳輸測試數(shù)據(jù)。該接口非oneway操作的IDL如下。
module Packet
const PushError PPKT_ERROR_BAD_SIZE = 1;
exception UnableToComplete
{
PushError errorCode;
};
interface OctetStream : PayloadStatus
{
void pushPacket( in StreamControlType control, in SRTF::OctetSequence payload )
雖然信息設(shè)備和信息技術(shù)的廣泛使用,為油田企業(yè)的檔案管理帶來了諸多便利,但是這些設(shè)備歸根到底還是要由人來操作。因此,檔案管理隊伍的信息素養(yǎng)的高低,就成為決定信息化數(shù)據(jù)運行管理技術(shù)應(yīng)用優(yōu)勢的核心要素。一直以來,油田企業(yè)人力資源管理的重點都是放在油田開采、技術(shù)創(chuàng)新等方面,而對于檔案管理人才隊伍的建設(shè)則缺乏足夠的重視。部分檔案管理人員甚至是從其他部門借調(diào)過來,沒有接受專業(yè)培訓(xùn)。由于專業(yè)水平和信息素養(yǎng)不高,即便是油田企業(yè)采購了信息設(shè)備,由于檔案管理人員不能熟練操作,也會影響檔案信息化數(shù)據(jù)運行管理的工作成效。
raises( UnableToComplete );
};
};
按照IDL規(guī)范將void pushPacket前添加oneway關(guān)鍵字,并刪除自定義的異常,得到oneway操作的IDL,如下所示。
module Packet
{
interface OctetStream : PayloadStatus
{
oneway void pushPacket( in StreamControlType control, in SRTF::OctetSequence payload );
};
};
因為刪去自定義異常ERROR_BAD_SIZE,本文統(tǒng)計錯包率和丟包率來判斷該接口是否收到BAD_SIZE數(shù)據(jù)包,進而判斷該接口的可靠性。
(1)測試項1:oneway操作實現(xiàn)可行性。測試步驟如下所示:
1)利用IDL-C++接口生成器將IDL翻譯生成根碼和框架,并在根碼和框架中添加測試代碼,編譯生成可執(zhí)行文件;
2)在oneway情況下,LLC中啟動測試線程,調(diào)用pushPacket發(fā)送1 kB長度數(shù)據(jù)包Oneway:LLC2NetTest----;
3)記錄客戶端和服務(wù)端發(fā)送的GIOP消息內(nèi)容;
4)在twoway情況下,LLC中啟動測試線程,調(diào)用pushPacket發(fā)送1 kB長度數(shù)據(jù)包Twoway:LLC2NetTest----;
5)記錄客戶端和服務(wù)端發(fā)送的GIOP消息交互流程及內(nèi)容。
如果客戶端與服務(wù)端GIOP消息交互流程以及內(nèi)容符合oneway定義,表明該實現(xiàn)可行,執(zhí)行測試項2,否則執(zhí)行測試項1。
(2)測試項2:oneway操作可靠性,包括丟包率和錯包率。
丟包率測試步驟如下所示:
1)在LLC中啟動測試線程,調(diào)用pushPacket發(fā)送10000次數(shù)據(jù)包;
2)在Net中統(tǒng)計調(diào)用pushPacket次數(shù)Time;
3)比較Time是否等于10000,如果相等,則無丟包;否則,有丟包,統(tǒng)計丟包個數(shù),統(tǒng)計丟包率;
4)改變發(fā)送數(shù)據(jù)包數(shù)據(jù)長度,重復(fù)步驟1)至步驟3)。
錯包率測試步驟如下所示:
1)在LLC中啟動測試線程,調(diào)用pushPacket發(fā)送10000次數(shù)據(jù)包;
2)在Net保存每次收到的數(shù)據(jù)包;
3)比較收到的數(shù)據(jù)包與發(fā)送的數(shù)據(jù)包,如果發(fā)送數(shù)據(jù)包長度與接收數(shù)據(jù)包長度相等,同時發(fā)送數(shù)據(jù)包內(nèi)容與接收數(shù)據(jù)包內(nèi)容相同,則無錯包;否則,有錯包,統(tǒng)計錯包次數(shù),計算錯包率;
4)改變發(fā)送數(shù)據(jù)包數(shù)據(jù)長度,重復(fù)步驟1)至步驟3)。
如果丟包率為0%且錯包率為0%,表明該實現(xiàn)可靠,執(zhí)行測試項3,否則執(zhí)行測試項1。
3.2.2 oneway操作通信時延
本文將完成一次LLC到Net的pushPacket接口調(diào)用所需要的時間作為中間件的通信時延。
(3)測試項3:通信時延。測試步驟如下所示:
1)在LLC組件中啟動測試線程,利用系統(tǒng)函數(shù)獲取接口開始調(diào)用的起始時間;
2)調(diào)用10000次接口函數(shù)pushPacket發(fā)送數(shù)據(jù)包;
3)利用系統(tǒng)函數(shù)獲取接口調(diào)用結(jié)束的截止時間;
4)通過起始和截止時間計算差值;
5)計算時間差值的平均值作為通信時延;
6)改變發(fā)送數(shù)據(jù)包長度,重復(fù)步驟1)至步驟5)。
oneway和twoway操作通信過程涉及到的GIOP消息如圖6~圖7所示,結(jié)合GIOP消息幀格式[4]可知,twoway通信過程如下所示:
(1)客戶端向服務(wù)端發(fā)送Locate Request消息;
(2)服務(wù)端收到Locate Request消息后向客戶端發(fā)送Locate Reply消息,確認接受所指定的對象請求;
(3)客戶端向服務(wù)端發(fā)送Request消息,調(diào)用接口,開始通信;
(4)服務(wù)端向客戶端發(fā)送Response消息。
與twoway操作相比,oneway操作客戶端與服務(wù)端通信涉及Locate Request消息、Locate Reply消息以及Response消息的流程與twoway完全相同,但oneway操作服務(wù)端不向客戶端發(fā)送Response消息,符合oneway操作單項調(diào)用的含義。

圖6 oneway操作客戶端與服務(wù)端GIOP消息交互示意圖
oneway操作客戶端和服務(wù)端之間通信的Locate Request和Locate Reply消息與twoway完全相同;Request消息如圖8~圖9所示,根據(jù)幀格式可知,該消息的response_flags字段表示該操作是否是一個oneway操作[4]。oneway操作為00,twoway操作為03,符合幀格式要求。結(jié)果表明,本文采用的oneway操作實現(xiàn)方法是可行的。

圖7 twoway操作客戶端與服務(wù)端GIOP消息交互示意圖

圖8 oneway操作Request消息

圖9 twoway操作Request消息
調(diào)用10000次pushPacket接口,選取發(fā)送數(shù)據(jù)包長度分別為1 kB、3 kB、5 kB、7 kB,結(jié)果表明,在不同發(fā)送數(shù)據(jù)字節(jié)數(shù)的情況下,該操作丟包率均為0%且錯包率均為0%,表明該方法實現(xiàn)的oneway操作是可靠的,這是因為底層采用TCP/IP的通信協(xié)議,保證了傳輸?shù)目煽啃浴?/p>
oneway與twoway通信時延對比如圖10所示,調(diào)用10000次pushPacket接口,與twoway操作相比,oneway操作時延降低近60%,這是因為oneway操作服務(wù)端不向客戶端發(fā)送Response消息,簡化通信流程,降低通信時延。

圖10 調(diào)用10000次接口oneway與twoway時延對比圖
本文提出基于oneway的中間件通信時延優(yōu)化方法,并以omniORB中間件為例在實際硬件平臺測試,該方法可簡化通信流程,并在保證可靠傳輸?shù)幕A(chǔ)上,將中間件通信時延可降低近60%。
[1] 軟件無線電系統(tǒng)中CORBA中間件關(guān)鍵技術(shù)研究與實現(xiàn)[D]. 長沙:湖南師范大學(xué),2016.
[2] 李方,張虹. GIOP協(xié)議和CORBA的性能優(yōu)化[J]. 微計算機信息,2006,22(21):7-10.
[3] 鞏方浩. 移動環(huán)境下CORBA應(yīng)用開發(fā)原理的分析和比較[D]. 武漢:武漢理工大學(xué),2011.
[4] 朱其亮,鄭斌. CORBA原理及應(yīng)用[M]. 北京:北京郵電大學(xué)出版社,2001.
Method to Optimize Communication Latency of CORBA
LV Hao, LIU Wenke
CORBA is a kind of middleware which is widely used in software defined radio system. In order to meet the demand of high real-time for the software defined radio system, an optimization method based on the key word oneway is proposed in the paper. By this way, 60% decrease of the communication latency of CORBA is obtained.
CORBA; Software Defined Radio; Oneway; Communication Latency
TP311
A
1674-7976-(2021)-03-227-05
2021-04-12。呂浩(1990.07-),山西呂梁人,碩士研究生,工程師,主要研究方向為軟件無線電。