朱 强
(中国航空工业集团公司洛阳电光设备研究所,河南 洛阳 471000)
当前,随着战斗机作战任务的复杂度越来越高,对战斗机的航电系统要求也越来越高,综合核心处理机是航电任务系统核心组成部分,任务系统的大部分应用程序都驻留在综合核心处理机中,比如,火控管理、战术决策、导航解算、传感器管理、数据融合、显示控制等。这些应用对综合核心处理机的硬件要求也越来越高。随着电子技术的发展,单纯提高处理器的主频的空间越来越小,而目前多核是处理器发展的主要方向。在航空电子系统中,多核处理器也开始在各种型号处理器中使用。飞思卡尔推出的T2080处理器是四核八线程高性能处理器,每个核的最高主频可达1.8 GHz,而风河公司推出的vxWorks653 3.0多核操作系统也支持T2080处理器。在多核系统中,其应用程序的部署方式以及驱动开发等与在单核系统中不同。在某型号综合核心处理机验证系统中高性能数据处理单元以T2080多核处理器为硬件平台,以vxWorks653 3.0为软件平台,负责运行各种任务系统的应用程序。图1是高性能数据处理模块组成框图。
图1 高性能数据处理模块组成框图
在高性能数据处理单元中,多核通信中间件运行在核0分区操作系统中,核0上的分区还运行FC驱动程序。多核通信中间件主要完成数据的转发工作,即将应用程序需要发送的数据通过端口PORT发送到中间件,中间件将数据转发到FC总线,或者中间件将数据直接转发到其他分区应用中。同时中间件接收FC总线的数据或者其他分区的数据,并将数据转发到对应的分区应用中。此外还具备消息组播功能,即收到消息后,根据配置转发到多个端口中[1]。
在多核通信中间件中,主要包含三个模块,分别是应用程序发送模块、应用程序接收模块、转换算法模块。
(1)应用程序发送模块:完成从端口中接收分区应用发过来的数据,根据配置,将数据转发到FC总线或者将数据转发到对应的分区应用中。
(2)应用程序接收模块:根据配置,从FC驱动中接收数据或者从分区应用中接收数据,然后将数据单发或者以组播方式发送到对应的接收分区应用中。
(3)转换算法模块:多核通信中间件在初始化时,需要完成配置表到转发表的转换,涉及的两个转换分别是,组播转换和核间通信转发时需要的索引转换。
多核通信中间件在运行时先初始化发送和接收的配置表数据结构、创建端口、转换成发送和接收转发表,然后创建应用程序接收任务和应用程序发送任务,两个任务会读取转发表的信息进行数据转发。
图2 多核通信中间件架构图
多核通信中间件在初始化时需要将配置表转换成转发表,配置表是多核通信中间件的输入,包括发送配置表和接收配置表。转发表是多核通信中间件将配置表转换后形成的,在进行多核通信转发时用到的信息都在转发表中。转换算法分为组播算法和内部转发算法[2]。
发送和接收配置表的信息主要包括消息ID、消息类型、端口名称、消息大小、最大消息数量、以及内部和外部标志等。发送和接收配置表使用相同的结构体,结构体成员信息如下。
发送转发表的信息主要包括消息ID、消息类型、消息大小、消息数量、发送端口portID、核间通信时对应的接收转发表的索引、内部外部标识等。发送转发表的结构体成员信息如下。
接收转发表的信息主要包括消息ID、消息类型、消息大小、消息数量、接收端口portID数组、接收端口PortID数量、核间通信时对应的发送转发表的索引、内部外部标识等。接收转发表的结构体成员信息如下。
发送转发表与接收转发表不同的地方在于接收转发表的端口portID是数组。当多核通信中间件收到FC总线消息或者分区应用的消息后,将消息组播到对应分区,而接收端口的portID数组则保存了组播时需要的端口信息,进行组播时遍历这个数组,逐条转发。
组播算法的核心思想是将接收配置表的信息进行重组后转化成接收转发表,当多核中间件进行转发时,读取转发表的信息就可以完成组播消息转发。配置表和转发表的转换是遍历配置表里的所有消息ID,当配置表中有多个相同的消息ID时,代表这些相同的消息ID为组播消息。转发表过滤并记录这些相同的消息ID,并保存在数组中,在进行转发时,遍历这个数组就可以逐条转发[3]。
假设接收配置表为集合T={T[0],T[1],T[2],T[3]…},假设接收转发表集合S={S[0],S[1],S[2],S[3]…}
(1)初始状态,转发表接收集合S={0}为空,配置表接收集合T={T1,T2,T3,T4…}。接收转发表结构体创建时被初始化为0。
(2)遍历接收配置表的每一项,并和接收转发表的每一项的消息ID进行比对。
(3)如果接收配置表的消息ID和接收转发表的消息ID不同,则将接收配置表的消息ID等信息复制到接收转发表的当前最后一项中。
(4)如果接受配置表的消息ID和接收转发表的消息ID相同,则说明有组播消息,因为在组播消息中多个接收的消息ID相同,在转发表中需要将这些相同的消息ID进行记录,相同消息的ID不再在转发表中占用新的结构体空间,而是将这些相同的ID放到一个结构体空间中,只需要记录其portID即可,这样在进行转发过的过程中,收到消息后,遍历所有对应的发送PortID即可。
由于vxWorks653 3.0提供了基于port的核间通信机制,因此分区之间的应用即可以通过FC总线进行通信,也可以不经过FC总线,中间件收到分区的消息后,直接转发到对应的接收分区。这样可以减轻FC总线通信压力。
集合T代表转发表中发送信息,包括发送消息msgID、发送端口portID、内部转发标志、内部转发对应的接收索引等。集合R代表转发表中的接收信息,包括接收消息msgID、接收端口portID、内部转发标志、内部转发对应的发送索引等。
遍历转发表中接收信息的每一项,判断其内外转发标志,如果是外部,即标志为EXTRAL,代表消息从FC总线接收,此时内部转发对应的发送索引设置为-1。
如果是内部,即标志为INTERNAL,代表消息直接从分区中接收。遍历转发表中的发送信息的每一项,如果发送信息中的消息msgID和接收信息中的消息msgID相同,则发送信息中的结构体记录接收信息的索引,同样接收信息的结构体记录发送信息的索引。
应用程序接收任务负责从FC总线接收数据或者从其他分区中接收数据然后转发到对应的分区应用中。
图3 应用程序接收任务流程图
(1)遍历接收转发表中的每条信息,判断内部外部标志。
(2)如果是外部标志,则说明任务从FC总线接收数据,然后再组播到对应的分区应用中。其中单播是组播的一种情况,只是需要转发的消息个数为1,这样就可以都统一按照组播转发。
(3)如果是内部标志,则说明任务是从其他分区中接收数据,然后再组播到对应的分区应用中。其中单播是组播的一种情况,只是需要转发的消息个数为1,这样就可以都统一按照组播转发。
应用程序发送任务负责将分区应用中的数据发送到FC总线或者转发到对应的其他分区应用中。
(1)遍历发送转发表中的每条信息,判断内部外部标志。
(2)如果是外部标志,则说明任务从应用分区中接收数据再发送到FC总线。
(3)如果是内部,则说明任务从应用分区中接收数据直接组播到其他分区中。其中单播是组播的一种情况,只是需要转发的消息个数为1,这样就可以都统一按照组播转发。
本文提出了基于FC总线的多核通信中间件实现方案,该方案对于分区间通信本文提供了两个可以配置的方案,即发送分区将数据发送到多核通信中间件,中间件根据配置信息,即可以将数据发送到FC总线后再经过FC交换机转到多核通信中间件,中间件再将数据发送到接收分区中。还可以将数据直接转发到接收分区中。这样可以减轻FC子卡的通信压力。同时本文中的多核通信中间件还实现了消息多播功能。经过测试,该方案转发效率高,配置灵活。
图4 应用程序发送任务流程图