| 编辑推荐: |
文章主要介绍了一种基于开源硬件和开源技术的汽车电子控制单元(ECU)混合关键性多操作系统架构相关内容。希望对您的学习有所帮助。
本文来自于微信公众号猿力部落,由火龙果软件Alice编辑、推荐。 |
|
摘要:由于辅助驾驶或自动驾驶等新型功能的集成,汽车系统的复杂性正迅速提升。然而,复杂性的不断增加给汽车供应链带来了巨大挑战,因为持续增加新硬件和网络布线的方案并不可行。现代异构多处理器芯片的出现为解决这一问题提供了独特机遇,它可将多种功能集成到更少的电子控制单元(ECU)中,从而降低车辆成本。此外,开源硬件技术近年来的发展使得行业能够摆脱供应商锁定方案,进一步降低成本。
本文提出了一种基于开源硬件和开源技术的汽车电子控制单元(ECU)混合关键性多操作系统架构。其中,安全关键性功能由运行在RISC-V处理器上的AUTOSAR操作系统执行,而更复杂的高级功能则由运行在多核ARM中央处理器(CPU)上的Linux操作系统负责处理。除了介绍所实现的技术栈和通信架构外,本文还对经过软硬件优化的RISC-V处理器与商用现货(COTS)Arm
Cortex-R 处理器在实时特性方面进行了定量差距分析,结果表明RISC-V是运行下一代汽车微控制器(MCU)的AUTOSAR
Classic技术栈的理想选择。
01. 简介
数十年来,汽车行业一直是一个相对保守的行业,其软件功能主要由简单的电子控制单元(ECU)实现,这些ECU通过特定领域的网络(如CAN、LIN、FlexRay)进行通信。然而,近年来随着辅助驾驶、自动驾驶等新型功能的集成,汽车系统的复杂性大幅提升,这给行业带来了诸多挑战。目前,一款现代豪华汽车已包含超过100个不同的ECU,而新增硬件的方案已逐渐不可行——这不仅是因为车辆内部布线数量的急剧增加,还涉及空间、重量、功耗和成本(SWaP-C)等多方面的压力。
如今,非对称多处理器(AMP)芯片的出现为汽车行业带来了重要机遇。这类芯片集成了三部分核心功能:(1)高性能多核应用级
CPU,可运行 Linux 等通用操作系统(GPOS);(2)低速实时微控制器(MCU),可运行实时操作系统(RTOS);(3)特定领域加速器。通过这些不同的处理单元,可将多种功能(即使它们具有不同的非功能需求)集成并整合到同一个ECU中,从而减少车辆内部的硬件数量和布线规模。
与此同时,开源硬件计划也为汽车行业提供了另一个重要机遇。该计划旨在设计开放的指令集架构(ISA),以摆脱供应商锁定方案,进而降低原始设备制造商(OEM)面临的经常性成本。其中,RISC-V指令集架构在多个行业领域迅速崛起,被视为未来计算领域的通用“语言”,同时也被广泛认为是在交通领域具有巨大应用潜力的前景技术。
此前,已有研究提出将多操作系统与开源硬件架构相结合,应用于汽车和航天领域,但这些研究往往依赖对称/异构多处理器(SMP和HMP)芯片,需要虚拟机监控程序(Hypervisor)支持多操作系统运行,且采用闭源硬件架构和专用软件库实现操作系统间通信(详见第2节)。本文提出了一种面向汽车领域的软硬件技术栈,该技术栈同时利用非对称多处理器(AMP)和基于RISC-V的硬件,旨在构建一个基于汽车领域常用中间件的汽车开放平台。具体而言,本文的贡献包括以下几个方面:
1. 提出了一种具有多操作系统架构的异构混合关键性系统(MCS)概念。在该系统中,可运行Linux的商用多核系统与基于CVA6设计的开源RISC-V
MCU相结合,后者运行专为汽车领域定制的实时操作系统ERIKA Enterprise。
2. 在异构现场可编程门阵列(FPGA)——即赛灵思(Xilinx)Zynq Ultrascale+——
上实现了该混合关键性系统(MCS)。该FPGA将实现基于ARM的多核系统的硬核宏与实现RISC-V实时MCU的可编程硬件相结合(详见第3节)。据作者所知,这是首次尝试基于开源硬件采用多操作系统开源技术栈应用于汽车领域的研究。
3. 针对异构FPGA中现有的基于ARM的实时MCU(Cortex-R系列),对CVA6 RISC-V
MCU在中断响应时间方面进行了定量差距分析。结果表明,按照《特权规范》中定义的RISC-V中断支持功能,其与ARM
MCU之间存在显著的性能差距。
通过为RISC-V CVA6 MCU核心搭配RISC-V快速中断控制器(CLIC),增强了该MCU的实时性能,使其能够达到与ARM竞品相当的实时性能,为RISC-V指令集架构在交通领域的进一步发展奠定了基础(详见第4节)。
02. 相关工作
2.1 汽车操作系统
20世纪90年代,一些德国和法国企业联合成立了OSEK/VDX联盟,旨在为汽车嵌入式系统的操作系统和通信栈制定开放标准。该联盟规范的部分内容随后被纳入ISO
17356标准。多年来,业界提出了多种开源实现方案,其中最具代表性的项目包括Trampoline和ERIKA
Enterprise。
汽车开放系统架构(AUTOSAR)联盟成立于2004年,在过去二十年中,为应对车辆内部软件复杂性的不断增长,该联盟主导并推动了一系列标准化工作。其发布的AUTOSAR
Classic规范在原有OSEK/VDX标准的基础上进行了扩展,为运行小型实时操作系统(RTOS)并通过特定领域网络(如CAN、LIN、FlexRay)通信的简单汽车ECU设计了技术栈。随着辅助驾驶、自动驾驶等现代功能的出现,该联盟于2017年发布了另一项规范——AUTOSAR
Adaptive,该规范针对基于POSIX API的更具动态性的平台,同时支持高性能计算(HPC)。此外,该联盟还提供了规范部分内容的示例实现,可运行在Linux操作系统上。
在学术界,汽车领域采用多操作系统架构的理念已得到广泛认可。Burgio等人在欧洲HERCULES项目中提出了一种多操作系统架构。尽管该架构使用了与本文相同的实时操作系统(即ERIKA
Enterprise),但它依赖于基于ARM big.Little 架构的闭源异构多处理器(HMP),并在开源虚拟机监控程序(Hypervisor)之上运行多个操作系统。此外,该架构中不同操作系统之间的通信通过专用库实现,而非采用汽车领域常用的标准中间件。
在工业界,芯片供应商已开始设计非对称多处理器(AMP)片上系统(SoC)。这类SoC包含一个高端多核处理器(可能采用big.Little架构),用于运行通用操作系统(GPOS);同时包含一个低速微控制器(MCU),用于运行安全关键型实时操作系统(RTOS)。例如,恩智浦(NXP)的i.MX8芯片,该芯片包含Arm
A52和A72核心,以及Arm M4核心。操作系统间的通信通过双向无连接远程处理器消息传递(RPM)接口实现。最近,ARM推出了R系列首款高性能64位实时处理器Cortex-R82。尽管该处理器最初宣布的应用场景是物联网(IoT)领域的存储控制器,但它同样可作为未来在通用硬件平台上实现通用操作系统(GPOS)与实时操作系统(RTOS)双系统运行的理想选择。
事实上,汽车原始设备制造商(OEM)正逐步从“域架构”向“区域架构”转型,区域架构的示例如图1所示。在区域架构中,少量车辆计算机(Vehicle
Computer)运行跨域技术栈,该技术栈不仅包含AUTOSAR Classic平台(CP)和AUTOSAR
Adaptive平台(AP),还集成了第三方软件(如ROS2、纯Linux系统及其他操作系统等)。
图1:区域架构示例
尽管现有多操作系统平台在架构上存在诸多相似之处,但本文的研究在以下几个方面具有独特性:(1)依赖在快速发展的RISC-V生态系统中开发的完全开源实时MCU来处理安全关键任务;(2)运行在RISC-V上的汽车软件技术栈基于开源实时操作系统构建;(3)推动RISC-V成为向区域架构转型的核心力量,而目前区域架构转型尚未将开源硬件处理器纳入考虑范围。
下文将分析近年来RISC-V架构在汽车领域的应用研究现状。
2.2 汽车领域的RISC-V架构
近年来,随着部分供应商推出可运行Linux、频率达1.5GHz的高端多核CPU,RISC-V技术受到了广泛关注。同时,也有相关研究致力于提升RISC-V架构的安全等级。DeRISC是一个“地平线2020”项目,旨在为安全关键系统设计RISC-V处理器和软件技术栈,但该项目主要聚焦于航天领域。
Abella等人指出了RISC-V生态系统在安全性和可靠性方面存在的一些问题,并提出了四项改进措施,以实现锁步(lock-step)和系统级测试。他们的研究对汽车领域具有重要意义,可在本文提出的架构基础上进一步实现。
Pietzsch提出了EMSA5-FS处理器,这是一款专为功能安全设计的32位、单发射、顺序执行的5级流水线RISC-V处理器。Cosimi等人提出通过集成核心独立外设(包括性能监控单元(PMU)、错误管理单元和执行跟踪单元),将RISC-V平台上运行的应用的安全完整性等级提升至汽车领域的最高等级(即ASIL-D)。他们的实现基于与本文实验相同的评估板(即赛灵思ZCU102),因此可与本文提出的架构完全集成。
最近,Gruin等人提出了MINOTAuR处理器,这是一款具有时间可预测性的开源RISC-V核心,其硬件架构与本文所用架构相同。实验结果表明,通过部分推测执行,该处理器相比未修改的核心仅增加了10%的开销。尽管他们的研究未明确针对汽车领域,但时间可预测性是包括汽车在内的所有时间关键型和安全关键型领域都需满足的非功能需求。
最近,SiFive公司与瑞萨电子(Renesas)宣布建立长期合作关系,共同设计和生产面向汽车领域的RISC-V处理器。这些符合ISO
26262标准的处理器将采用相同的指令集架构(ISA),以提高代码的可移植性。
本文的研究基于开源64位核心 CVA6,通过增强其实时性能,使其成为多操作系统平台中的时间关键型和安全关键型RISC-V系统,从而缩小与现有商用现货(COTS)嵌入式解决方案之间的差距(详见第4节)。
2.3 汽车通信协议
为通过可组合性实现合理且易于管理的系统复杂性,汽车行业正将传统的面向信号的通信方式逐步替换为现代的面向服务的架构(SoA)。在这种架构范式下,各个软件组件相互解耦,通过“服务”的请求与提供实现通信。每个组件可独立设计,系统则通过组合和集成各类功能构建而成。
可扩展面向服务的中间件(SOME/IP)由宝马公司首次提出,是专为汽车领域以太网通信设计的面向服务的架构(SoA)协议。该标准规定了序列化机制、服务发现方式以及与AUTOSAR技术栈的集成方法。
近年来,数据分发服务(DDS)也开始受到汽车行业的广泛关注。DDS最初于2001年提出,并于2004年成为对象管理组织(OMG)标准,目前已有多种开源实现方案。DDS规范定义了一种用于分布式应用通信的以数据为中心的发布-订阅(Publish-Subscribe)模型。该模型基于“全局数据空间”的概念,发布者(Publisher)向该空间提供数据,订阅者(Subscriber)从该空间获取数据:每当发布者向全局数据空间发布新数据时,DDS中间件会将该信息传递给所有相关的订阅者。这种以数据为中心的通信方式实现了发布者与订阅者的解耦,从而构建出高度可扩展且灵活的架构。其底层数据模型定义了一组数据项,这些数据项通过“主题(Topic)”进行标识。
如今,汽车领域常用的大多数框架都原生支持DDS,这些框架包括AUTOSAR
Classic、AUTOSAR Adaptive和机器人操作系统(ROS)。值得注意的是,根据最近的一项调查,约80%开发自动驾驶车辆的汽车原始设备制造商(OEM)和一级供应商(Tier-1)已在使用ROS框架。
03. 系统架构
如图2(a)所示,本文提出的混合关键性架构基于非对称多处理器(AMP)片上系统(SoC),该SoC包含一个用于运行通用操作系统(GPOS)的高端多核处理器,以及一个用于运行安全关键型实时操作系统(RTOS)的低速微控制器(MCU)。
(a)系统架构概述。该图重点展示了两部分内容:左侧是应用级核心构成的多核系统,其任务是运行通用操作系统(GPOS);右侧是单核RISC-V微控制器(MCU)系统,其任务是运行实时操作系统(RTOS)。操作系统间的通信在软件层面基于数据分发服务(DDS)实现,在硬件传输协议层面则依赖AXI4协议
(b)CVA6 RISC-V微控制器(MCU)架构概述(简化版)。该图重点展示了该系统的主要组成模块,以及其与多核域之间基于AXI4协议的接口
图2:异构汽车架构概述及CVA6 RISC-V微控制器(MCU)重点展示
3.1 RISC-V MCU设计
本文围绕64位CVA6 RISC-V核心设计RISC-V MCU。CVA6是一款6级流水线、单发射、顺序执行的核心,支持64位RISC-V指令集的G扩展和C扩展(RV64GC)。该核心配备了转换后备缓冲器(TLB),用于加速虚拟地址到物理地址的转换;同时集成了经典的分支预测器,该预测器由分支目标缓冲器(BTB)、分支历史表(BHT)和返回地址栈(RAS)组成。本文所用的核心配置了32KiB的写通(write-through)一级数据缓存(L1
Data Cache)和16KiB的指令缓存(Instruction Cache)。
除核心外,该MCU还包含128KiB的暂存存储器(SPM)、直接内存访问(DMA)引擎,以及用于片外通信的低延迟外设(SPI、I2C、UART)。MCU采用符合AXI4协议的片内非一致性互连系统。通过软件管理的输入输出内存管理单元(IOMMU),AXI4接口可与多核域连接;该IOMMU包含输入输出转换后备缓冲器(IOTLB),能够高效地将多核域的虚拟用户空间应用地址转换为物理内存地址。图2(b)展示了RISC-V
MCU及其与应用级主机之间的硬件接口。
在嵌入式领域,通用核心的实时性能在很大程度上取决于其中断控制器的设计。对于汽车领域的安全关键型和时间关键型系统而言,这是一项至关重要的功能需求,因为这类系统需要尽可能减小中断延迟和上下文切换时间。然而,CVA6在中断处理方面存在以下不足:
首先,CVA6不支持向量中断。向量中断会将每个中断的中断服务程序(ISR)存储在独立的地址中,尽管随着向量表规模的增大,这种机制会增加代码量,但它有助于缩短整体中断响应时间。
其次,CVA6的原生中断架构由《RISC-V特权规范》中定义的经典RISC-V平台级中断控制器(PLIC)和核心本地中断控制器(CLINT)组成。该核心支持三个电平敏感型中断信号,分别为:机器模式定时器中断、机器模式软件中断(处理器间中断),以及机器模式/监管者模式外部中断。
机器定时器中断挂起寄存器(mtip)和机器软件中断挂起寄存器(msip)由核心本地中断器(CLINT)硬件知识产权(IP)提供,该IP为每个硬件线程(hart,即RISC-V的执行上下文)生成一个中断。其中,mtip以特定频率生成定时器中断,而msip通过对专用内存映射寄存器的读写操作中断硬件线程(hart),从而实现处理器间的通信。
在机器模式(M)、监管者模式(S)和用户模式(U)下,前12个中断标识符为定时器中断、软件中断和外部中断预留。其余中断条目(最多为XLEN个——对于CVA6这类RV64处理器,XLEN=64)为平台专用,称为本地中断。最后,机器外部中断挂起寄存器(meip)和监管者外部中断挂起寄存器(seip)负责将外部设备的中断信息传递给硬件线程(hart)。
平台级中断控制器(PLIC)提供集中式中断优先级排序功能,并通过meip/seip中断信号在多个硬件线程(hart)之间路由共享的平台级中断。但PLIC不支持中断抢占(嵌套),也不支持运行时可配置的中断优先级和中断阈值控制,这些功能必须通过软件模拟实现。
如第1节所述且第4节将详细说明的那样,这些原生功能无法满足实际的实时需求。因此,本文的一项重要贡献是增强CVA6在中断响应方面的实时性能,使其能够与现有的商用现货(COTS)实时MCU展开竞争。
为简化非对称多处理器(AMP)系统的设计与开发,本文将运行实时操作系统(RTOS)的RISC-V
MCU实现于异构赛灵思Zynq Ultrascale+ FPGA的可编程逻辑(PL)部分,同时利用现有的商用现货(COTS)多核片上系统(Processing
System,PS)来运行通用操作系统(GPOS)。该PS包含一个符合行业标准的四核64位Armv8
Cortex-A53应用级核心(每个核心配备32KiB一级指令缓存和数据缓存,四核共享1MiB二级缓存,时钟频率为1.2GHz),以及一个双核Cortex-R5F实时单元。尽管Cortex-R(32位)与CVA6(64位)在XLEN(数据宽度)上存在差异,但本文仍采用Arm
Cortex-R与经过实时增强的CVA6进行性能差距分析。在可编程逻辑(PL)部分,CVA6 MCU的综合目标时钟频率为50MHz。
下文将详细介绍运行在各处理器上的软件技术栈。
3.2 实时操作系统(RTOS)
OSEK/VDX和AUTOSAR Classic标准为汽车领域的小型实时操作系统(RTOS)制定了设计规范。这类操作系统采用“运行至完成(run-to-completion)”的编程范式,其配置(如任务数量)在编译时静态定义。在这类操作系统中,中断服务程序(ISR)分为以下两类:
· ISR1:高优先级、低开销的程序,无法调用系统调用(syscall);
· ISR2:基于优先级的程序,执行完成后可能触发重新调度。
在本文提出的架构中,采用ERIKA Enterprise实时操作系统。这款开源实时操作系统支持多种微控制器架构,已应用于多个欧洲研究项目和工业汽车产品中。ERIKA
Enterprise的一个分支最近获得了ISO 26262 ASIL-D认证(汽车领域最高安全等级)。此外,目前正与AUTOSAR联盟协商,计划以“Open-ERIKA”的名称在Classic演示程序中发布该实时操作系统。在“地平线2020”AMPERE项目中,ERIKA实时操作系统已完成向RISC-V架构的移植并成功运行。
3.3 通用操作系统(GPOS)
Linux是一款广泛使用的操作系统,支持POSIX API。其出色的性能、开源许可模式和良好的可移植性使其成为在多核ARM处理系统(PS)上运行的通用操作系统(GPOS)的理想选择。
在过去几十年中,业界为提升Linux系统的实时性能做出了诸多努力。随着时间的推移,一些实时相关功能(如可抢占内核、优先级继承协议、高精度定时器、SCHED_DEADLINE实时调度器)已逐步整合到官方内核中。PREEMPT
RT是由Linux基金会资助的长期项目,旨在提升Linux操作系统的实时性能。该项目的核心成果是一个内核补丁,可大幅降低应用程序面临的最大延迟,目前该补丁有望整合到主线“Vanilla”代码库中。为提升本文所提平台的整体响应能力,我们重新编译了Linux内核,应用了PREEMPT
RT补丁并启用了最高抢占级别。
值得一提的是,目前存在一项名为ELISA的联合计划,旨在简化Linux操作系统在安全关键环境中的认证流程。在汽车场景中,ELISA项目的目标是使Linux操作系统达到ASIL-B认证等级,但目前该项目尚未提供实现这一认证的具体流程。
3.4 操作系统间通信
根据汽车领域的最新发展趋势,本文中操作系统内部和操作系统之间的通信均完全基于DDS标准实现。其中,Linux操作系统内部进程间的通信通过开源DDS中间件(即Fast-DDS,前身为Fast-RTPS)实现;而Linux与ERIKA之间的跨操作系统通信则基于DDS-XRCE协议——这是对象管理组织(OMG)专为资源受限系统设计的DDS协议。
如图2(a)所示,在这种客户端-服务器协议中,设备(客户端)与XRCE代理(服务器)通信,XRCE代理则提供与DDS全局数据空间(Data
Global Space)的中间桥接服务。具体而言,我们在ERIKA实时操作系统上集成了eProsima的Micro
XRCE-DDS技术栈(该技术栈是Micro-ROS项目的一部分)。
04. 评估
本章将从实时性能角度对本文提出的汽车平台进行分析和表征,重点关注运行通用操作系统(GPOS)的多核系统和运行实时操作系统(RTOS)的微控制器(MCU)的中断处理延迟,以及跨域通信的时间开销。具体评估内容包括:
1. 分析Linux内核的实时扩展,以更好地适应汽车领域需求;
2. 表征用于操作系统间通信的中间件层;
3. 对实时CVA6 MCU进行硬件优化,通过集成RISC-V CLIC作为CVA6的中央中断控制器,提升其中断响应能力,并与FPGA处理系统(PS)中现有的商用现货(COTS)Arm
Cortex-R5进行性能差距分析。
4.1 非关键多核域:Linux通用操作系统(GPOS)
在Linux系统方面,我们采用Ubuntu文件系统,并在Fast-DDS之上运行ROS2的Foxy版本。Linux内核版本为4.19,并应用了PREEMPT
RT补丁。为衡量操作系统引入的延迟,我们设计了一组测试,并通过以下方式制造系统干扰:
· 执行find命令:通过扫描SD存储器上的文件系统并在控制台打印信息,生成I/O流量;
· 运行stress程序:生成CPU、内存和I/O干扰,具体命令为:./rt-test/stress
-c 8 -i 8 -m 8 –vm-bytes 8000000。
采用Linux内核社区开发PREEMPT RT补丁时提供的cyclictest工具测量最坏情况延迟。该工具的运行参数为:./cyclictest
–mlockall –smp –priority=80 –interval=200 –distance=0
–duration=5m。
实验结果表明,未应用PREEMPT RT补丁时,最坏情况延迟为13.4毫秒;应用PREEMPT RT补丁后,最坏情况延迟降至159微秒。这意味着,仅通过应用补丁并重新编译Linux内核,用户级应用面临的最大延迟就降低了约99%。
4.2 跨域通信
采用“乒乓(ping-pong)”应用评估通信延迟,该应用可测量从Linux到ERIKA再返回Linux的往返时间。在Linux系统上,参与通信的进程(即DDS代理和ROS2应用)采用实时优先级调度(具体为SCHED
RR调度策略,优先级为99)。数据通过非缓存共享内存区域交换。我们选择UART作为中断源,因为它是唯一可被两个操作系统同时识别的中断源。
实验结果显示,通信时间的最小值、平均值和最大值分别为2.0毫秒、2.2毫秒和3.7毫秒。需要特别指出的是,Micro-ROS框架包含一个周期性引擎,该引擎会为通信增加一定延迟——具体而言,clc_executor_spin_some函数的周期为1毫秒,而其他所有交互均为事件驱动。
4.3 安全关键RISC-V MCU域:ERIKA实时操作系统(RTOS)
在将ERIKA Enterprise实时操作系统移植到RISC-V架构时,我们借鉴了之前FreeRTOS的优化思路。由于CVA6核心本身不支持本地中断级别,我们首先通过操作系统工具静态生成的数组模拟本地中断级别,以此优化中断处理。
采用现有基准测试程序测量ERIKA实时操作系统在RISC-V架构上的性能,该程序可测量实时操作系统执行一系列关键调度操作所需的时间(如任务激活时间、任务退出时间、中断服务程序调用时间等)。此外,该测试套件还可对AUTOSAR
Classic内核支持的两类中断服务程序(即前文所述的ISR1和ISR2)的延迟进行基准测试。具体测试的函数如下:
· act:激活一个更高优先级的任务,并测量任务开始执行所需的时间;
· actl:激活一个低优先级的任务,并测量返回调用者所需的时间;
· intdisable:测量禁用所有中断所需的时间;
· intenable:测量启用所有中断所需的时间;
· isrentry:测量从中断发生到相关ISR1处理程序开始执行所经过的时间;
· isr2entry:测量从中断发生到相关ISR2处理程序开始执行所经过的时间;
· isrexit:测量从中断处理程序结束到之前运行的任务恢复执行所经过的时间;
· istentry:测量从中断处理程序结束到该中断激活的任务开始执行所经过的时间;
· istexit:测量从中断处理任务结束到之前运行的任务恢复执行所经过的时间;
· terml:测量终止一个任务并切换到更低优先级任务所需的时间。
通过mcycle控制状态寄存器(CSR)以处理器时钟周期为单位测量执行时间。为进行对比,我们在ZCU102开发板上的Cortex-R5和Cortex-A53核心上也执行了相同的基准测试程序:
· 对于Cortex-R5,通过PMCCNTR寄存器测量周期数;
· 对于Cortex-A53,通过周期计数器寄存器PMCCNTR-EL0测量周期数,具体代码为:asm
volatile ("MRC p15, 0, %0, c9, c13, 0" :
"=r" (cycles));。
需要特别指出的是,在Cortex-A核心上运行实时操作系统时,按照Cortex-A处理器运行实时操作系统的典型配置,我们在虚拟机监控程序(即Jailhouse)之上运行实时操作系统。然而,底层虚拟机监控程序的存在会为中断捕获和重新注入到客户机实时操作系统带来不可忽视的延迟。为消除Linux系统对共享硬件资源的潜在干扰,我们通过以下命令使Linux内核进入恐慌(panic)模式:echo
c > /proc/sysrq-trigger。
在汽车等安全关键领域,我们最关注的是各类操作所需时间的上限。因此,我们将分析范围限定为连续运行100次测试所测得的最坏情况周期数。图3中的数据显示,当使用CLINT/PLIC且未进行软件优化时,RISC-V软核的性能与当前最先进水平(即Cortex-R5)处于同一数量级。具体而言,仅在处理ISR1中断时,RISC-V的最坏情况周期数略高。此外,数据还证实了Cortex-A核心上虚拟机监控程序的中断注入机制会引入显著延迟。这一结果进一步证明,通过非对称多处理器(AMP)片上系统(SoC)构建混合关键性架构,比在对称多处理器(SMP)片上系统上采用基于虚拟机监控程序(Hypervisor)的方案更具优势。
图3:实时操作系统性能(最坏情况处理器周期数)
4.4 软件驱动的实时操作系统(RTOS)优化
下一步工作是对实时操作系统(RTOS)的代码进行优化,以提升所有测试处理器的性能。第一项优化是修改ISR2的处理方式:不再将ISR2作为任务激活(即不调用osEE_activate_isr2
()函数),而是直接调用处理程序。此外,借鉴文献的思路,我们采用GCC编译器的- O3优化级别。
图4展示了连续运行100次测试所测得的最坏情况周期数。可以看出,所有架构均从优化中获益。然而,在Cortex-R上对实时操作系统进行的软件优化,其效果优于在RISC-V
MCU上的优化——在部分测试(如actl、intdisable和intenable测试)中,Cortex-R的最坏情况周期数降至优化前的25%以下。
图4:优化后的实时操作系统性能(最坏情况处理器周期数)
从上述数据可以看出,所选的RISC-V处理器在中断延迟方面的性能仍低于竞品ARM Cortex-R5架构。正如第3节所讨论的,我们认为CVA6的中断处理支持是设计中的瓶颈——它并未针对快速中断管理和低中断延迟进行优化,而这些特性通常需要通过以下软硬件机制实现:
1. 硬件支持细粒度且可配置的中断优先级;
2. 迟至中断行为(抢占和嵌套);
3. 支持连续中断(尾链,tail chaining)的上下文保存/恢复优化;
4. 银行化栈指针(Banked stack pointer)(即针对不同特权级别使用不同的栈指针);
5. 硬件支持上下文切换时的寄存器自动保存。
下一节将针对上述设计要点中的前三点展开研究。为此,我们通过核心本地中断控制器(CLIC)扩展现有的CLINT中断控制器,并评估ERIKA实时操作系统在扩展后的性能。其余两点设计要点涉及在处理器中实现更复杂的硬件特性,将在未来的研究中进一步探索。
4.5 硬件驱动的实时优化:RISC-V CLIC快速中断控制器
如第3节所述,原生CVA6及其中断控制器架构均需进行改进,以满足实时需求。我们的改进工作主要包括以下两步:
第一步,修改CVA6的中断接口:用携带中断标识符和请求的握手机制替代电平敏感型中断,处理器会对该握手机制进行确认。同时,通过实现中断标识符解码逻辑计算向量表的跳转地址,从而增加对向量中断的支持。
第二步,通过核心本地中断控制器(CLIC)扩展CLINT。我们采用了CLIC的开源实现,该实现符合RISC-V
CLIC草案规范的最新版本。集成过程包括根据规范在处理器微架构中添加特定的控制状态寄存器(CSR)。
相比标准CLINT,CLIC在实现更快中断处理方面进行了多项改进,其中包括:
· 专用内存映射寄存器:支持对每条中断线进行软件可配置的中断优先级和级别设置;
· 运行时可配置:支持中断模式和触发类型的运行时配置;
· 中断抢占支持:支持同一特权级别的中断抢占;
· 选择性硬件向量:允许程序员针对每个传入中断进行优化,可选择更快的响应速度(向量模式)或更小的代码量(直接模式,所有中断均陷入同一异常处理程序地址);
· 新增控制状态寄存器(CSR):引入mnxti控制状态寄存器,以加速连续中断(即“尾链(tailchaining)”)的处理,我们已在CVA6核心中实现了该功能。
CVA6中断处理的修改如图5所示。在改进后的设计中,平台级中断控制器(PLIC)仍负责仲裁外部系统级中断,传统CLINT仍生成定时器中断,这些中断通过集中式CLIC中断源进行路由。同样,处理器间中断通过写入相应的CLIC内存映射寄存器触发。最后,本地中断数量可扩展至4096条(不再受处理器XLEN的限制),本文实现了256条输入中断线,由CLIC进行仲裁。
图5:(a)原始的CLINT+PLIC中断接口;(b)改进后的CLIC+PLIC中断接口
图6展示了在改进后的硬件架构上,采用GCC-O3编译优化级别运行所选基准测试程序的实验结果。可以看出,RISC-V的最坏情况开销已与竞品MCU(即ARM
Cortex-R5)的测量结果更为接近,此前的性能峰值(如actl和isrentry测试)已显著降低。此外,在4项指标(即act、isrentry、istentry和istexit)上,实时操作系统(RTOS)所需的周期数等于甚至低于Cortex-R5。这些实验结果证实,RISC-V是运行下一代汽车微控制器(MCU)的AUTOSAR
Classic技术栈的理想技术选择,且通过进一步优化,有望超越闭源商用解决方案。
图6:配备CLINT和CLIC中断控制器的CVA6与Cortex-R5的最坏情况开销对比
05. 结论
本文阐述了汽车领域当前的发展趋势和面临的挑战,以及行业内企业正在考虑采用的各类技术。提出了一种基于开源硬件和开源软件的新型混合关键性多操作系统架构,并详细介绍了在软件和硬件层面进行的优化工作,这些优化使该架构的性能能够与商用竞品接轨。实验结果表明,该架构的性能已达到当前最先进水平,同时也为CVA6
RISC-V处理器未来的硬件优化指明了方向。
未来,我们计划从以下三个方面进一步完善所提出的架构:
1. 设计先进硬件特性(如银行化栈指针和优化的上下文切换),以进一步提升CVA6架构的竞争力;
2. 利用AUTOSAR Classic中DDS的最新标准化成果,在跨域通信中采用纯DDS协议替代DDS-XRCE;
3. 采用SCHED_DEADLINE调度策略,以提高Linux操作系统上通信的时间可预测性。 |