一、文章核心
文章介绍了MCS-IOV系统的设计,它通过硬件虚拟化技术,在空间、时间和故障隔离方面提供了保障。这个系统能够根据输入/输出的使用情况自动调整资源管理,并在发现异常的I/O行为时进行模式切换,以确保系统及时响应。
-
MCS-IOV的设计要求: 一个MCS的I/O系统需要同时提供以下三点:
- 隔离/分离:确保不同关键性任务之间的独立性,防止低关键性任务对高关键性任务产生干扰。
- 性能/效率:在不牺牲性能的前提下,提供资源的高效利用。
- 时间可预测性:保证任务在规定的时间内完成,以满足系统的实时需求。
-
现有方法的不足: 当前的解决方案无法同时满足以上三个要求。因此,本文提出了一种新的I/O管理框架——MCS-IOV,基于硬件辅助的虚拟化技术,实现了时间和空间的隔离,并阻止了故障传播,同时对性能的影响非常小。
-
MCS-IOV的特点:
- 支持混合关键性任务调度器的自定义接口,提供良好的时间可预测性。
- 支持基于I/O的关键性模式切换,可以通过检测I/O行为的异常(如I/O利用率高于预期)来触发模式切换,并进行I/O资源的重新配置。
关于虚拟化:
处理器中的虚拟化扩展: 现代的处理器(如英特尔的VT-x或AMD的AMD-V)内置了虚拟化扩展,这些扩展允许虚拟机更直接地访问硬件资源,而不是通过软件模拟的方式。例如,虚拟机可以直接与处理器、内存和I/O设备交互,减少了虚拟机管理程序(Hypervisor)的干预。
I/O虚拟化: 硬件辅助虚拟化技术还包括I/O设备的虚拟化,典型的例子是英特尔的VT-d技术,它允许虚拟机直接访问物理I/O设备,如网络接口卡或存储设备。
减少性能开销: 传统的虚拟化中,虚拟机与物理硬件之间的交互需要频繁地通过虚拟机管理程序来处理,增加了上下文切换和资源管理的开销。而硬件辅助的虚拟化可以直接将虚拟机的请求传递给底层硬件
故障隔离: 硬件辅助虚拟化还可以通过硬件实现故障隔离,防止某一虚拟机的崩溃或错误传播到其他虚拟机或影响整个系统的稳定性。
二、Intro
-
安全关键系统的重要性: 安全关键系统在医疗、工业、汽车和航空等领域中扮演着重要角色。在这些系统中,通常需要将不同关键性级别的组件集成到一个共享的硬件平台上。例如,汽车中的自动驾驶功能和安全性监控系统都可能有不同的关键性级别。
-
混合关键性系统的需求: MCS设计的一个重要目标是确保高关键性任务不受到低关键性任务的干扰。因此,传统的MCS设计会强制在时间、空间和故障方面隔离不同关键性级别的任务。然而,强隔离通常会导致资源浪费和性能降低。
-
现有设计趋势: 近年来,MCS设计的一个显著趋势是允许在保持足够的隔离的同时,提供一定形式的资源共享(如虚拟化技术)。这种共享的目的是在不同关键性任务之间高效地利用资源,而不牺牲隔离性。
-
时间可预测性和实时约束: 对于MCS来说,实时约束通常是一个关键要求。未能在规定的时间内完成安全相关的任务可能会导致系统整体失效,甚至引发事故。例如,电动汽车中制动操作未能按时完成,可能会导致严重的车祸。因此,MCS必须同时满足隔离、性能和时间可预测性的需求。
-
I/O问题及现有工作中的不足: 虽然I/O在嵌入式系统中非常重要,但现有的大多数实时MCS研究忽略了I/O问题。因此,本文提出了MCS-IOV,旨在解决这些问题,并在隔离、性能和时间可预测性方面为MCS设计提供一个完整的解决方案。
三、行业现状与学术界原型
A. 行业现状
-
行业中的MCS支持不足: 当前,大多数工业领域使用的安全关键性系统无法支持MCS的执行环境,主要是由于缺乏有效的隔离支持。例如,全球三大汽车半导体供应商所提供的最新片上系统(SoC)仅能支持单一关键性系统,无法在同一硬件平台上同时支持不同关键性级别的任务。
-
NXP的产品现状: NXP半导体几乎所有当前产品都考虑了安全性。比如,S32V234处理器主要用于计算机视觉和机器学习,支持ISO 26262标准中的ASIL-B级别的安全应用。然而,NXP的FS-SBC产品(如S32x系列和MPC574x系列)目前仅支持ASIL-C级别。
-
Infineon的产品现状: 英飞凌科技(Infineon)专注于汽车领域的不同方面,如无线控制、功率管理和安全性。其PRO-SIL系列产品主要设计用于安全关键系统,并提供满足较高关键性级别(SIL-3)的多种方法,包括硬件冗余、软件冗余和外部看门狗等。不过,虽然PRO-SIL可以提供良好的扩展性、降低复杂性和减少功耗,但仍无法支持MCS环境中的隔离需求。
-
Renesas的产品现状: 瑞萨电子将其汽车产品分为三大类:低功耗、高效能和高性能。RHx系列(属于高效能类别)具备最好的安全特性,支持ISO 26262中的ASIL-C级别。不过,当前阶段,瑞萨的主要关注点是提高能效、降低功耗和提升硬件效率,而尚未支持MCS环境。
换句话说,当前的问题:大多数工业界的系统,无法同时运行不同关键性的任务,原因是它们的设计不能有效地隔离任务。比如在汽车领域,最新的处理器只能运行一种任务,而不能同时运行重要的和不太重要的任务。
B. 学术界MCS I/O系统原型
-
基于TDMA的方法: 时分多址接入(TDMA)用于提供时间隔离。此方法通过分配固定的时间片段给不同的任务,确保任务间的时间隔离。例如,Carvajal和Fischmeister提出了一种用于MCS的实时以太网开源框架,Cilku等人提出了一种基于TDMA的总线仲裁方案。然而,TDMA方法仅能解决时间隔离问题,无法满足空间和故障隔离的需求,且通常会导致资源浪费。
-
基于TrustZone的方法: ARM的TrustZone技术引入了两个硬件保护域——安全域和非安全域,提供了系统级别的隔离。LTZVisor和TZDKS是使用TrustZone技术的MCS架构,相较于TDMA方法,它们在系统性能方面有明显提升。然而,TrustZone方法有两大限制:只能支持两种系统模式,且不支持运行时自适应的I/O资源管理。
-
基于虚拟化的方法: 虚拟化系统中的虚拟机通过逻辑隔离确保一个虚拟机中的应用程序不会影响其他虚拟机。这与MCS中对隔离的需求密切相关。例如,Groesbrink等人利用基于Hypervisor的虚拟化将系统分成独立的分区(即虚拟机),并建立I/O虚拟化系统以保证关键性I/O请求优先得到服务。然而,这些方法涉及复杂的资源管理和指令路径,可能会导致高额的性能开销。
-
基于操作系统级别的方法: Kim等人提出了从操作系统级别进行优化的方法,通过优化内存管理和IPC机制来提高MCS的I/O性能。虽然这减少了某些虚拟化方案的开销,但操作系统级别的隔离通常不如虚拟化方法。
-
硬件辅助虚拟化: 针对虚拟化引入的性能问题,芯片制造商开始提供硬件辅助技术,如英特尔的VT-d技术可以让虚拟机直接访问I/O设备,减少虚拟化带来的开销。然而,尽管有硬件支持,虚拟机的I/O性能依然难以达到原生系统的水平,且在时间可预测性方面仍然存在不足。
简单来说:
TDMA方法:
- 是什么:TDMA通过时间片的方式,让不同任务轮流使用系统资源。它确保不同任务不会在时间上互相打扰。
- 问题:这种方法只能解决“时间上的隔离”,但不能解决空间上的隔离(即让不同任务用不同的硬件)。而且这种方法可能会导致资源浪费。
TrustZone方法:
- 是什么:TrustZone是ARM公司提供的技术,它把系统分为“安全”和“非安全”两个部分。这两个部分可以独立运行,互不影响。
- 问题:虽然TrustZone能提升系统性能,但它只能支持两种模式(安全和非安全),不够灵活,无法动态调整任务的资源使用。
虚拟化方法:
- 是什么:虚拟化让不同任务在“虚拟机”中运行,每个虚拟机就像一台独立的计算机,任务之间互相不干扰。
- 问题:虽然虚拟化提供了良好的隔离,但资源管理和指令路径变得非常复杂,导致系统运行变慢。
操作系统级别方法:
- 是什么:通过优化操作系统的内存和通信机制,提升任务的运行效率。
- 问题:这种方法的隔离效果没有虚拟化那么好。
硬件辅助虚拟化:
- 是什么:一些芯片厂商,比如英特尔,提供了硬件支持,让虚拟机直接访问硬件设备,从而提高运行效率。
- 问题:即使有硬件支持,虚拟机的I/O性能(输入输出速度)还是比不上直接运行在硬件上的系统。
三、架构总览
1. MCS-IOV的基础设计
MCS-IOV是设计的输入/输出(I/O)虚拟化系统,依靠虚拟化技术和硬件支持来运行。简单来说,它能够让不同关键性的任务同时运行,而这些任务可以互不干扰。
- 关键性世界:每个关键性任务都在一个虚拟机中运行,这个虚拟机就是所谓的“关键性世界”。每个虚拟机都是独立的,这意味着它们在时间上、空间上是隔离的,即使有一个虚拟机出错,也不会影响其他的虚拟机。
- 系统模式:即MCS的模式切换规则。
2. 软件和硬件结合
MCS-IOV不仅依靠软件虚拟化,它还通过硬件来加速虚拟化的过程。例如,它会把虚拟化和I/O驱动的部分工作交给硬件来处理,这样可以减少软件开销,并提高系统的性能。也就是说,MCS-IOV通过硬件实现了部分复杂的操作,从而减轻了软件的负担,使得系统整体运行更加流畅、稳定。
3. 安全标准的支持
MCS-IOV在设计时参考了ISO 26262安全标准,这个标准是专门用于汽车等安全关键性领域的国际标准。MCS-IOV可以支持四种关键性级别(从ASIL A到ASIL D),即从最低到最高的安全要求。系统的设计是通用的,可以扩展到其他安全标准。
4. MCS-IOV的架构(对应图1)
关键性世界 (Criticality Worlds):
- 图中有四个不同的“关键性世界”,每个世界代表一个虚拟机 (VM)。
- 每个关键性世界都有其自己的应用程序 (App) 和实时操作系统 (RTOS),如 FreeRTOS。操作系统负责管理任务的执行。
- 关键性世界内部分为 用户模式 (User Mode) 和 内核模式 (Kernel Mode),这反映了操作系统的工作方式。应用程序运行在用户模式下,而 FreeRTOS 和 I/O 驱动程序在内核模式下运行。
关键性级别管理器 (Criticality Level Manager):
- 这是一个用于控制系统模式切换的模块。当系统检测到某个关键性任务需要更多资源时,这个管理器可以触发模式切换,从低关键性模式切换到高关键性模式。
- 管理器会修改硬件寄存器(图中的
REG_L_K1=0x0A
到REG_L_K4=0x0D
),这些寄存器控制关键性世界的运行状态。MC-IOV:
- MC-IOV 是核心的 I/O 虚拟化系统,它位于所有关键性世界之间,并负责将 I/O 操作映射到具体的硬件设备。它通过硬件实现虚拟化,确保多个虚拟机可以同时使用系统的 I/O 设备,并保证彼此之间不会互相干扰。
硬件层:
- 底层硬件包括了多个 CPU(如 Microblaze 和 ARM CortexA9)和 I/O 设备(如 UART、VGA、Flash、以太网 (Ethernet)、CAN、LIN、DAC 等等)。这些设备通过虚拟化技术提供给每个关键性世界使用。
- MC-IOV 系统将所有硬件设备虚拟化,允许每个虚拟机安全高效地访问这些设备,而不会受到其他虚拟机的影响。
MCS-IOV的架构如图1所示,分为软件层和硬件层:
- 软件层:每个关键性世界的核心是实时操作系统(RTOS),比如FreeRTOS,它在内核模式下运行,能够提供完整的功能。同时,FreeRTOS可以为那些需要保证时间限制的应用提供实时环境。
- 硬件层:MCS-IOV的Hypervisor(虚拟机管理程序)负责系统的虚拟化,包括资源分配、不同关键性世界之间的物理隔离。系统中每个关键性世界的状态会存储在硬件的专用寄存器中,并可以在运行时进行修改。
5. BlueIO(对应图2)
虚拟复杂设备控制器 (VCDC):
- BlueIO 中包含多个 VCDC,每个 VCDC 是一个虚拟控制器,负责虚拟化不同的 I/O 设备。
- VCDC 分为三个主要部分:
- I/O VMM:负责将虚拟机中的 I/O 请求转换为实际的物理设备指令。例如,当虚拟机发送 I/O 请求时,I/O VMM 会根据设备类型和指令,将这些请求转化为可以执行的操作。
- 低层 I/O 驱动程序:封装了具体 I/O 设备的驱动程序。例如,它可以处理 SPI Flash 或以太网设备的数据读写。
- 实时 I/O 控制器:确保 I/O 操作的时间可预测性,绑定了 I/O 操作与时间限制,保证实时系统中的任务能够按时完成。
I/O 类型选择器:
- 这是一个多路复用器,根据 I/O 的类型,决定将 I/O 请求发送到哪个 VCDC。它在多核系统中处理多个虚拟机的 I/O 请求,并保证请求被正确地路由到相应的控制器。
- I/O 类型选择器从虚拟机接收请求后,选择合适的路径并将请求发送给底层的物理设备。
调度器 (Scheduler):
- 负责协调 I/O 请求的顺序,以确保不同关键性世界的 I/O 请求能按时处理。调度器会根据任务的优先级和时间限制来分配 I/O 资源。
底层硬件设备:
- 底层硬件设备包括 SPI Flash、以太网 (Ethernet)、VGA 等。这些物理设备通过 BlueIO 系统虚拟化,提供给多个虚拟机使用。
BlueIO是一个可扩展的硬件实时I/O虚拟化系统,它能够将物理I/O设备虚拟化为多个虚拟I/O设备,支持不同虚拟机访问这些虚拟设备。
- I/O VMM:这是BlueIO中的一个模块,负责将虚拟机中的I/O请求翻译成实际的I/O操作。这意味着,当虚拟机需要访问硬件时,I/O VMM会将请求转换成硬件能够理解的指令。
- 低层I/O驱动:这个模块封装了特定的I/O驱动程序。例如,它可以读取一个特定地址上的数据。
- 实时I/O控制器:这个控制器能够绑定I/O操作和时间限制,保证I/O操作在规定的时间内完成,适合实时系统的需求。
6. BlueTree
BlueTree是一个为多核系统设计的树形内存互连结构,能够让多个CPU同时访问内存。它在这篇论文中被扩展,用于实时访问I/O设备的内存,确保数据在多个核之间快速而有序地传递。
四、MCS-IOV 系统设计
图3 展示了整个 MCS-IOV 系统在一个 NoC(片上网络)结构中的平台架构。这里包含了处理器、路由器、定时器和存储器等组件。
BlueTree:
- 这是一个为多核系统设计的内存互连结构,用于管理从多个处理器核到 DDR 内存的访问。
- BlueTree 提供了时间可预测的内存访问,也就是说,它能保证不同的处理器核在规定的时间内访问内存。
处理器核 (C):
- 系统中的多个处理器核通过路由器相互连接,并通过 BlueTree 访问 DDR 内存。
- 这些核承担关键性任务的执行,是系统处理和计算的核心部分。
路由器/仲裁器 (R):
- R 表示路由器或者仲裁器,负责在网络中的不同节点之间传递数据。
- 它们将不同处理器核和其他硬件模块连接起来,管理数据的流动。
全局定时器 (T):
- 系统包含一个全局定时器,用于为系统提供同步时钟信号,确保所有处理器核能够一致地处理任务。
MCS-IOV Hypervisor:
- 虚拟机管理器(Hypervisor)连接在网络的底层,负责管理不同关键性世界和 I/O 设备之间的通信。
- 它也是所有 I/O 请求的中介,负责调度和隔离。
图4 比较了 FreeRTOS(实时操作系统)在两种系统中的表现:(a) 原生系统 和 (b) MCS-IOV 系统。
(a) 原生系统:
- 在原生系统中,应用程序通过 FreeRTOS 提供的 API 与操作系统内核交互,并通过操作系统管理 I/O。
- I/O 驱动程序位于操作系统内核中,负责管理具体的 I/O 设备(例如,处理 PE(处理单元)或 I/O 设备)。
- 用户应用需要通过内核调用 I/O 驱动来与 I/O 设备进行通信。
(b) MCS-IOV 系统:
- 在 MCS-IOV 系统中,I/O 管理功能从 FreeRTOS 内核中分离出来,用户应用可以直接通过虚拟化的高层接口与 I/O 设备交互。
- 这减少了 I/O 访问路径的复杂性,并将一部分 I/O 驱动的实现转移到了硬件中,提升了系统性能和资源利用率。
- I/O 驱动被高度简化,使得虚拟化系统能够更有效地管理 I/O 请求。
图5 展示了 MCS-IOV Hypervisor 的架构,主要包括两个部分:系统模式管理路径 和 I/O 路径。
系统模式管理路径:
- 系统模式管理器负责管理不同关键性世界的模式和执行时间。每个关键性世界的属性(如关键性级别和执行时间)存储在独立的寄存器中。
- 这些寄存器的值用于控制调度器,确保系统在运行时能够为每个关键性世界合理分配资源。
I/O 路径:
- I/O 路径主要由 I/O 池和 BlueIO 组成。I/O 池负责调度来自不同关键性世界的 I/O 请求,并根据不同的调度策略(如固定优先级、轮转调度)进行处理。
- BlueIO 则提供了 I/O 虚拟化功能,封装了所有 I/O 驱动程序。I/O 请求通过 I/O 池发送到实际设备,响应再返回给关键性世界。
请求路径与响应路径:
- 请求路径 用于传输来自关键性世界的 I/O 请求,响应路径(图中用灰色阴影表示)用于将 I/O 响应传回给关键性世界。
- 这些路径通过可配置的调度器管理,可以根据系统的需要选择不同的调度策略。
-
总体结构:
- MCS-IOV 系统结合了软件和硬件层,提供了虚拟化功能,并确保了不同任务之间的隔离和有效的资源利用。这个系统架构不依赖特定的总线或CPU类型,因此可以广泛应用于不同类型的平台。
- MCS-IOV 通过 NoC(网络片上系统)与处理器核、全局同步定时器以及内存访问接口(BlueTree)进行通信。
-
关键性世界与来宾操作系统:
- MCS-IOV 系统中引入了四个独立的“关键性世界”,每个世界可以看作是一个虚拟机。
- 虚拟化有两种形式:
- 裸机虚拟化:来宾操作系统直接在处理器上运行,而不需要主机操作系统。这意味着来宾操作系统可以以内核模式(Kernel Mode)运行,拥有全部权限。
- 准虚拟化:来宾操作系统的内核在I/O管理部分被修改,用高层的I/O驱动程序替代,这减少了操作系统的复杂性并简化了I/O访问路径。
-
系统模式管理器:
- 系统模式管理器在软件层中独立于关键性世界运行,专门用于管理系统的模式切换。每个关键性世界的系统模式映射到 MCS-IOV 虚拟机管理器中的专用寄存器中。
- 该管理器可以在运行时通过更新寄存器的值来调整关键性世界的系统模式。例如,当检测到 I/O 缓冲区过载时,可以配置系统模式管理器切换关键性世界的系统模式。
-
MCS-IOV Hypervisor(虚拟机管理器):
- Hypervisor 是 MCS-IOV 的核心部分,负责处理系统模式的管理路径和 I/O 路径。系统模式的状态保存在独立的寄存器中,这些寄存器被用于输入调度器(Scheduler)以分配 I/O 请求。
- I/O 路径:包括 I/O 池和 BlueIO 系统。I/O 池负责调度来自不同关键性世界的 I/O 请求和响应,而 BlueIO 提供 I/O 虚拟化功能,并封装相应的 I/O 驱动程序。
-
可配置性与扩展性:
- I/O 池可以分为两个路径:请求路径(Request Path)和响应路径(Response Path)。每个路径都有一个独立的调度器,用于调度不同关键性世界的 I/O 请求和响应。
- 这些调度器的调度策略是可配置的,系统集成器可以根据需要使用固定优先级调度、轮转调度等策略,也可以通过接口引入新的自定义调度策略。
- 由于 I/O 池的设计非常通用,MCS-IOV 系统能够轻松扩展,支持更多的 I/O 设备,比如 CAN 和以太网。
BlueTree
1. 内存互连结构
BlueTree 主要是一种树形结构的内存互连架构,负责将多个处理器核(或其他计算单元)与共享内存(例如 DDR)相连。树形结构的优点是可以高效地组织和调度来自不同核的内存请求,避免瓶颈问题。
2. 时间可预测性(Time Predictability)
BlueTree 的一个关键特性是保证时间可预测性。
3. 分层结构(Hierarchical Design)
BlueTree 是一个层次化的结构,每一层都有多个路由器或仲裁器 (R)。这些路由器负责在系统中的不同处理器核和内存之间传递数据。通过这种分层的设计,BlueTree 能够将大量的处理器核连接到共享内存,同时保持高效的数据传输。
举个例子,假设有多个处理器核发出了访问内存的请求。BlueTree 的路由器会根据这些请求的优先级、位置等信息,决定如何高效地把数据传送到目标内存区域。
4. 处理器核到内存的直接连接
处理器核通过 BlueTree 连接到共享内存(如 DDR)。BlueTree 的设计使得即使有多个处理器核同时请求访问同一片内存,它也能通过合理的调度和路由机制,确保内存的访问不会冲突或者超时。
仲裁器 (Arbiter):仲裁器决定在有多个请求时,哪个处理器核能够优先访问内存。这种机制确保系统不会陷入资源争用的困境。
全局同步定时器 (Global Timer):定时器在 BlueTree 中起着同步的作用,确保所有处理器核的操作步调一致。这对于时间可预测的内存访问至关重要。