钱宏文,朱江伟,吴翼虎,杨 旭,方 海,陈显舟
(1.中国电子科技集团公司第五十八研究所,江苏 无锡 214072;2.中国空间技术研究院西安分院,陕西 西安 710100)
随着卫星业务需求的不断增长,对卫星的灵活性提出了越来越高的要求,空间通信无线电系统(Space Telecommunication Radio System,STRS)架构标准采用开放式架构,软件和硬件体系结构分离设计[1]。基于STRS的卫星任务系统能够在卫星发射后改变卫星任务功能,使卫星功能具备软件定义能力,可以满足卫星多样性的业务需求。
STRS 波形组件使用STRS 消息传递方法建立消息传递通道。STRS 基础架构提供了两种消息传递模式,一种是STRS 队列,另一种是发布/订阅模式[1]。分布式数据分发服务(Data Distribution Service,DDS)中间件遵循发布/订阅设计模式[2]。本文利用DDS 的特点,将DDS 应用到STRS 架构中,实现STRS 系统通信中间件,满足STRS 系统强实时性的要求,实现STRS 波形组件的分布式部署,很好地弥补了STRS 架构标准存在的不足。
STRS 架构标准采用模块化和分层的设计思想,目的是提高波形应用设计的通用性和可移植性,分为硬件和软件两大体系结构[1]。
STRS 硬件架构如图1 所示,由三大模块组成,分别为通用处理模块(General-purpose Processing Module,GPM)、信号处理模块(Signal Processing Module,SPM)和射频模块(Radio Frequency Module,RFM)[1]。通用处理模块是主要的控制模块,信号处理模块主要用于将接收到的数字信号转换成数据分组或将数据分组转换为数字信号并进行发送的信号处理,射频模块主要功能包括频率转换和增益控制、模数和数模转换、辐射跟踪等[3]。GPM、SPM 和RFM 3 个模块共同组成了包括CPU、FPGA、DSP 等处理器的异构处理平台。
图1 STRS 硬件架构
STRS 软件体系结构定义了运行时不同的波形应用程序软件和操作环境之间的软件接口层以及操作环境和硬件平台之间的接口,由应用层、核心层和物理层组成[4]。
STRS 定义了统一的开发标准架构,使得软硬件可分离,目的是:在不进行硬件平台重新设计的情况下,在同一硬件平台上加载不同的波形组件以实现不同的功能,也可根据特定的需求对系统进行局部或全局的动态重构,从而最大化地利用系统资源。从工程实践来看,不采用通信中间件的STRS 存在以下不足:
(1)耦合度高:STRS 系统未明确说明如何实现消息传递,软件开发人员大多数会首选手动编写代码的方式来实现波形组件应用程序间的数据交互,这样每一个连接都需要开发人员来维护。每增加一个节点,系统的耦合性呈指数级增长。
(2)灵活性较差:STRS 要求所有的波形组件作为一个整体创建、运行,如果波形的某一个组件损坏,整个应用将不能正常运行,存在单点失败的风险,必须要由管理员进行整套系统的卸载和重新部署。
(3)组件间同步耗时较长:为了建立组件之间的同步连接,当组件较多时,过程会更复杂,开销更大,导致波形组件启动较慢[5]。
将DDS 引入STRS 系统,实现STRS 系统发布/订阅方式的通信中间件。STRS 系统通信中间件屏蔽了底层传输控制协议/网际协议(Transmission Control Protocol/Internet Protocol,TCP/IP),通过简单的编程就可以构建一个以数据为中心、可扩展、与位置无关的分布式网络平台[5],为STRS 系统各个波形组件提供了简单、高效的消息传递服务。
DDS 使用操作系统适配层和网络适配层来实现多个平台的支持,操作系统适配层为DDS 提供运行时所需的内存申请、定时器、多线程等功能接口。不同的操作系统实现DDS 操作系统适配层的接口均不相同,如Linux、SYS/BIOS。DDS 操作系统适配层默认支持可移植操作系统接口(Portable Operating System Interface,POSIX),在支持POSIX 接口的环境中,只需要做细小的修改就可以实现DDS 操作系统适配层[6]。DDS 网络适配层基于不同的操作系统提供的网络编程接口实现[7],如Linux 操作系统下的Socket 接口、SYS/BIOS 操作系统下的网络开发工具(Network Developer's Kit,NDK)等。
2.1.1 基于GPM 通用处理模块的DDS 设计实现
GPM 模块采用Xilinx 公司的系统级芯片(System on Chip,SoC)作为主处理器。在GPM 模块运行Peta-Linux[8],提供了DDS 运行所需的POSIX 接口和网络套接字Socket 接口,DDS 基于POSIX 和Socket 接口实 现操作系统适配层和网络适配层,完成DDS 在GPM Peta-Linux 环境中的实现。基于GPM 通用处理模块的DDS软件基础结构如图2 所示。
图2 基于GPM 模块的DDS 软件基础结构
2.1.2 基于SPM 信号处理模块的DDS 设计实现
SPM 模块主处理器采用TI 公司多核DSP,在SPM模块上运行多核SYS/BIOS。SYS/BIOS 提供了DDS 运行所需 的POSIX 接 口[9]和NDK[10],DDS 基 于POSIX 接口和NDK 组件实现操作系统适配层和网络适配层,完成DDS 在SPM SYS/BIOS 中的实现[11]。基于SPM 模块的DDS 软件基础结构如图3 所示。
图3 基于SPM 模块的DDS 软件基础结构
2.1.3 基于RFM 射频模块的DDS 设计实现
RFM 模块主要器件为Xilinx 公司的高端FPGA 芯片。基于RFM 模块,使用FPGA 资源搭建MicroBlaze[12]软核,PetaLinux 支持MicroBlaze,提供了对应的BSP[13]。PetaLinux 提供了DDS 运行所需的POSIX 接口和网络套接 字Socket 接 口,DDS 基 于POSIX 和Socket 接口实现操作系统适配层和网络适配层,完成DDS 在RFM 模块PetaLinux 中的实现。基于RFM 模块的DDS 软件基础结构如图4 所示。
图4 基于RFM 模块的DDS 软件基础结构
基于STRS 的波形组件应用程序的软件设计包括STRS 核心框架设计和基于DDS 的STRS 系统通信中间件的接口设计两部分。
2.2.1 STRS 核心框架设计
基于STRS 系统通信中间件,STRS 核心框架加载波形应用程序时只加载并运行各个波形组件,不需要建立波形之间的通信链路,也不需要处理波形之间的数据同步,包括消息传递在内的工作都交由DDS 来完成。基于DDS 的STRS 软件架构如图5 所示。
图5 基于DDS 的STRS 软件架构
2.2.2 STRS 系统通信中间件接口设计
DDS 接口设计对于实现STRS 系统中的发布/订阅通信方式来说是一项至关重要的工作。STRS 核心框架只负责波形组件的加载、部署和运行,因此在STRS 消息接口设计中,需要完成STRS 消息接口定义、波形组件间的通信链路建立和波形组件间的数据同步这三方面的工作。
(1)STRS 系统通信中间件接口定义
DDS 使用接口定义语言(Interface Definition Language,IDL)[2]进行数据结构的定义。根据波组件需要传输的数据类型以及业务,使用IDL 定义数据结构和主题,并使用DDS 代码自动生成工具加载IDL 文件生成处理数据结构相关的代码,通过对生成代码的封装来实现STRS 消息接口,通过这种方式实现STRS 中所有用来进行数据传输的接口。由于基于DDS 定义的STRS 系统通信中间件接口只是实现了系统内部的消息传输,并且都在各个组件的代码中实现,遵循STRS 架构标准,并不会影响到STRS 架构,完全兼容。
(2)波形组件间的通信链路建立
基于STRS 系统通信中间件实现的STRS 波形组件是位置无关的,波形组件之间的互联互通通过“主题”+“数据结构”作为唯一标识。波形组件间的通信链路建立通过“发现”机制[14]来实现,使用周期性的“心跳”来保证参与者的存活性,参与者在网络上通过“心跳”周期性地宣告他们的存在。一旦两个参与者相互发现后,一个可靠的通信链路建立。在STRS 系统的开发过程中无需考虑组件间的连接建立问题。
(3)波形组件间的数据同步
在进行波形组件的开发过程中,会遇到这样的问题,先启动订阅端,再启动发布端,往往订阅端无法收到第一包数据,这时就无法保证数据的完整性。针对上述问题,STRS 系统通信中间件提供了解决方案,发布端提供了一个接口on_publication_matched,通过这个接口可以获得当前与发布端建立通信链路的订阅端的个数,软件开发者可以通过对与发布端建立通信链路的订阅端的个数的判断来决定是否开始发布数据,当订阅端个数大于0 时开始发布数据,这样订阅端就会收到所有数据。这样很容易地解决了波形组件间的数据同步问题,保证了数据的完整性。
2.2.3 STRS 系统通信中间件的性能测试
基于可重构综合处理器平台,使用STRS 系统通信中间件接口,在GPM 模块和RFM 模块之间进行STRS系统通信中间件接口的性能测试,包括:波形组件间的通信链路建立时间、丢包率和传输延时[15],测试结果如下。
(1)波形组件间的通信链路建立时间测试
构建一对一发布-订阅场景,发布端mainPublisher 一直循环发送数据,订阅端mainSubscriber 记录时间T1后马上使能,接收到第一包数据记录时间T2,波形组件间的通信链路建立时间为T2-T1,测试结果显示通信链路建立时间为420 ms。
(2)丢包率测试
丢包率表示在Best-effort QoS[16]的配置下,STRS 系统通信中间件接口的丢包情况。构建一对一发布-订阅场景,发布端循环n次发布数据,订阅端每收到一包数据记录一次,根据收到的数据情况统计丢包率。实验中分别测试了单包大小分别为1 KB、4 KB、16 KB、32 KB、64 KB、1 MB 的丢包率,均未出现丢包情况。
(3)传输延时测试
测试传输延时是为了证明STRS 体系架构对消息接口实时性的要求。基于STRS 系统通信中间件接口构建一对一请求-回复场景,回环测试,每次发布和订阅数据使用信号量进行同步。实验中分别测试了单包大小分别为1 KB、4 KB、16 KB、32 KB、64 KB、1 MB 的传输延时,测试结果如表1 所示。
表1 STRS 消息接口传输延时测试结果(μs)
STRS 系统通信中间件有如下优点:
(1)提高通信效率,降低网络延迟:STRS 系统中的所有波形组件之间是一种对等网的关系,不需要中心服务器的连接,不存在单点失败风险,而且底层协议栈并不复杂,不需要太大的软件开销,这大大提高了通信的效率和实时性。
(2)降低系统的冗余度,提高了灵活性:各个波形组件之间是松耦合的关系,参与通信的节点并不知道对方的信息,节点之间的通信仅仅需要一个主题就能完成。
(3)单个波形组件可重构:在STRS 系统中,每个波形组件的加入和退出均不会影响整个系统的功能和业务。波形组件启动后,组件间只需通过“主题”就可以完成数据交互,当某一个波形组件故障时,可以通过显控软件完成单个波形组件的重启,进而实现单个组件模块的重构。
(4)减少了组件间同步时间:STRS 系统通信中间件接口的性能测试结果表明STRS 系统中的各个波形组件启动后,在极短的时间内就可完成相互发现和同步,所以,使用STRS 系统通信中间件极大地减少了组件间的同步时间。
本文首先介绍了STRS 架构标准,并根据工程实践经验总结出了目前不采用通信中间件STRS 系统中存在的问题,即耦合度高、实时性不强、灵活性较差、组件间同步耗时较长。重点介绍了基于DDS 的STRS 系统通信中间件的设计与实现,最后对STRS 系统通信中间件接口进行了性能测试,证明了STRS 系统通信中间件的优点。本文的创新点在于:基于STRS 硬件体系架构,在GPM、SPM 和RFM 3 种异构处理器平台上基于DDS 完成了STRS 系统通信中间件的设计与实现,并采用STRS系统通信中间件来实现波形组件间的通信,降低了系统的冗余度和复杂度,提高了系统的实时性、灵活性和可靠性。