混合关键性系统技术【同构异构】【SMP、AMP、BMP】【嵌入式虚拟化】
- 1 介绍
- 1.1 概述
- openEuler Embedded 的运行模式
- openEuler Embedded 混合关键性系统技术架构
- UniProton
- 1.2 同构异构区别 【硬件侧】
- 1.3 系统架构【SMP、AMP、BMP】
- 多核处理器平台的系统架构 【软件侧】【SMP、AMP、BMP】
- 对称多处理架构
- 非对称多处理架构(AMP)
- SMP在实时系统潜在的问题
- 非对称多处理器AMP的特点
- 1.4 虚拟化
- 基础
- 虚拟机监视器(Hypervisor)
- 虚拟化原因
- 嵌入式虚拟机监视器需求
- 2 OpenAMP
- 概述
- 部署方案
- 3 示例
- 工业自动化中的集成
- 多核SoC中应用的概念分配
- 嵌入式实时虚拟机ZVM【湖大嵌入式实验室 2 openEuler】
- 海思工业硬实时通用MPU板级方案
- 4 如何在虚拟机管理程序和多核框架之间进行选择
- 以下是四个具体的 AMP 设计挑战
- 虚拟机管理程序
- 多核框架
- 处理器间通信
- 远程处理器生命周期管理
- 多核框架——优点和缺点
- 参考
1 介绍
1.1 概述
现代系统级芯片(SoC)正变得越来越复杂和多样化。一方面,这表明了将许多嵌入式系统功能整合到一个硬件中的趋势,另一方面,这也反映了对安全性和安全性要求的增加。
除了同质解决方案(即相同架构的多核CPU,例如x86),越来越多的异构多核CPU正在进入(嵌入式)市场。
在多核处理器上可以采用 虚拟机管理(如 QNX Hypervisor)、多核框架(如 OpenAMP)、虚拟机管理+多核框架组合策略。
openEuler Embedded 的运行模式
在不同模式下,openEuler Embedded始终是中心,提供富功能、富管理、富生态
openEuler Embedded 混合关键性系统技术架构
openEuler 24.03 LTS Embedded 版本:
- 支持 5.10 和 6.6 双内核,嵌入式弹性底座 Jailhouse、openAMP 裸金属混合等部署方案。在嵌入式弹性底座之上打造了混合关键性部署框架 MICA,对下屏蔽不同底座的差异,对上为不同运行时提供统一的接口。
- openEuler 24.03 LTS 嵌入式版本已经支持 600+软件包,包括支持 ROS humble 版本,满足 ROS2 运行时要求;支持 BMC 生态,包括 openBMC 等。
- 硬件支持上新增飞腾、海思、瑞萨、德州仪器、全志等硬件的支持,提出了面向开发者的硬件开发板概念“Euler Pi”,并联合伙伴推出了一款 openEuler Embedded 原生开发板“HiEuler Pi”原型机系统。
- 基础设施层面,正式发布 openEuler Embedded 元工具 oebuild,新增支持 LLVM 工具链构建 BSP 镜像,相对 GCC 工具链,可以获得在性能、体积、安全性等诸多方面的改进。
UniProton
1.2 同构异构区别 【硬件侧】
-
同构
所有的CPU的核心架构都一样,那么称为同构。例如,瑞芯微RK3568、飞思卡尔的I.MX6D,它们有两个或者以上架构相同的 ARM Cortex-A 核都属于同构。 -
异构
CPU核心架构有不一样的,就称为异构。例如 ST的 STM32MP157(两个 ARM Cortex-A7 + ARM Cortex-M4),TI的达芬奇平台DM6000系列(ARM9 + DSP)、Xilinx的Zynq7000系列(双核Cortex-A9 + FPGA)
1.3 系统架构【SMP、AMP、BMP】
多核处理器平台的系统架构 【软件侧】【SMP、AMP、BMP】
SMP(Symmetric MultiProcessing,对称多处理)架构
AMP(Asymmetric Multi-Processing,非对称多处理)架构
BMP(bound multi-processing,绑定多处理)架构
模型 | 工作原理 | 主要优势 |
---|---|---|
非对称多处理(AMP) | 一个单独的操作系统,或相同操作系统的单独副本,管理每个核心。为每个软件进程提供类似于单处理器系统的执行环境,允许简单的遗留代码迁移。此外,允许开发者独立地管理每个核心。 | - 允许简单迁移遗留代码。- 开发者可以独立管理每个核心。- 每个软件进程锁定到单个核心(例如,进程A仅在核心1上运行,进程B仅在核心2上运行等)。 |
对称多处理(SMP) | 单个操作系统同时管理所有处理器核心。相比AMP,提供更大的可扩展性和并行性,以及更简单的共享资源管理。 | - 提供比AMP更大的可扩展性和并行性。- 操作系统可以动态地在任何核心上安排任何进程,实现所有核心的充分利用。 |
绑定多处理(BMP) | 单个操作系统同时管理所有核心。结合了AMP的开发者控制和SMP的透明资源管理。与SMP一样,操作系统可以动态地在任何核心上安排进程。但是,开发者也可以将任何进程(及其所有相关线程)锁定到特定核心。 | - 结合了AMP的开发者控制和SMP的透明资源管理。- 允许将线程锁定到任何核心,简化了遗留代码的迁移。- 允许设计者将特定操作专用于特定核心。 |
对称多处理架构
SMP结构下一个OS负责协调两个处理器,两个处理器共享内存,每个核运行的应用程序(APP1和APP2),通过MMU(内存管理单元)把它们映射到主存的不同物理位置上。
非对称多处理架构(AMP)
SMP在实时系统潜在的问题
- 无法预测单个进程的执行顺序。
- 无法预测哪个CPU 核执行哪个进程。
- 对于某些进程,可能无法保证实时行为。
- 如果从现有的单处理器设计移植到多处理器,可能会出现同步或互斥问题。
- 业界已开发绑定多处理(BMP)以最大程度地减少此类问题。
非对称多处理器AMP的特点
- 每个CPU内核执行专门的任务,操作与单处理器设计完全相同。
- 系统的行为和可预测性与单处理器设计相似。
- 如果软件针对特定类型的硬件设计,在非对称多处理器上使用异构AMP。
- 在需要混合使用操作系统和/或调度方法的场景,在对称多处理器上使用同构AMP。
- 所有方法都应提高性能为目标。
- 安全是另外一个被考虑的因素。
1.4 虚拟化
嵌入式虚拟机化,能让多个系统同时在芯片上运行,利用实时系统和非实时系统的特性,来更好的实现软件功能。该技术知名的供应商有 QNX、Wind River VxWorks 等。
基础
虚拟化:创建某物的虚拟版本的行为,包括虚拟计算机硬件平台、存储设备和计算机网络资源。它允许在一个或多个处理器上部署多个操作系统和独立的工作负载。
虚拟机监视器(Hypervisor)
创建和运行虚拟机的计算机软件、固件或硬件。
虚拟化原因
- 操作系统/工作负载整合
- 降低系统成本
- 降低功耗
- 提高资源利用率
嵌入式虚拟机监视器需求
- 短启动时间
- 实时性
- 低的、确定性的中断请求(IRQ)延迟
- 实时调度器
- 静态CPU分区
- 设备虚拟化:设备分配、设备共享、驱动域
- 安全性、隔离和分区:内存、设备、CPU、系统级配置寄存器(SLCRs)
- 操作系统支持:Linux、裸机、其他实时操作系统(RTOS)支持
- 认证:小型代码库
2 OpenAMP
概述
非对称多处理(AMP)。嵌入式异构硬件平台的数量急剧增加,以满足当今电子设备的多样化需求。这些需求从支持实时行为到提供丰富的用户界面(UI),因此需要具有不同能力的CPU来最佳地处理手头的任务。在软件方面,这是通过整合适合系统中CPU能力的不同的软件环境来实现的。不同的软件环境协同工作以提供所需的功能。这种合作通常涉及软件环境之间的通信启用以及系统资源的管理。开发此类系统需要AMP软件架构。
OpenAMP项目的一个重要组成部分是OpenAMP库,openAMP 框架可以与远程处理器上的实时操作系统(RTOS)或裸机(bare metal)环境结合使用,通过 remoteproc 和 RPMsg 组件与运行在主处理器上的 Linux 应用程序(在内核空间或用户空间)或其他基于 RTOS/裸机的应用程序进行通信。该架构可用于数据密集型应用。库的核心构建块是Remoteproc和RPMsg。它们分别提供资源管理和通信功能。
RPMsg 和 Remoteproc 基础设施最初由德州仪器(TI)构想并提交到Linux内核。该框架允许主处理器上的Linux操作系统管理远程处理器上的远程软件环境的生命周期并与之通信。
- 使用 remoteproc 进行生命周期管理以便于控制启动顺序等
- 使用 RPMsg 进行核心间通信。
部署方案
3 示例
工业自动化中的集成
多核SoC中应用的概念分配
- OpenAMP for messaging
嵌入式实时虚拟机ZVM【湖大嵌入式实验室 2 openEuler】
嵌入式实时虚拟机ZVM(Zephyr-based Virtual Machine)是由湖南大学嵌入式与网络计算湖南省重点实验室(以下简称"湖大嵌入式实验室")主任谢国琪教授主导设计并开发的虚拟化软件。该软件基于实时操作系统(RTOS)Zephyr开发,可同时启动Linux与Zephyr 2个Guest OS,从而在同一硬件平台上实现混合内核部署。
2023年2月,湖大嵌入式实验室正式将该项目开源至openEuler社区。
海思工业硬实时通用MPU板级方案
4 如何在虚拟机管理程序和多核框架之间进行选择
以下是四个具体的 AMP 设计挑战
- 该设计很可能需要核心间通信。
- 出于安全和保障问题考虑,可能需要对核心进行相互保护。
- 启动顺序(每个核心上的软件启动的顺序)需要避免同步和安全问题。
- 调试通常在异构核心上运行的不同工作负载会带来一些问题。
AMP 系统中的核心是独立的,但这些挑战需要一些整体控制设施。有两种选择:
- 虚拟机管理程序:在所有核心上运行的复杂软件组件;
- 多核框架:使 AMP 系统能够在每个核心上运行的软件组件。
虚拟机管理程序
优点:
- 极大的灵活性,实现虚拟机之间高效的资源共享、动态资源使用、低延迟和高带宽通信;
- 强大的核心间分离;
- 实现设备虚拟化和共享;
- 将外围设备的所有权分配给特定核心。
缺点:
- 仅适用于同质多核设备(即,所有核心都相同);
- 大量的代码占用空间;
- 一些执行开销;
- 需要处理器支持硬件虚拟化
多核框架
由于虚拟机管理程序具有分离、管理和共享功能,因此它提供的功能超出了许多嵌入式设计的需求,它们可能有些过度。因此,一些嵌入式运行时供应商开发了一种专门为支持 AMP 多核系统而设计的替代方案:多核框架。
框架专门为支持多核应用而设计,仅提供关键功能:启动顺序控制和内核间通信。框架以更低的开销加载系统,并可在更基本的系统上运行。尽管 AMP 设计中的每个内核可能都运行一个操作系统,但一个或多个内核可能是裸机(即根本不运行操作系统)。多核框架可以适应这种可能性。
处理器间通信
一旦远程处理器操作系统和应用程序堆栈开始运行,许多用例将需要与系统的其他部分进行通信。Mentor嵌入式多核框架(MEMF) 提供了远程处理器消息传递框架功能 (RPMsg) 的洁净室实现,该功能在主操作系统和远程操作系统之间建立了通信通道。因此,数据可以在处理器间通信 (IPC) 通道中在两者之间来回传递。
支持远程处理器生命周期管理和 IPC 的传输层是 VirtIO,它是虚拟化 Linux 环境中广泛采用的高性能输入/输出设备驱动程序的虚拟化标准。
远程处理器生命周期管理
控制远程处理器,然后启动或停止该远程处理器内的操作系统和/或应用程序堆栈,这被称为远程处理器 (remoteproc) 生命周期管理。Linux 社区已采用一个框架来管理这种情况。Remoteproc 允许主操作系统在其他核心上启动其他操作系统。
Mentor Embedded Multicore Framework 中的 remoteproc 功能允许 Mentor Embedded Linux、Nucleus RTOS 和裸机环境 (BME) 以及其他供应商的 Linux 和 RTOS 产品之间实现远程处理器互操作性。remoteproc 生命周期管理的一个主要优点是它可以降低功耗。远程核心在不使用时保持低功耗状态。只有在使用 remoteproc 启动远程核心并部署必要的固件后,远程核心才会消耗任何明显的电量。
多核框架——优点和缺点
优点:
- 为某些应用程序提供最低限度所需的功能;
- 内存占用适中;
- 最小的执行时间开销;
- 可在异构多核设备上工作(即,所有核心不需要相同);
- 支持裸机应用程序。
缺点:
- 核心工作负载彼此之间并非隔离的;
- 更难控制启动顺序;
- 调试起来更加困难。
参考
1、Multi-Core_Hypervisor
2、Heterogeneous Real-Time SoC Software Architecture
3、Hypervisors in Embedded Systems
4、Study and Implementation of Modular Software Architectures based on Hypervisors for Automotive Electronic Control Units
5、OpenAMP Framework
6、西门子数字工业软件嵌入式平台–如何在虚拟机管理程序和多核框架之间进行选择
7、Enabling the Full Power of a Multiprocessor SoC
8、Linaro BKK 2019 Evensen Keynote v1
9、Leveraging OpenAmp in Embedded Mixed-Safety Critical Systems
10、何小庆文章
11、何小庆–多核处理器与实时操作系统- 概述、原理和应用实例
12、Running AMP, SMP or BMP Mode for Multicore Embedded Systems QNX Software Systems
13、多核处理器与MP架构
14、openEuler开源新项目,嵌入式实时虚拟机ZVM介绍 | 湖大嵌入式实验室
15、海思工业硬实时通用MPU板级方案
16、OpenEuler–实时内核UniProton及其混合关键性部署的实践
17、四大升级!助力首个 AI 原生开源操作系统 openEuler 24.03 LTS 正式发布