鄢 然,魯 瀚,郭 蕾
(武漢中原電子集團有限公司,湖北 武漢 430205)
提供一種開放的、可互操作的、有統(tǒng)一標準的軟件平臺是軟件通信體系結(jié)構(gòu)[1](Software Communication Architecture,SCA)設(shè)計的目標,從而實現(xiàn)軟件無線電通信中對各個軟件組件的重用以及移植。由于公用對象請求代理體系(Common Object Request Broker Architecture,CORBA)具有良好的互操作性、異構(gòu)性,因此被SCA 規(guī)范采用,同時受到更多人的關(guān)注。隨著軟件無線電研究的深入,越來越多種類的中間件被開發(fā)出來,包括面向消息的中間件(Message Oriented Middleware,MOM)、遠程過程調(diào)用中間件(Remote Procedure Call,RPC)、遠程方法調(diào)用中間件(Remote Method Invocation,RMI)、面向數(shù)據(jù)分發(fā)服務(wù)中間件(Data Distribution Service,DDS)、面向?qū)ο笳埱蟠碇虚g件(Object Request Broker,ORB)[2]等。中間件承載的作用主要是使客戶端和服務(wù)端互通,其中不可避免地會出現(xiàn)時延以及性能消耗。如何在眾多的中間件中選出最適合當前運行環(huán)境的中間件成為一道難題。
文獻[3]在Ubuntu 14.04 虛擬機中運行RPCexpress、TAO、omniORB、e*ORB 和ORBit 這5 種常用的中間件,從時延、可預(yù)測性、吞吐量、靜態(tài)封裝大小、動態(tài)內(nèi)存占用5 個方面分別進行對比分析,實驗數(shù)據(jù)分析合理,對比充分,但實驗環(huán)境不是傳統(tǒng)的嵌入式軟件無線電平臺。
文獻[4]在軟件無線電教學(xué)平臺ZLSDR-1000上,基于omniORB、Binder、ZeroMQ 3 種不同架構(gòu)的中間件構(gòu)建測試組件,進行傳輸時延測試,實驗環(huán)境的核心芯片為ZYNQ 7030 SoC。然而該實驗環(huán)境并不是軟件無線電分布式環(huán)境,并且在單一芯片上進行測試,數(shù)據(jù)可能因為中間件設(shè)計方式和操作系統(tǒng)的支持,而直接通過共享內(nèi)存進行傳輸。
文獻[5]基于OSSIE 0.8.1 環(huán)境的omniORB 4.1.4中間件構(gòu)建通信組件,研究表明,隨著組件數(shù)量的增加和數(shù)據(jù)包長度的增加,中間件時延性能受到的影響越大。
文獻[6]在軟件無線電分布式環(huán)境下,基于嵌入式VxWorks 系統(tǒng),分析TAO 中間件在不同組件數(shù)量下通信數(shù)據(jù)時延的表現(xiàn),研究表明組件數(shù)量增加到3 個以上時,傳輸時延顯著增加。
國內(nèi)外目前對于中間件的性能分析的相關(guān)研究主要集中在兩個方向:一類研究主要在x86 環(huán)境的虛擬機中對各種中間件進行時延、吞吐量的性能對比,數(shù)據(jù)結(jié)果具備一定的參考意義,但缺乏在嵌入式環(huán)境下的數(shù)據(jù)對比分析;另一類在嵌入式軟件無線電環(huán)境下,對基于單一中間件進行組件化開發(fā)來測試多組件下中間件的時延,但也缺乏多個中間件之間的性能對比分析。針對目前軟件無線電環(huán)境下波形對中間件軟件的實際需求,結(jié)合軟件無線電分布式場景的應(yīng)用方向,本文針對常見的TAO、omniORB、e*ORB 這3 種CORBA 中間件,在平均傳輸時延、傳輸時延抖動、吞吐量3 個方面進行深入測試分析,以選出具有更高性能的中間件產(chǎn)品。
CORBA 是對象管理組(Object Management Group,OMG)提出的一種面向?qū)ο?、可移植的中間件標準,它不依賴于編程語言、計算平臺、網(wǎng)絡(luò)協(xié)議,因此能夠?qū)崿F(xiàn)分布式環(huán)境下客戶端與服務(wù)端之間的通信。CORBA 的主要組成部分如圖1 所示。
圖1 CORBA 的主要組成部分
如圖1 所示,ORB 是CORBA 的核心部分,也是本文性能分析主要討論的部分。把客戶端發(fā)出的請求傳遞給目標對象,并把目標對象的執(zhí)行結(jié)果返回給發(fā)出請求的客戶端是ORB 的主要任務(wù)。因為ORB 屏蔽了對象的位置、狀態(tài)、通信機制等信息,所以在客戶端看來,每個對象都是透明的,并且能夠調(diào)用它,但是對客戶端而言這些對象是不能修改的,因為它并不知道每個對象的內(nèi)部詳情。
TAO 是一種在自適應(yīng)通信環(huán)境(Adaptive Communication Environment,ACE)的基礎(chǔ)上開發(fā)的中間件[7],根據(jù)CORBA 2.6 規(guī)范進行實現(xiàn),該中間件是開源的,實現(xiàn)了核心的分布式功能。TAO 支持C、C++兩種語言,能夠適配多種操作系統(tǒng)。
omniORB 是一種基于對象請求代理的中間件,根據(jù)CORBA 2.6 規(guī)范進行實現(xiàn),該中間件開發(fā)的目的是能讓用戶通過簡潔和高效的方式提供CORBA規(guī)范中最實用、最普遍的功能。omniORB 支持C++和Python 兩種語言,并且適配Unix、Windows 等多種操作系統(tǒng)。
e*ORB 是一種基于對象請求代理的中間件,根據(jù)CORBA 2.3 規(guī)范進行實現(xiàn),該中間件開發(fā)的目的是適配minimum CORBA,保留經(jīng)常使用的接口,刪減不常用的接口,高度組件化的架構(gòu)使其成為目前為止最小且最快的ORB 中間件。e*ORB 支持C++、C 和Java 3 種語言,并且適配Unix、Windows操作系統(tǒng)。
測試環(huán)境采用典型的軟件無線電波形開發(fā)環(huán)境,具體包含了主控模塊、信號處理模塊、信道模塊和天線。主控模塊主要運行操作系統(tǒng),進行業(yè)務(wù)處理、音頻收發(fā)處理等,實現(xiàn)系統(tǒng)資源控制,對外提供網(wǎng)口、串口、音頻接口等功能型接口,用于提供整個平臺對外的外圍接口和業(yè)務(wù)處理功能,采用SoC 芯片zynq XC7Z015 實現(xiàn)。信號處理模塊主要用于進行波形功能的開發(fā),以及整個軟件無線電波形網(wǎng)絡(luò)路由與信號處理的開發(fā),實現(xiàn)信號不同速率的抽取、插值濾波、增益控制等功能,采用SoC芯片zynq XC7Z035 實現(xiàn),主控模塊與信號處理模塊通過SGMII 接口直接相連實現(xiàn)千兆以太網(wǎng)功能,組成分布式處理環(huán)境。信道模塊則采用一個射頻SoC 芯片和射頻前端功放共同實現(xiàn)。具體硬件結(jié)構(gòu)如圖2 所示。
圖2 軟件無線電分布式硬件平臺
軟件無線電分布式環(huán)境中,SoC 芯片zynq XC7Z015 和SoC 芯片zynq XC7Z035 均運行Linux 系統(tǒng),內(nèi)核版本4.6.0,SoC 芯片內(nèi)PS 端ARM 工作頻段為667 MHz,將中間件軟件TAO、omniORB、e*ORB 在主控模塊和信號處理模塊上運行測試。
為了測試TAO、omniORB、e*ORB 這3 種中間件之間的性能差異,本文選取了平均傳輸時延、傳輸時延抖動、吞吐量這3 個傳輸性能指標進行實測分析。
實驗測試方法是通過客戶端向服務(wù)端發(fā)送數(shù)據(jù),依靠中間件進行傳輸,并依次在zynq XC7Z035單板內(nèi),以及zynq XC7Z015 和zynq XC7Z035 雙板間兩種硬件環(huán)境下進行測試,其中,zynq XC7Z015和zynq XC7Z035 雙板間中,服務(wù)端運行在zynq XC7Z035 上,客戶端運行在zynq XC7Z015 上??蛻舳酥械膮?shù)包括數(shù)據(jù)包內(nèi)容tempstr_ptr、數(shù)據(jù)包大小pkt_len、循環(huán)次數(shù)pkt_num。其中數(shù)據(jù)包大小包括256 B、1 024 B、4 KB、8 KB、64 KB、128 KB、192 KB。循環(huán)次數(shù)為1 000 次。
本文中使用到的接口函數(shù)包括test_delay()、test_jitter()、test_throughout(),由交互式數(shù)據(jù)語言(Interactive Data Language,IDL)來實現(xiàn)框架代碼的生成,其IDL 定義如下:
平均傳輸時延的測試方法具體為,先獲取數(shù)據(jù)包發(fā)送前的時間t1,然后客戶端通過中間件將數(shù)據(jù)傳輸給服務(wù)端,獲取數(shù)據(jù)包發(fā)送結(jié)束的時間t2,兩者相減的數(shù)據(jù)記為Tt=t2-t1,單位為μs,此時獲取到傳輸一次的傳輸時延,循環(huán)該過程1 000 次,再根據(jù)計算公式得出平均傳輸時延,其中Tr為平均傳輸時延,單位為μs,pkt_num為循環(huán)次數(shù),Tt為單次傳輸時延,單位為μs。
表1、表2、表3 分別為TAO、omniORB、e*ORB 3 種中間件的平均傳輸時延測試結(jié)果。
表1 TAO 平均傳輸時延
表2 omniORB 平均傳輸時延
根據(jù)表1、表2 和表3 可以看出,使用TAO、omniORB、e*ORB 這3 種中間件進行測試,雙板的平均傳輸時延均比單板平均傳輸時延大,且數(shù)據(jù)包大小越大,平均傳輸時延越長。
表3 e*ORB 平均傳輸時延
圖3、圖4 分別為TAO、omniORB、e*ORB 3種中間件在單板和雙板條件下的平均傳輸時延測試結(jié)果。
從圖3 和圖4 可以看出,在單板的情況下,數(shù)據(jù)包比較小的時候,使用omniORB 中間件和使用e*ORB 中間件的平均傳輸時延大小相差不大,使用TAO 中間件的平均傳輸時延要稍長于另外兩種中間件。然而,數(shù)據(jù)包越大時,使用e*ORB 中間件的平均傳輸時延會比其他兩種中間件的小,而TAO 中間件的平均傳輸時延要遠大于另外兩種中間件。在雙板的情況下,數(shù)據(jù)包比較小的時候,使用omniORB 和e*ORB 中間件的平均傳輸時延大小相差不大,使用TAO 中間件的平均傳輸時延要稍長于另外兩種中間件。然而,數(shù)據(jù)包越大,使用e*ORB 中間件的平均傳輸時延會比其他兩種中間件的小,使用e*ORB 和omniORB 中間件之間的差距雙板比單板更大,使用TAO 中間件的平均傳輸時延要遠大于另外兩種中間件。
圖3 zynq XC7Z035 單板3 種中間件平均傳輸時延對比
圖4 zynq XC7Z015 和zynq XC7Z035 雙板3 種中間件平均傳輸時延對比
傳輸時延抖動的測試方法先是獲取數(shù)據(jù)包發(fā)送前的時間t1,然后客戶端通過中間件將數(shù)據(jù)傳輸給服務(wù)端,獲取數(shù)據(jù)包發(fā)送結(jié)束的時間t2,兩者相減的數(shù)據(jù)記為Tt=t2-t1,并存入curTime 數(shù)組中,循環(huán)該過程1 000 次,將curTime 數(shù)組中最大的數(shù)據(jù)記為Tmax,最小的數(shù)據(jù)記為Tmin,傳輸時延抖動T=Tmax-Tmin,單位為μs。
表4、表5、表6 分別為TAO、omniORB、e*ORB 3 種中間件的傳輸時延抖動測試結(jié)果。
表4 TAO 傳輸時延抖動
表5 omniORB 傳輸時延抖動
根據(jù)表4、表5、表6 可以看出,單板的傳輸時延抖動基本小于雙板的傳輸時延抖動,使用TAO中間件在單板與雙板兩種硬件測試條件下進行測試時,傳輸時延隨著數(shù)據(jù)包的增大而增大,且增長幅度大;使用omniORB 中間件在單板與雙板兩種硬件測試條件下進行測試時,傳輸時延抖動基本隨著數(shù)據(jù)包的增大而增長;使用e*ORB 中間件在單板與雙板兩種硬件測試的條件下進行測試時,傳輸時延抖動基本在一定范圍內(nèi)浮動。
表6 e*ORB 傳輸時延抖動
圖5、圖6 分別為TAO、omniORB、e*ORB 3種中間件在單板和雙板條件下的傳輸時延抖動測試結(jié)果。
圖5 zynq XC7Z035 單板3 種中間件傳輸時延抖動對比
圖6 zynq XC7Z015 和zynq XC7Z035 雙板3 種中間件傳輸時延抖動對比
根據(jù)圖5、圖6 可以看出,在單板硬件測試環(huán)境下,使用e*ORB 中間件的傳輸時延抖動都較小,且維持在一定的范圍內(nèi);使用omniORB 中間件時,傳輸時延抖動隨著數(shù)據(jù)包的增大而偏大,且浮動范圍較大;使用TAO 中間件時,當數(shù)據(jù)包大小不大于64 KB 時,抖動時長在一定的范圍內(nèi)波動,當數(shù)據(jù)包大小大于64 KB 時,抖動時長明顯增長且浮動范圍大。在雙板硬件測試環(huán)境下,使用e*ORB 中間件的傳輸時延抖動都較小,且抖動的幅度比單板要更小一些;使用omniORB 中間件的傳輸時延抖動基本隨著數(shù)據(jù)包的增大而增大,且隨著數(shù)據(jù)包大小的增大,抖動幅度也隨之增大;使用TAO 中間件時,當數(shù)據(jù)包大小不大于128 KB 時,傳輸時延抖動時長在一定的范圍內(nèi)波動,當數(shù)據(jù)包大小大于128 KB 時,抖動時長明顯增長且浮動范圍大。
吞吐量的測試方法先是獲取數(shù)據(jù)包發(fā)送前的時間t1,然后客戶端通過中間件將數(shù)據(jù)傳輸給服務(wù)端,每次傳輸?shù)臄?shù)據(jù)包大小為pkt_num,次數(shù)為c,再獲取數(shù)據(jù)包發(fā)送結(jié)束的時間t2,兩者相減的數(shù)據(jù)記為Tt=t2-t1,根據(jù)公式T=(c×pkt_num)/Tt計算出吞吐量的值,其中,T為吞吐量,單位為Mbit/s,pkt_num為數(shù)據(jù)包大小,單位為MB,Tt為數(shù)據(jù)發(fā)送時間,單位為μs。
表7、表8、表9 分別為TAO、omniORB、e*ORB 3 種中間件的吞吐量測試結(jié)果。
從表7、表8、表9 可以看出,使用3 種中間件進行測試雙板的吞吐量均明顯小于單板的吞吐量。一般情況下,數(shù)據(jù)包越大吞吐量越大,當數(shù)據(jù)包足夠大的時候,吞吐量是在一定的范圍內(nèi)浮動的。
表7 TAO 吞吐量
表8 omniORB 吞吐量
表9 e*ORB 吞吐量
圖7、圖8 分別為TAO、omniORB、e*ORB 3種中間件在單板和雙板條件下的吞吐量測試結(jié)果。
圖7 zynq XC7Z035 單板3 種中間件吞吐量對比
圖8 zynq XC7Z015 和zynq XC7Z035 雙板3 種中間件吞吐量對比
從圖7 和圖8 可以看出,不論是單板還是雙板,使用TAO 中間件的吞吐量都是最小的并且差距大,使用e*ORB 中間件的吞吐量都要大于使用omniORB 中間件的吞吐量,但是差距不太大。當數(shù)據(jù)包的大小大于64 KB 時,吞吐量的數(shù)據(jù)變化幅度不大,在一定的范圍內(nèi)波動。
如今,運用于數(shù)據(jù)通信中的中間件種類日益豐富,能夠解決更多數(shù)據(jù)通信中出現(xiàn)的問題,但是如何選擇性能最合適的中間件是十分重要的問題。中間件作為一個能夠允許組件獨立開發(fā)并能彼此交互的中間層,它起著承上啟下的作用。而數(shù)據(jù)在通過中間件傳輸?shù)臅r候必然會帶來一定的時延和性能消耗。本文在zynq XC7Z035 單板以及zynq XC7Z015和zynq XC7Z035 雙板兩種硬件環(huán)境下,分別測試了TAO、omniORB、e*ORB 這3 種中間件的平均傳輸時延、傳輸時延抖動、吞吐量這3 個性能指標,并通過數(shù)據(jù)之間的對比,為后續(xù)在不同環(huán)境中選用合適的中間件提供可靠的數(shù)據(jù)支持。