[摘要]随着汽车域集中式架构诞生,搭载智能芯片的汽车域控制器成为新一代电子电气架构的主控单元。域集中式架构依靠车载以太网相连接,计算节点广泛分布在多个域控制器的智能芯片内,需要一套面向服务架构的分布式并行计算模型将计算节点性能充分释放出来。本文开发了一套面向服务架构的轻量级通信中间件,并基于该服务通信中间件实现了分布式并行计算模型,得出了分布式计算分割系数计算表达式,研究了计算节点负载阶跃波动时对分布式并行计算模型的影响。结果表明:域控制器面向服务架构的分布式计算模型具备负载自平衡能力,能够对智能芯片运行时阶跃负载实现快速任务重分配,保证循环任务的计算开销耗时最小,计算周期最短。研究结果为汽车域控架构下分布式计算框架设计与开发提供了重要参考依据。
前言
随着汽车智能网联的发展,汽车电子电气架构逐渐从原本的分布式架构向域集中式架构升级[1]。原本需要多个ECU协同作用实现的功能,在智能网联车辆域集中式架构下,只须采用一个域控制器来代替多个ECU功能[2-3]。域控制器按照功能划分,依次是智驾域、座舱域、车身域、底盘域、动力域这5个域,各域通过车载以太网接入中央网关[4]。域控制器内部的智能芯片,从成本与功耗角度考虑,很多情况下并不是采用一个高算力芯片,而是采用多个低算力芯片或是异构芯片,如DSP、FPGA、MCU、GPU等等,共同实现某个功能[5-6]。
考虑到这种电气架构特性,大型计算任务如果要保证实时性,须采用分布式计算的方式,将域控制器内多个计算单元进行联合。因此,需要开发一套基于车载以太网通信中间件,配合分布式并行计算的模型,实现大型高耗时任务在多芯片之间的分配调度,同时还须考虑域控制器负载波动变化对计算任务的影响,设计自适应计算任务分配方案,保证最优的分布计算性能[7-8]。
1 面向服务架构的通信系统
目前汽车域集中式电子电气系统都是采用面向服务的通信架构(SOA),可以保证数据只要在有需求时才会发送,无需求时则让出以太网带宽,降低了以太网负荷,保证各个单元之间数据交互的高效性[9-10]。要实现域控系统下,不同计算单元之间的服务通信,须依靠通信中间件,从而保证各个节点之间通信交互的数据、协议、流程、接口的统一性[11-12]。如图1所示,通信中间件一般是在网络7层模型中,处于TCP/UDP 车载以太网通信协议的上层,在TCP/UDP的数据区内定义额外的信息,从而来实现预期的通信流控制和交互。
图1 服务通信中间件与以太网7层模型的关系
考虑到Linux 系统的Epoll 具有优秀的并发特性[13],本文中基于Epoll并发功能,实现自研轻量级服务通信中间件。通信时,首先是通过套接字建立客户端与服务端的连接,再把服务对应函数和对应的函数ID注册到服务端列表中。客户端通过组装字头信息和数据信息,把整个数据包按批次发送到服务端。服务端再通过解析包头内的函数ID和数据长度信息,把包头后相应长度的二进制数据流送入相应ID的服务回调函数中计算处理,最终将计算结果打包成对应的包头和数据包返回客户端,完成本次服务通信,流程如图2所示。
图2 自研轻量级服务通信流程
之所以采用自研轻量级服务中间件,主要是考虑分布式并行计算通信对实时性以及大数据包快传的要求。图3给出了汽车域控架构通信系统中最为常用的两种通信中间件SOMEIP[14]和DDS[15]与自研轻量级服务中间件的实时性对比。SOME/IP采用了开源社区提供的VSOME/IP,DDS采用了开源社区提供的fastDDS。
图3 通信中间件性能对比
VSOME/IP未经过TP协议分包,只能支持单包KBytes以下的数据传输,且因为开源代码性能较差,固定通信延迟有5 ms,不符合本文研究要求。fastDDS对于KBytes以下的数据包,有很好的传输实时性。当数据包达到MBytes等级,fastDDS受内部代码机制及程序堆栈大小限制,不能很好地支持MBytes数据单包传输。
分布式并行计算模型的通信量较大,对通信延迟要求较高[16],因此本系统理论验证和功能实现上,只对数据包大小和通信延迟这两个中间件指标有要求。相比于开源中间件,自研轻量级服务通信中间件,在KBytes、MBytes直至GBytes的数据包等级,都能够实现数据包自动分包传输,实时性也远优于开源中间件。综上所述,为了达到更快更好的服务通信效果,本文中选择自研轻量级服务通信中间件,作为分布式并行计算模型的数据通信实现方式。
2 自适应分布式并行计算系统
2. 1 自适应分布式并行计算模型
首先假设一个高耗时的计算任务可以被分解为k 个可并行的计算子任务,则任务的分解公式可以表示为
式中:为总任务量;为分解的第个任务量。实际任务分割时,计算任务是一个离散量,存在一个最小的计算任务颗粒度,比如一个大型矩阵A 乘以大型矩阵B,分割时如果选择矩阵的行数,那么任务分割最小的颗粒度则是矩阵A 的1行乘以矩阵B 的计算量,则任务的分解公式可以表达为
式中:为分割任务的最小计算量;为第个任务的分割系数;N 为正整数集合。考虑通信时延波动和系统波动,且各个线程间需要时间同步和结果汇总,所以这个高耗时计算在并行计算框架下,实际的运算周期如下式所示:
式中:为各个计算子任务的耗时;为任务分配组数;为并行计算框架下实际的运算周期。因此分布式并行计算模型就是根据系统状态参数,在存在系统干扰下,求解一个最优的集合,使得max()最小,保证计算任务实时性[17]。
对于一个确定的计算任务运算在一个确定的分布式计算系统上,运算时间总量是基本不变的,因此修改让最小的话,主要是需要将子任务耗时集合尽可能往平均量上靠近。离平均值越大,则需要对相应的修正越多;耗时越久,则须减少对应的任务分配数,由此可以得出以下的反馈修正公式:
式中n 表示n 时刻的分割因子。公式表示每一时刻分割因子都是由上一时刻的分割因子减去计算耗时差异度反馈修正函数,且要满足本次循环分割后,下式所表示的等式。
转化为反馈修正式即满足下式:
式中:表示n 时刻分割系数相比上一时刻分割系数的修正量;Z表示整数集合。本文设计了一种基于对平均值偏差的比例反馈分割策略,函数表达式如下:
式中:int函数表示向零的取整;ε 是允许的阈值误差比率。式中子任务耗时偏差百分比除以阈值误差比率,得出计算修正量,再进一步取整,得到实际修正量。
采用这种修正方式,可以实现“大偏差快调,小偏差微调”,让子任务耗时偏差快速修正到最小,计算任务分配效果达到最优。
2. 2 系统硬件平台
自适应分布式并行计算系统由一块搭载3颗车用智能芯片的域控制器构成。芯片之间通过车载以太网连接,然后再通过以太网连接PC,让PC端控制整个智能芯片平台的程序启动与停止。整个系统的实物如图4所示,网络节点拓扑图如图5所示。
图4 试验系统实物图
图5 网络节点拓扑图
试验时首先将目标程序及中间件通过SSH协议传入域控制器端和主机端,通过主机端命令窗口统一控制主机和域控制器之间的通信。
首先启动域控制器上节点1和节点2的计算服务程序,数据会通过应用层-中间件-系统内核-硬件驱动的次序,从节点0进入以太网,然后在另一端从硬件驱动-系统内核-中间件送到节点1和2的应用层,调用计算服务对数据进行运算,运算完成后,再反方向返回。
件驱动的次序,从节点0进入以太网,然后在另一端从硬件驱动-系统内核-中间件送到节点1和2的应用层,调用计算服务对数据进行运算,运算完成后,再反方向返回。
计算负载则是通过主机控制节点启动芯片计算节点上的负荷加卸载程序,对芯片提供持续负荷,通过主机观察分布式并行计算系统对计算负荷变化的响应情况,完成功能验证。系统的交互控制流程示意图如图6所示。
图6 交互控制流程示意图
3 试验结果分析
3. 1 计算任务时间对比
计算任务发起方选择CPU0(节点0),计算任务服务方选择CPU1(节点1)和CPU2(节点2),计算参考任务为400行400列的矩阵A 乘以400行400列的矩阵B。图7给出了不同计算方式时,计算该任务所需要的耗时以及计算负荷对比。
图7 计算任务参数对比
从图中可以看出,对于一个多核(4核)智能芯片,本地单线程运行计算操作会把其中一个核的计算负载拉满,达到25%左右的计算负荷,每个周期的计算耗时需要5. 75 s。将任务进行分割,处理成本地多线程并行计算形式,本地的CPU负荷可以提升至98%,计算耗时也从5. 75缩减为1. 56 s。
采用本文的分布式并行计算系统,使用域控制器中3个智能芯片作为计算节点,CPU负荷会平均分摊,任务发布端CPU0的负荷会稍高,同时计算耗时也会从1. 56降低至0. 58 s。
由此可知,采用本文设计实现的分布式并行计算系统,可以有效缩短计算任务运行时间,将整个车载以太网上各个节点的计算性能充分释放出来。
3. 2 单CPU 阶跃负载对分布式计算系统的影响
计算任务发起方选择CPU0,计算任务服务方选择CPU1和CPU2,计算参考任务为400行400列的矩阵A 乘以400 行400 列的矩阵B。计算平稳后,在CPU1上依次启停25%、50%、75%、100%的阶跃负载任务,则分布式计算系统的响应效果如图8所示。
图8中纵坐标参数的物理含义解释如下。
计算耗时是指计算任务分配前,与计算结果收到时两者之间的时间差。该时间差包含了数据包发送与接收、网络通信延迟等影响。
图8 单CPU阶跃负载分布式计算性能曲线
CPU 负荷是芯片计算时,实时监测的负载率。分割系数是本模型的任务分割数pi。CPU阶跃负荷是启动一个多线程负荷加载程序,理论上应该给系统产生的负荷。比如四核芯片,开四线程无休循环形成负载,理论上就是100%的CPU阶跃负荷。
从图8可以看出,系统稳定时各个计算节点包括通信和计算在内的开销耗时相差不大,从而保证3个任务几乎能同时完成,每次计算循环的周期时间最少,CPU0负荷略高于CPU1和CPU2,数值差异较小。
任务分割系数上,分给CPU0 的任务数略高于CPU1和CPU2,这种分配的原因在于本地计算无须承担通信开销,因此可以计算较多的任务,而CPU1和CPU2还须加上通信的时间开销,所以会相对而言少分配一些任务,保证各个计算子任务开销时间相近。
当给CPU1启动多线程反复循环的负荷加载程序,这种瞬时的阶跃负载会导致CPU1计算开销总耗时突然增多,经过一段时间后,3个计算节点的开销耗时达到新的平衡点,保持近似相等的水准。这种现象产生的原因是自适应分布式计算策略会根据开销耗时,迅速调整任务分割系数,大幅降低给CPU1的计算任务数量,同时把CPU1原本的计算任务迁移到CPU0和CPU2上,保证三者相近的计算开销耗时,保证每个循环的周期最小。根据CPU负荷变化可以看出,25% 的负载对CPU1负荷影响不明显,而到了50%、75%和100%,CPU1负荷会随之上升,最终达到100%全负荷运行状态。
当CPU1负载突然卸除,CPU1计算开销耗时又会瞬间下降,CPU0和CPU2计算开销耗时会跟随下降,然后三者很快达到平衡。从任务分割来看,CPU1负载突然释放,系统会自动判断出CPU1能够提供更多资源用于计算,因此会调整更多的任务给CPU1,同时降低CPU0和CPU2的任务量。
从系统响应时间上看,任务分割系数调整以及开销耗时调整都小于5 s。从25%、50%、75% 到100%的阶跃负载任务对比来看,模型能够对不同阶跃负载任务实现自适应分布式计算平衡,随着系统总负载增多,计算耗时随之增大。
在任务分配上,随着计算节点阶跃负载任务的增大,相应节点分配的计算量会逐渐减小,但并不会完全降低为零。主要是因为智能芯片自身的调度策略,会保证所有运行的进程都能获得一部分计算资源,理论上100%负荷的程序,并不会真正意义上完全占有芯片运行时间,CPU1依然能承载一部分计算任务。
综上所述,自适应分布式计算系统能够对不同百分比的阶跃负载实现快速自适应平衡效果。
3. 3 多CPU 阶跃负载对分布式计算系统的影响
计算任务发起方选择CPU0,计算任务服务方选择CPU1和CPU2,计算参考任务为400行400列的矩阵A 乘以400行400列的矩阵B。在计算平稳后,进行如下步骤:
(1)在CPU1启动一个25%的阶跃负载任务;
(2)稳定后在CPU2 上启动一个50% 的阶跃负
载任务;
(3)稳定后CPU1停止25%阶跃负载任务,启动75%阶跃负载任务;
(4)再次稳定后CPU2停止50%阶跃负载任务,启动100%阶跃负载任务;
(5)最后依次停止CPU1、CPU2 的阶跃负载任务。
从图9可以看出,每次负载阶跃变化时,响应特性和单CPU阶跃负载的变化相同,只是各个子任务计算开销耗时的平衡点发生了相应变化,分割系数上对应CPU阶跃负荷的提升,会迅速降低分配给该CPU的任务,保证各个子任务计算开销耗时一致,同时调整的效应时间也小于5 s。
图9 多CPU阶跃负载分布式计算性能曲线
4 结论
根据新一代域控制器面向服务的架构,设计了分布式并行计算模型,结合智能芯片域控制器平台开发了相应服务通信中间件系统,实现了分布式计算模型,并配套设计实现自适应计算耗时平衡策略,验证了策略的有效性,主要结论如下。
(1)采用分布式并行计算能够显著提升芯片计算资源利用效率,大幅降低周期任务计算时长。提升的运算速度倍数与分布式并行计算的节点总核数有关,考虑到通信开销,会略低于实际总核数。
(2)对于单CPU 阶跃负载工况,子任务计算开销耗时会瞬间增大,然后经过自适应分布式计算模型的任务自动重分配,让各个子任务计算开销耗时重新恢复相近水平,整个过程各个子节点的CPU负荷没有明显变化。
(3)对于多CPU 阶跃负载工况,计算任务自适应分配效果良好,计算系统自适应调整至新的平衡点耗时小于5 s,响应迅速且CPU 负荷没有明显变化。
本文中提出的分布式计算模型,只采用搭载智能芯片的域控制器进行功能验证,考虑情况较简单,工程化应用范围有限。面对实际车载网络复杂多变的通信情形时,还须结合具体的硬件平台网络特性,进行针对性的优化开发。
未来将会在本文的理论基础上,针对更加复杂的实际车载网络,开展更加深入的研究工作,达到更好的工程化应用效果。