无人机飞行控制软件负荷均衡策略设计

2018-06-21 00:53周星宇李春涛
电光与控制 2018年6期
关键词:功能模块静态总线

周星宇,李春涛,姚 瑞,范 影

(南京航空航天大学自动化学院,南京 210016)

0 引言

随着无人机飞行任务越来越多样化,功能越来越复杂,飞行控制系统的任务负载日益繁重[1],为提高飞行控制系统性能,出现了分布式架构的飞行控制系统,系统各节点均进行任务解算,需要将解算任务合理分配至多个节点上,共同完成复杂的飞行控制任务[2]。与此同时,随着系统的运行,各个功能模块的负载会发生变化,进而导致各个节点的负荷变得不均衡,造成系统运行效率下降以及资源的极大浪费。

针对上述问题,本文以基于CAN总线的飞行控制计算机为硬件平台,VxWorks操作系统为软件平台,利用软件总线设计了飞行控制软件的静态和动态负荷均衡策略,对各个解算节点的负荷进行合理分配,保证了各个节点的高效持续运行,进而提高了飞行控制系统的可靠性。

1 飞行控制软件运行平台

1.1 硬件平台

基于CAN总线的分布式架构飞行控制计算机如图1所示。该目标机由4个节点组成,节点之间采用分工协作的方式,分别负责不同的功能模块,通过CAN总线进行数据的通信。与其他总线相比,CAN总线数据传输速度较高、具有自我诊断能力以及抗干扰能力强的优势[3],满足了飞行控制系统内部通信的需求。

系统的功能和资源分布在不同的节点上,当某一个节点负荷不均衡时,可执行相应的处置逻辑,将部分功能模块进行迁移,达到分担负荷的目的。同时,当系统接口需求增加时,可通过增加节点实现接口资源的扩展。

图1 飞行控制计算机结构Fig.1 The structure of flight control computer

1.2 软件平台

飞行控制系统作为硬实时系统,对系统的响应时间有严格的要求,要求系统对外部事件能够做到快速响应以及多任务处理。VxWorks是专门为实时嵌入式系统设计开发的操作系统软件,具有易裁剪、高性能、高可靠性以及高实时性等优点[4]。VxWorks高效的实时任务调度、较短的中断调度时间使其能够满足飞行控制软件对实时性的要求。

2 软件总线结构

为了能够实现整个系统的负荷分担和功能模块迁移,需要软件总线提供功能模块的注册和删除、资源的统一管理和调度以及保证各节点内存资源一致性的功能。软件总线的结构如图2所示。飞行控制软件按功能和任务间的耦合性大小划分为遥控遥测功能模块、传感器数据采集模块、传感器数据融合模块、故障监测与处置模块、导航制导模块、控制律解算模块及控制输出管理模块等,对其进行统一的接口封装使其能够方便地挂接到软件总线上。软件总线内部的模块管理器可以对模块进行相应的加载和删除[5]。同时,软件总线能够利用自身的资源管理器对内存资源池进行管理,完成节点内不同功能模块之间数据资源的交互以及节点之间数据的传输,保证节点的解算同步[6-7]。

图2 软件总线结构图Fig.2 The construction of software bus

3 节点间的负荷分担策略设计

3.1 功能模块运行时间与负载统计

飞行控制系统节点的负载与节点中运行的功能模块数量、模块的运行时间和调用频率有关,即模块数量越多,运行时间越长,调用频率越高,则CPU的利用率越高。因此,定义模块的负载为1 s内模块运行花费时间的总和,即该模块完成一次运行所花费的时间与模块调用频率之积。因为各功能模块的负载是负荷均衡处理时的主要判断依据,所以首先需要完成对飞控系统各个功能模块的运行时间的统计。各个功能模块参数见表1。

表1 功能模块参数统计表Table 1 Parametric statistics of function module

3.2 静态负载均衡

静态负载均衡是指在飞控系统运行的初始时刻,主节点根据各模块负载的统计结果,通过静态负载均衡算法进行计算,再将所有功能模块均衡地分配至3个解算从节点上,使得飞控系统在开始运行时能够合理地利用各节点的资源,为后续系统实现动态负载均衡奠定基础。

为了能够实现静态负载均衡,分配功能模块时,需要遵循以下两个原则。

1) 功能模块完全分配原则,即各个节点功能模块的个数总和应该与全局的功能模块个数相等,不允许出现功能模块未被分配的情况。

2) 节点负载均衡原则,即根据飞控软件中的功能模块负载的大小,将各个节点的负荷分布在一个负载均值范围内。假设每个功能模块的负载大小为Mi(i=1,2,…,n),每个节点的负载为Pi(i=1,2,3),理想负载为Pideal,则各个节点的实际负载与理想负载和功能模块负载之间的关系为

(1)

根据上述两个原则,设计静态负载均衡算法:假设各个节点的负载为nodeload[i](i=1,2,…,n),首先对节点1进行分配,对所有功能模块依次进行判断,如果节点1的负载加上该功能模块后使节点1的负载与理想负载Pideal的偏差更小,即满足式(2)时则将该模块分配至节点1,否则不进行分配。节点1分配完成后,节点2同理。根据功能模块完全分配原则,在为节点3分配功能模块时,需要将所有未分配的功能模块分配至节点3中,这样可以避免出现部分功能模块未被分配解算节点的情况。

|Pideal-nodeload[i]-Mj|<|Pideal-nodeload[i]|。

(2)

静态负载均衡的具体流程如图3所示,其中,i为节点号,j为功能模块ID号,n为模块总个数。

图3 静态负载分配算法Fig.3 Static load allocation algorithm

3.3 动态负载均衡

随着系统运行时间的推移,无人机飞行阶段会进行切换,飞行模态会发生改变,各个功能模块的数据解算量会发生变化,同时飞行控制软件中存在事件触发型的任务,如当部分传感器受到外界干扰而发生故障时,相应的故障处置任务会被激活,从而各个节点的负荷会产生变化,与最初利用静态负载均衡划分的结果产生一定的偏差,此时就需要使用动态负荷均衡策略才能实现各个节点在运行过程中始终保持较为合理的负荷,保证系统的正常运行[8-9]。动态负载均衡主要涉及负载均衡的决策和功能模块的动态迁移。

根据国军标要求,每个处理器的CPU利用率不应超过70%。当CPU利用率超过70%时,系统的稳定性会下降,需要留出一定的裕度,因此设定CPU利用率U

的上限和下限分别为60%和10%。超过上限的为过载节点,低于下限的则为轻载节点,在上下限之间的为中载节点,如图4所示。节点负载过重可能会导致相关的飞控任务不能及时得到执行,出现安全隐患,因此该节点要主动向主节点提出申请,将部分功能模块迁移至负载相对较轻的节点;同时负载较轻的节点由于执行任务较少,会造成资源浪费,因此负载较轻的节点要主动向主节点申请成为模块迁入节点,接收相应的功能模块的迁入。

图4 不同负载状态下的节点类型划分Fig.4 Node type partitioning in different load states

由于各个节点均使用MPC565作为主控芯片,可以认为各个节点的处理能力相当,只需要将负载最小的节点作为迁入节点即可,所以实现动态负载均衡的重点在于确定需要迁出的功能模块,这时需要考虑两方面的因素:功能模块迁移后对迁入和迁出节点负载的影响以及模块迁移对通信开销的影响。

在进行模块迁移时,可能出现迁移的模块负载过小,完成模块迁移后,当前节点仍处于过载状态,以及迁移的模块负载过大,导致迁入节点的负载大大增加,进入了过载状态的情况。为了避免上述情况的发生,在完成模块迁移后,迁出节点和迁入节点的负载比较接近是最理想的状态,即使得迁移的功能模块的负载接近于理想负载U0,即

(3)

(4)

图5 数据耦合性的变化Fig.5 Changes in data coupling

对于节点内的数据耦合,功能模块需要的资源可以直接从软件总线的资源池中读取。但是对于节点间的数据耦合,则需要考虑节点间数据的传输和更新的时间。因此,节点内的数据耦合对系统造成的影响与节点间的数据耦合造成的影响相比可以忽略。所以仅考虑节点间的数据耦合对功能模块迁移造成的影响,则模块迁移后对系统造成的数据耦合变化为

(5)

由于上述模块迁移过程中两个因素的量纲不一致,在进行评估时需要进行标准化处理,具体的方法为

(6)

(7)

因为上述两个因素对模块迁移产生的影响大小不同,所以利用权重因子作为在对一个功能模块进行综合评价时两个因素所占比重,分别定义模块负载所占比重和节点间通信开销所占比重为Wload和Wcoup,所以各个功能模块综合评价结果为

vi=Wload*li+Wcoup*ci

(8)

式中,vi是模块Mi的综合评价结果,因此将迁出节点中功能模块的vi的最小值作为迁出模块。这样的评价机制能够避免将数据耦合较大的模块分配至不同的节点,同时考虑了迁移前后负载的影响,使得飞控系统的各节点能够处于负载均衡状态。

3.4 功能模块迁移

无人机飞行控制系统具有高实时性的要求,模块迁移延迟时间是衡量迁移算法的重要指标,即延迟时间越小对系统影响越小。而传统的基于网络通信的动态迁移算法,如内存预拷贝算法,由于需要将源主机的全部状态通过反复迭代的方法传输至目标主机而产生数据重复拷贝导致总时间增加[10]。针对上述问题,本文利用VxWorks操作系统中提供的动态加载机制和软件总线设计了模块预加载算法。

飞行控制系统中每个节点均利用VxWorks操作系统的TrueFFS功能组件建立文件系统[11],并在文件系统中存储所有功能模块的文件,当相应的功能模块需要运行时,利用软件总线中的模块管理器将相应的目标文件从文件系统加载至内存中执行。同时,各个功能模块运行所需的信息在各节点上均是互相备份的,因此与传统的动态迁移方法相比,当模块迁出时,不需要将相应的信息传输至目标节点,只需要利用软件总线的模块管理器卸载相应的功能模块,减少了功能模块迁移时系统资源的开销和传输的延迟。

模块预加载算法的具体流程如下:首先从迁入节点的文件系统中读取需要进行迁移的功能模块,实现预加载并进入运行状态,使能各个节点中软件总线的仲裁功能,即各个节点对内部资源池的更新仍使用迁出节点解算的结果,并向主节点发送加载完成应答信号;主节点接收到应答信号后,发送模块卸载信号至相应的迁出节点,迁出节点调用VxWorks操作系统提供的unld()库函数完成该模块的卸载后向主节点发送卸载完成信号;主节点在接收到卸载完成信号后,再在物理总线上广播仲裁功能关闭信号帧,使各个节点关闭仲裁功能,此时对资源池的更新使用迁入节点解算的结果。具体的迁移过程如图6所示。

图6 功能模块迁移流程Fig.6 The process of functional module migration

3.5 可靠性分析

可靠性作为飞行控制系统的一项重要指标,决定了无人机飞行的安全。为了定量分析系统的可靠性,利用可靠性分析模型对样例飞行控制系统和基本三余度飞行控制系统的可靠性进行对比分析。

系统可靠性的度量称为可靠度,记作R(t)。由文献[12]可知,在一个无冗余系统(即单节点系统)中,系统的可靠度可以表示为

R(t)=e-λt

(9)

式中,λ为失效率,单位为失效数/h,在系统正常生命周期中为常数。

通常采用将飞行控制系统设计为双余度和三余度等结构的方法来提高飞行控制系统的可靠性。基本三余度结构如图7所示,该结构中包括3个解算单元和1个表决器,各解算单元运行同样的解算任务,表决器根据各解算单元的结果进行处理,输出最终的结果,即该结构为并-串联结构。

图7 基本三余度飞行控制系统Fig.7 Basic triplex-redundancy flight control system

由于3个解算单元和表决器具有相同的结构,因此各解算单元和表决器具有相同的可靠度。假设失效率为λnode,则各节点的可靠度为R(t)=e-λnodet。根据并-串联可靠度公式[13]可得该系统的可靠度为

Ra(t)=(1-(1-e-λnodet)3)·e-λnodet。

(10)

样例飞行控制系统的可靠性分析结构如图8所示,该结构为并联系统结构。

图8 样例飞行控制系统可靠性分析结构Fig.8 The construction of sample flight control system for reliability analysis

假设样例飞行控制系统各节点与三余度飞控系统的解算单元结构相同,可以得到各节点的可靠度为R(t)=e-λnodet。由于功能模块可以由系统中任一节点加载运行,因此根据并-串联可靠度公式可得该系统的可靠度为

Rb(t)=1-(1-e-λnodet)4。

(11)

根据文献[13]和工程经验,取λnode为10-5/h,绘制了两种结构的飞行控制系统的可靠度对比曲线,如图9所示。

图9 可靠度对比曲线Fig.9 The curves of reliability

从图9中可以看出,负载均衡的飞行控制系统与基本三余度结构相比,可靠度得到大幅度提高,满足飞行控制系统可靠性的要求。

4 测试验证

为了验证负荷分担策略的正确性和合理性,需要对功能模块分配结果以及各个节点的CPU利用率是否能够动态地处于中载状态进行测试与分析。

4.1 静态负载均衡功能测试验证

整个飞行控制系统上电后,首先进行各个节点的初始化,待所有节点初始化完成后,主节点根据表1中的数据执行静态负载均衡分配算法,并将功能模块分配的结果输出至各从节点,分配结果如图10所示。

图10 静态负载均衡分配结果Fig.10 The result of static load allocation

从图10中可以看出,节点1分配的功能模块分别为GPS模块、IMU模块、空速计/高度计模块和导航制导模块,节点2分配的功能模块分别为数据融合模块、控制输出模块、故障监测与处置模块和遥控接收模块,节点3分配的功能模块分别为控制律解算模块和遥测发送模块。根据计算,3个解算节点的CPU利用率应分别为27.2%,26.7%和24.8%。

在完成静态负载均衡后,对各个节点的负载情况进行实时监测,结果如图11所示。由监测结果可知,各个解算节点在完成静态负载均衡后CPU利用率均在26%左右,与理论计算值相符。结果表明,负荷分担式飞行控制软件在进行静态负载均衡时能够做到准确均衡地分配各个功能模块,使系统的初始状态处于一个较为合理安全的状态。

图11 静态负载均衡分配后各节点负载情况Fig.11 Load of each node after static load allocation

4.2 动态负载均衡功能测试验证

为了便于验证动态负载均衡及估计各个节点的负载,同时模拟系统受到外界干扰时的情况,在静态负载均衡的基础上进行手动分配,将IMU模块、数据融合模块、控制输出模块以及故障监测与处置模块分配至解算节点3。通过图12可以看出,完成功能模块手动分配后,节点1的CPU利用率为14.56%,节点2的CPU利用率为1.4%,节点3的CPU利用率为62.3%。负荷较轻的节点2首先会根据主节点的调度结果,加载需要迁移的功能模块,待系统稳定运行后,过载节点3将迁出的功能模块卸载,此时,进行了负荷分担的2个节点的CPU利用率比较接近,均在32%左右,达到了预期的效果。

图12 某一个节点过载时的动态负载均衡Fig.12 The process of dynamic load balancing when a node is overloaded

综合上述测试分析,当系统受到外界干扰时,动态负载均衡策略能够根据系统与理想负载的偏差进行调整,使得系统各节点的负载始终处于合理的状态,能够保证系统持续高效运行以及节点间的负载均衡,提高了分布式架构无人机飞行控制软件的可靠性和安全性,能满足系统的要求。

5 结语

本文结合分布式飞控系统的结构特点,设计了飞行控制软件的负荷均衡策略,最终实现了分布式架构下节点间的静态和动态负载均衡,使得整个系统能够持续高效地运行。通过测试和分析,表明系统中各个节点均能够动态地处于中载状态,多个节点能够可靠、稳定地协同工作,为分布式飞行控制软件设计提供了新思路。

参考文献

[1] 孟冲.小型无人机负荷分担式容错飞行控制软件设计[D].南京:南京航空航天大学,2014.

[2] 张增安,陈欣,吕迅竑.一种用于无人机的分布式飞行控制系统设计[J].计算机系统应用,2010,19(8):16-19,61.

[3] 吴建军,郑国辉,张小林.中小型无人飞行器二余度CAN总线网络设计[J].计算机测量与控制,2012,20(3):813-815.

[4] 张杨,于银涛.VxWorks内核、设备驱动与BSP开发详解[M].2版.北京:人民邮电出版社,2011:36-42.

[5] 靳朋飞.基于VxWorks的软件总线及其自主恢复技术[D].西安:陕西师范大学,2013.

[6] 贾振宇.基于软总线的组件式飞行控制软件设计[D].南京:南京航空航天大学,2016.

[7] BRUCE-BOYE C,KAZAKOV D A.Distributed data acquisition and control by software bus[J].自动化博览,2004,21(5):98-99.

[8] 刘洋,李林峰.调度机制对CPU-MEM负载共享系统的性能影响[J].计算机工程与设计,2008,29(3):633-638.

[9] 宁涛.面向嵌入式应用的动态加载机制研究[D].重庆:重庆大学,2008.

[10] 李建彬.基于虚拟机的分布式容灾备份技术研究[D].长沙:国防科学技术大学,2010.

[11] 谭明.TrueFFS文件系统的底层结构与性能研究[D].长沙:国防科学技术大学,2010.

[12] 袁由光.容错计算原理[M].哈尔滨:哈尔滨工程大学出版社,2005.

[13] 石贤良.飞行控制计算机系统余度管理技术研究[D].西安:西北工业大学,2006.

猜你喜欢
功能模块静态总线
最新进展!中老铁路开始静态验收
基于PCI Express总线的xHC与FPGA的直接通信
机载飞控1553B总线转以太网总线设计
基于ASP.NET标准的采购管理系统研究
输电线路附着物测算系统测算功能模块的研究
M市石油装备公服平台网站主要功能模块设计与实现
功能模块的设计与应用研究
具7μA静态电流的2A、70V SEPIC/升压型DC/DC转换器
多通道ARINC429总线检查仪
基于EtherCAT总线的ROV控制系统设计