APP下载

一种CORBA中间件通信时延性能优化方法

2021-07-27刘文科

现代导航 2021年3期
关键词:服务端中间件调用

吕 浩,刘文科

一种CORBA中间件通信时延性能优化方法

吕 浩,刘文科

(中国电子科技集团公司第二十研究所,西安 710068)

CORBA是一种广泛应用于软件无线电系统的中间件。为了满足软件无线电系统高实时性要求,本文提出基于oneway关键字的中间件通信时延性能优化方法。利用该方法,通信时延降低近60%。

CORBA;软件无线电;oneway;通信时延

0 引言

在分布式互联互通技术领域中,公共对象请求代理体系结构(Common Object Request Broker Architecture,CORBA)中间件凭借着强大的跨语言、跨操作系统和跨异构平台的能力被广泛应用。随着CORBA被SCA规范所采用,越来越多的软件无线电研究者开始关注和研究CORBA,并且开始将CORBA的应用领域扩展到软件无线电系统中,然而软件无线电系统具有很多不同于传统的计算机系统的特点,包括严格的实时性要求和灵活的通信机制等[1]。因此,为了满足高实时性的要求,降低中间件通信时延,提高传输效率显得尤为重要。

本文提出一种基于oneway的中间件通信时延性能优化方法,并以omniORB为例进行测试,结果表明该方法能够大幅度降低CORBA中间件的通信时延。

1 CORBA中间件

CORBA[2]是对象管理组织(Object Management Group,OMG)提出的一种面向对象的中间件标准,能屏蔽底层硬件平台和操作系统的差异性,实现分布式环境下客户端与服务端的通信。

1.1 CORBA体系结构

图1 CORBA体系架构

CORBA对象代理请求体系结构如图1所示,由对象请求代管者(Object Request Broker,ORB)核心及其接口、客户端码根(Stub)、服务器端框架(Skeleton)、动态调用接口(Dynamic Invocation Interface,DII)、动态框架接口(Dynamic Skeleton Interface,DSI)、接口库(Interface Repository)、实现库(Implementation Repository)和对象适配器(Object Adapter)等组成[3]。

(1)ORB核心

ORB是CORBA的核心部分,提供客户端与对象实现之间透明通信的机制,它的基本任务是把客户端的请求传递到被激活的对象实现中去。

(2)接口定义语言(Interface Description Language,IDL)和语言映射

IDL用来描述对象接口,定义对象通信的操作和数据类型。IDL的语法与C++类似,同时它也增加了一些支持分布式处理的关键字如in、out和inout等。一个IDL说明可以包含一个或多个接口,也可以包含模块说明。

IDL语法是一种描述性语言而非一种具体实现语言,利用IDL语言进行应用程序开发时,需要将IDL语言映射为具体的编程语言,包括C++和C。IDL语言映射是CORBA应用程序开发的关键,它提供了CORBA中抽象概念和模型的具体实现方法。

(3)码根(Stub)和框架(Skeleton)

码根和框架都是由IDL文件编译生成的,且特定的框架接受特定的、对某个接口的请求。因此,通过码根和框架的调用被通称为静态调用。码根的作用是代表客户创建并发请求;框架的作用则是把请求交给CORBA对象实现。

(4)动态调用接口DII

提供动态调用和实现方式。在动态方式下,客户端或对象实现需要查询由接口库提供的相应对象接口的描述信息。在使用DII时,用户必须自定义请求信息,包括相应的操作及有关参数等。

(5)对象适配器

根据CORBA规范的定义,对象适配器的功能主要是完成对象引用的生成与解释、根据对象引用找到对应的对象实现、对象与实现的激活和终止激活、对象实现的注册等。

(6)接口库

接口库作为一个对象而存在。应用程序可以像调用其他CORBA对象所提供的操作一样,来调用接口库的操作。接口库允许应用程序在运行时访问OMG IDL类型系统。

(7)实现库

实现库存储有关服务器的信息,如服务器的名字以及相关可执行程序的路径。它所完成的功能与接口库类似,只不过它存储的是对象实现的信息。

(8)通用对象请求代理间通信协议(General Inter-ORB Protocol,GIOP)

OMG定义了两个ORB之间的通信协议,即GIOP协议[2]。GIOP规范包含以下两个元素:

1)公共数据表示(Common Data Representation,CDR)

公共数据表示是一种传送语法,将IDL定义的数据类型映射为二进制形式。所有的IDL数据类型都使用统一的CDR语法编码,保证不同的ORB实现之间能够通信。它描述了如何编码/解码操作中的数据,以便所有可能的服务端都可以抽取参数并调用远程操作,且数据交换不会产生多义性。

2)GIOP消息类型

GIOP定义8种消息类型:请求消息(Request)、应答消息(Reply)、取消请求(Cancel Request)、定位请求(Locate Request)、定位应答(Locate Reply)、关闭连接(Close Connection)、错误消息(Message Error)以及分段消息(Fragment),支持ORB之间的通信。

3)GIOP消息传输

GIOP是一个抽象的协议,并不能进行具体的数据传输,它必须要被映射为具体的传输协议。目前应用最广泛的Internet上的GIOP协议就是GIOP消息到TCP/IP的映射,称为互联网内部对象请求代理协议(Inter Inter-ORB Protocol,IIOP)。

1.2 中间件通信过程及通信时延

图2 通信时延示意图

中间件通信过程是指客户端与服务端的不同域之间或者相同域内的ORB之间使用GIOP/IIOP传输协议进行数据交互的过程,其中中间件通信时延是指为完成一次通信过程所需要的时间,如图2所示。为保证准确性,应多次测试取平均值。

2 oneway及单向调用

本文提出一种基于oneway的中间件通信时延优化方法,并以omniORB为例测试验证。

oneway是IDL规范中定义的一个关键字,表明该操作是单向的。与双向调用相比,单向调用的客户端发出请求后,CORBA中间件将调用请求转发给合适的服务端应用进行处理,而客户端不需要等服务器端的应答,立即返回执行后续处理,客户端并不清楚该操作是否被正常调用[4]。单向调用以及双向调用示意图如图3~图4所示。

图3 单向调用示意图

图4 双向调用示意图

因此,利用oneway关键字修饰操作,可以提高操作的传输效率。

3 基于oneway操作的通信时延测试

本文首先对oneway操作的实现及其可靠性进行测试,并在可靠传输的基础上,测试基于oneway操作的中间件通信时延。

3.1 测试环境

以Zynq7015处理器作为测试硬件平台,其操作系统为Linux,构建两个组件通信的C/S场景,LLC作为客户端,Net作为服务端,基于以太网的omniORB中间件完成通信,IP地址为192.168.10.20,测试环境如图5所示。

图5 测试环境示意图

3.2 测试项及测试方法

3.2.1 oneway操作实现可行性及其可靠性

本文测试定义简单接口,接口中设计一个包含单向操作的函数,不具备其他功能,其参数则作为传输测试数据。该接口非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 )

虽然信息设备和信息技术的广泛使用,为油田企业的档案管理带来了诸多便利,但是这些设备归根到底还是要由人来操作。因此,档案管理队伍的信息素养的高低,就成为决定信息化数据运行管理技术应用优势的核心要素。一直以来,油田企业人力资源管理的重点都是放在油田开采、技术创新等方面,而对于档案管理人才队伍的建设则缺乏足够的重视。部分档案管理人员甚至是从其他部门借调过来,没有接受专业培训。由于专业水平和信息素养不高,即便是油田企业采购了信息设备,由于档案管理人员不能熟练操作,也会影响档案信息化数据运行管理的工作成效。

raises( UnableToComplete );

};

};

按照IDL规范将void pushPacket前添加oneway关键字,并删除自定义的异常,得到oneway操作的IDL,如下所示。

module Packet

{

interface OctetStream : PayloadStatus

{

oneway void pushPacket( in StreamControlType control, in SRTF::OctetSequence payload );

};

};

因为删去自定义异常ERROR_BAD_SIZE,本文统计错包率和丢包率来判断该接口是否收到BAD_SIZE数据包,进而判断该接口的可靠性。

(1)测试项1:oneway操作实现可行性。测试步骤如下所示:

1)利用IDL-C++接口生成器将IDL翻译生成根码和框架,并在根码和框架中添加测试代码,编译生成可执行文件;

2)在oneway情况下,LLC中启动测试线程,调用pushPacket发送1 kB长度数据包Oneway:LLC2NetTest----;

3)记录客户端和服务端发送的GIOP消息内容;

4)在twoway情况下,LLC中启动测试线程,调用pushPacket发送1 kB长度数据包Twoway:LLC2NetTest----;

5)记录客户端和服务端发送的GIOP消息交互流程及内容。

如果客户端与服务端GIOP消息交互流程以及内容符合oneway定义,表明该实现可行,执行测试项2,否则执行测试项1。

(2)测试项2:oneway操作可靠性,包括丢包率和错包率。

丢包率测试步骤如下所示:

1)在LLC中启动测试线程,调用pushPacket发送10000次数据包;

2)在Net中统计调用pushPacket次数Time;

3)比较Time是否等于10000,如果相等,则无丢包;否则,有丢包,统计丢包个数,统计丢包率;

4)改变发送数据包数据长度,重复步骤1)至步骤3)。

错包率测试步骤如下所示:

1)在LLC中启动测试线程,调用pushPacket发送10000次数据包;

2)在Net保存每次收到的数据包;

3)比较收到的数据包与发送的数据包,如果发送数据包长度与接收数据包长度相等,同时发送数据包内容与接收数据包内容相同,则无错包;否则,有错包,统计错包次数,计算错包率;

4)改变发送数据包数据长度,重复步骤1)至步骤3)。

如果丢包率为0%且错包率为0%,表明该实现可靠,执行测试项3,否则执行测试项1。

3.2.2 oneway操作通信时延

本文将完成一次LLC到Net的pushPacket接口调用所需要的时间作为中间件的通信时延。

(3)测试项3:通信时延。测试步骤如下所示:

1)在LLC组件中启动测试线程,利用系统函数获取接口开始调用的起始时间;

2)调用10000次接口函数pushPacket发送数据包;

3)利用系统函数获取接口调用结束的截止时间;

4)通过起始和截止时间计算差值;

5)计算时间差值的平均值作为通信时延;

6)改变发送数据包长度,重复步骤1)至步骤5)。

4 测试结果及分析

4.1 oneway操作实现可行性及其可靠性结果

oneway和twoway操作通信过程涉及到的GIOP消息如图6~图7所示,结合GIOP消息帧格式[4]可知,twoway通信过程如下所示:

(1)客户端向服务端发送Locate Request消息;

(2)服务端收到Locate Request消息后向客户端发送Locate Reply消息,确认接受所指定的对象请求;

(3)客户端向服务端发送Request消息,调用接口,开始通信;

(4)服务端向客户端发送Response消息。

与twoway操作相比,oneway操作客户端与服务端通信涉及Locate Request消息、Locate Reply消息以及Response消息的流程与twoway完全相同,但oneway操作服务端不向客户端发送Response消息,符合oneway操作单项调用的含义。

图6 oneway操作客户端与服务端GIOP消息交互示意图

oneway操作客户端和服务端之间通信的Locate Request和Locate Reply消息与twoway完全相同;Request消息如图8~图9所示,根据帧格式可知,该消息的response_flags字段表示该操作是否是一个oneway操作[4]。oneway操作为00,twoway操作为03,符合帧格式要求。结果表明,本文采用的oneway操作实现方法是可行的。

图7 twoway操作客户端与服务端GIOP消息交互示意图

图8 oneway操作Request消息

图9 twoway操作Request消息

调用10000次pushPacket接口,选取发送数据包长度分别为1 kB、3 kB、5 kB、7 kB,结果表明,在不同发送数据字节数的情况下,该操作丢包率均为0%且错包率均为0%,表明该方法实现的oneway操作是可靠的,这是因为底层采用TCP/IP的通信协议,保证了传输的可靠性。

4.2 oneway操作通信时延测试结果

oneway与twoway通信时延对比如图10所示,调用10000次pushPacket接口,与twoway操作相比,oneway操作时延降低近60%,这是因为oneway操作服务端不向客户端发送Response消息,简化通信流程,降低通信时延。

图10 调用10000次接口oneway与twoway时延对比图

5 总结

本文提出基于oneway的中间件通信时延优化方法,并以omniORB中间件为例在实际硬件平台测试,该方法可简化通信流程,并在保证可靠传输的基础上,将中间件通信时延可降低近60%。

[1] 软件无线电系统中CORBA中间件关键技术研究与实现[D]. 长沙:湖南师范大学,2016.

[2] 李方,张虹. GIOP协议和CORBA的性能优化[J]. 微计算机信息,2006,22(21):7-10.

[3] 巩方浩. 移动环境下CORBA应用开发原理的分析和比较[D]. 武汉:武汉理工大学,2011.

[4] 朱其亮,郑斌. CORBA原理及应用[M]. 北京:北京邮电大学出版社,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-),山西吕梁人,硕士研究生,工程师,主要研究方向为软件无线电。

猜你喜欢

服务端中间件调用
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
RFID中间件技术及其应用研究
新时期《移动Web服务端开发》课程教学改革的研究
基于Android 平台的OSGi 架构中间件的研究与应用
在Windows Server 2008上创建应用
基于系统调用的恶意软件检测技术研究
中间件在高速公路领域的应用
利用RFC技术实现SAP系统接口通信
一种支持智能环境构建的中间件