RK3399/RK3588+pcie+Zynq 多核架构可穿戴设备设计方案
在很多领域,人们对可穿戴设备的可靠性有着非常高的要求。这些使用场景不仅丰富多样,而且复杂多变。这使得可穿戴设备不仅需要应对应用和系统本身的状态变化,也要考虑到设备所处环境所带来的异常情况。所以,针对不同安全等级的任务制定不同的调度策略,有利于可穿戴设备在复杂的运行环境下最大程度地保证系统的可靠性。
3.2 调度平台需求分析
可穿戴设备具有应用场景丰富、任务类别众多等特点。然而对于大部分场景来说,能够提供给可穿戴设备的体积都十分有限,因此对系统的功耗和散热提出了较高的要求。针对这些特点,通过对可穿戴设备的分析,将计算平台的需求归纳为以下几点:
(1)计算平台需要具备执行多种类型计算任务的能力。
(2)计算平台的计算资源较为有限,在实现应用功能的时候应该尽可能少的占用计算资源。
(3)对于多种类型的计算任务,需要根据其对系统的重要性分配不同的关键等级。
(4)平台能够根据不同任务的关键等级采取不同的调度策略,以保证系统的功能和性能。
(5)调度平台能够保证系统的实时性、可靠性。
3.3 可穿戴设备硬件分析
随着半导体技术的迅猛发展,计算机的性能飞速提高,但是近几年芯片的发展却达到了瓶颈。越来越复杂的电路,越来越高的开发成本,使得处理器性能无法再按照摩尔定律进行发展,导致计算性能无法满足数据体量的要求。通过引入特定的计算单元,让计算机系统成为混合结构,混合结构中的每一种不同类型的计算单元都可以执行最擅长执行的任务成为了一种有效的解决方案。CPU 虽然在运算能力上相对较差,但是擅长管理和调度;GPU 虽然管理调度能力较差,但是拥有更强的计算能力,通过多进程并发,适合处理整块的流数据;FPGA 开发周期长,开发难度大,但是并行度大,并且有着最强的实时性。为了在满足设备对功耗、体积和发热量等需求的的同时能保证可靠性与实时性,引入协处理器实现异构计算平台是最优的方案。低功耗协处理器不但能够为计算平台提供低能耗的硬件加速,也能满足可穿戴设备对空间的要求。利用特定应用集成电路(ASIC)进行硬件加速是一个好的解决方案,ASIC 具有高性能、低能耗的特点,ASIC 的高能效,能够平衡设备的性能与功耗。但是 ASIC 应特定要求生产之后,电路和功能就无法再改变了,难以使用一款通用 ASIC 来适配多种应用场景。在这种情况下,现场可编程门阵列(FPGA)就成为了更好的选择。FPGA 的主要优势在其灵活性,在可穿戴设备的应用场景中,不同的设计框架与策略下的具体计算任务对硬件的诉求也都不尽相同。在 FPGA 中我们可以根据需求任意修改数字逻辑来实现不同的功能,其大规模并行化的特性也能使算法更加迅速、高效。
移动端设备不但需要完成高强度的任务,也要保证足够的续航时间,移动端处理器从早期的单核心到双核心、四核心以及现在的八核心,核心的数量一直在增长。四核心曾被认为是移动设备比较平衡的方案,但实际使用中发现,四个高功耗核心的处理器,很难通过降压、降频等手段取得比较好的能耗比。ARM 提出的
big.LITTLE 架构则很好的解决了这一问题。big.LITTLE 是一种异构处理架构,将大核高性能与小核低功耗的特性结合在一起,可以有效提升移动设备的能源效率。
在 big.LITTLE 系统中,无论是大核处理器还是小核处理器都有相同的架构。本文所使用的瑞芯微 RK3399 开发板所使用的就是一款基于 Big.Little 架构的处理器,具有低功耗、高性能的特性。该处理器具有双核 Cortex-A72 和四核 Cortex-A53 的组合架构,能很好得满足可穿戴设备的复杂需求。
根据前文对应用场景的分析,本研究使用了瑞芯微 RK3399+Xilinx Zynq 开发平台实现基于 CPU+FPGA 架构的系统。该架构不但能够充分利用异构处理器在控制与操作系统方面的优势,还能够充分发挥 FPGA 在并行数据处理方面的优势。在硬件资源允许的范围内最大化硬件的并行度和数据的复用度并提高硬件资源的利用率与系统的吞吐率。如图3-1所示,本文将系统架构分成了六层。其中:
(1)应用层:可供开发人员进行开发,对硬件层进行了屏蔽,负责根据为应用软件提供运行环境。可根据可穿戴计算机的需求,进行拓展。
(2)应用程序框架层:为上层应用层提供各种 API 接口和服务级进程。
(3)系统运行库层:包含两个部分,系统库与 Android 运行时。系统库包含了支撑整个系统运行的基础库,是应用程序框架的支撑,也是连接应用框架层与
Linux 内核层的重要纽带。Android 运行时中运行着程序,分为核心库与 Davik 虚拟机。
(4)操作系统层:通过定义硬件驱动的接口来降低系统与硬件的耦合度,本文可穿戴计算机操作系统采用了 Android 系统。
(5)驱动程序:通过安装不同的驱动程序为相应的硬件需求提供支持,本文可穿戴计算机主要包含了 FPGA 驱动和 PCIe 驱动。
(6)硬件支撑平台:由可穿戴计算机与 FPGA 组成,是整个软件平台的基础。

而主处理器与协处理器的相互合作,使平台在性能与功耗方面达到了平衡,通过软硬件协同的方式满足可穿戴设备的要求。处理器架构图如图3-2所示。
3.4 面向关键任务的容错调度算法
3.4.1 已有的任务调度算法分析
Baruah 提出的模型 AMC[44] 能够在系统提供额外运行时间的基础上,为调度提供更高的可靠性。该算法提出了系统关键等级的切换策略:任何任务的执行时间超出了 C(LO),那么系统就会切换至高关键等级,同时将所有低关键等级任务丢弃,并将系统保持在高关键等级。现有的许多研究都是基于该模型的,主要的工作都集中在了改进任务分配阶段的分配策略和在系统高关键等级下对低关键等级任务的优化。该模型能在系统负载较重时,以低关键等级任务为代价,在一定程度
上保证高关键等级任务的完成。然而却无法处理高关键等级任务出现的瞬态故障,无法保证可穿戴设备所要求的高可靠性,因此需要为关键任务引入容错措施。
冗余机制被广泛应用于各类容错系统中,是一类主要的容错技术,该技术以资源为代价来换取可靠性。冗余有三种:信息冗余、空间冗余和时间冗余[45]。信息冗余是指利用冗余的数据来提供可靠性,例如汉明码。汉明码在数据流中插入验证码,通过重复存储来防止数据的丢失或错误;空间冗余则是指在程序运行过程中,通过设备或模块的冗余来保证系统的可靠性;时间冗余主要是通过定时保存系统的信息,当发生故障或异常后通过保存的信息来对系统进行恢复,以时间为代价为系统提供可靠性,例如检查点机制。检查点机制是一种有效提高系统可靠性的技术,通过设置检查点来实现容错。程序在执行过程中,以一定的时间间隔来记录内存映像以及日志,当硬件资源出现异常时,通过最近的检查点所存储的信息来进行恢复。系统级容错由系统自动保存检查点,缺点是开销较大。
在基于双模冗余机制的算法中,使用两个处理器处理同样的工作,通过比对运行结果来判断是否出错。基于双模冗余的容错算法只具有检查错误的功能,不具有纠错的功能,这个特性限制了该类算法的使用场景。而基于三模冗余的容错算法通过三个处理器处理同样的工作,采用多数原则,具有一定的纠错功能,能大幅提高系统的可靠性,但是与双模冗余相比,会造成更大的计算开销。由于可穿戴计算机有体积小、功耗低、计算资源紧张的特点,如何合理地设计冗余来平衡可靠性与计算开销,是本章研究的重点。
3.4.2 异构多核系统与任务模型
本文通过将异构多核系统与任务抽象为数学模型,来对基于异构多处理器的任务调度问题进行分析。
3.4.2.1 调度模型
待处理的任务到来后被存储在任务队列中。在对任务进行调度时,调度模块将根据任务的信息和处理器的状况,根据调度算法将任务发往处理器所对应的任务队列,同时更新处理器状态表,在任务完成后,更新任务状态表。为了使调度平台能调用 FPGA,使用专门的线程对 FPGA 进行控制。FPGA 根据调度策略动态配置计算任务区域的 IP 核。调度模块可以对多个线程做出响应,对任务状态表进行统一管理。面向关键任务的调度模型如图3-3所示。

3.4.3 同步机制
基于双模冗余的容错调度算法通过将任务发往不同的处理器来保证系统的可靠性,当其中一个版本的任务由于故障或异常导致错过截止时间时,另一个版本能够在截止时间之前完成任务。该特性不但能够为任务提供可靠性保证,也能够维持良好的性能。因此基于双模冗余的容错算法能够同时保证可穿戴设备的实时性与可靠性。系统中,两个模块同时出现故障是低概率事件,所以冗余算法在运行时,至多只有一个版本任务出现错误[46]。在该合理假设下,容错算法将所有任务都重复运行两次,浪费了大量的计算资源。在异构处理器架构上,不同的处理器拥有着不同特性,这也是异构架构的优势。而每一个单独的核,都可以单独完成系统的计算任务。相同类型的任务在不同核心上不同的运行时间也会直接导致不同的核心在处理任务时有着不同的效率。在任务开始执行一段时间后,不同处理器完成的任务的进度会不同。而基于双模冗余的容错调度算法会控制系统中所有的处理器处理所有计划中的任务,包括已经被其他处理器完成的任务,这种情况浪费了可穿戴设备珍贵的计算资源。
因此,本文提出一种同步机制对基于双模冗余的容错调度算法进行改进。在该同步机制内,处理器在运行任务时若接收到该任务已经完成的消息,则放弃当前的任务。这样,所有的处理器在处理任务时都会以最快的核为基准。如图3-4所示,在时刻 _T_0,调度器将任务 v0 复制并且分别发往发往 Core1 和 Core2 两个核心,
v1 为调度模块即将调度的下一个任务。到了时刻 _T_1,如图3-5,此时各处理器经过一段时间的运行,处理进度已经不同,Core1 刚处理完 v0、v1 和 v2,即将处理 v3,而 Core2 刚处理完任务 v0 和 v1,即将处理 v2 和 v3。而 v2 已经由 Core1 完成并提交,所以根据同步机制,此时应该进行一次同步,Core2 放弃执行任务 v2,如图3-6所示。 
3.4.4 改进的容错调度算法
在本章算法中,由于考虑到异构多核系统中不同 CPU 的计算能力不同的特性以及可穿戴设备的需求。在任务选择阶段,根据设备特点选择合适的任务进行调度。在处理器映射阶段,对处理器进行了进一步划分,充分利用了异构系统的特性。通过这些机制,一方面保证了系统的可靠性;另一方面提高了系统对任务的吞吐率,具体如下:
(
1)任务选择阶段最早截止时间优先(EDF)调度算法在是理论上最佳的[47]。使用该算法对任务进行调度,能够使得每个任务都满足截止期限的要求并且 CPU 利用率将会是
100%。然而,在实际中,由于进程的上下文切换和中断处理的开销,要达到这种级别的 CPU 利用率是不可能的。频繁切换线程的优先级,将带来较大的调度开销[48]。
虽然动态优先级调度算法在对资源的利用率方面要高于静态优先级调度算法。但是根据上文对可穿戴设备的分析得知,基于具体应用场景的可穿戴设备往往在短期内不会频繁地切换任务的种类。因此我们选择不可抢占式 EDF 调度算法对任务队列中的任务进行调度,即总是选择截止时间最早的任务进行调度,如算法3-1所示。




信迈提供RK3399/RK3588+FPGA的解决方案。