购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.3 ACRN架构设计

ACRN体系结构自2018年7月首次发布以来一直在不断演进。目前最新的ACRN体系结构可以支持逻辑分区、共享和混合模式的VMM架构,可以支持不同类型的VM,例如实时的和非实时的、安全的和非安全的,支持各种常见的操作系统,例如Ubuntu、Android、Windows或各种RTOS,其中RTOS又有Zephyr、Preempt-Linux、Xenomai等。ACRN目前支持的场景越来越多,可扩展性和易用性也在不断提高。

下面介绍ACRN发展过程中支持的不同的整体架构和Hypervisor层的软件架构。

首先要解释几个ACRN中常用的术语,它们和KVM或者教科书里的名称略有不同。

●ACRN虚拟机管理程序,可以简称为ACRN、ACRN Hypervisor或ACRN VMM。

●服务虚拟机(ACRN术语),英文为Service VM,对应于Xen项目里的Dom0或类似于KVM里的宿主机(Host)。

●用户虚拟机(ACRN术语),英文为User VM,对应于KVM里的客户虚拟机(Guest VM)。

●人机交互虚拟机,英文为HMI VM,是指专门用于人机交互目的的虚拟机。

●实时虚拟机,英文为RTVM,是指专门运行实时操作系统的虚拟机。

●设备模型,英文为Device Model。可以简称为DM、ACRN-DM,是运行在服务虚拟机里的模块,为ACRN提供设备模拟和共享服务。

●安全虚拟机,英文为Safety VM,专门用于功能安全目的的用户虚拟机。

●预先启动虚拟机(ACRN术语),英文为Pre-launched VM。该虚拟机由ACRN直接启动,因为它比服务虚拟机启动的更早,所以称为预先启动虚拟机。

●后启动虚拟机(ACRN术语),英文为Post-launched VM。该虚拟机在服务虚拟机之后启动,所以称为后启动虚拟机,由服务虚拟机进行启动和管理。

4.3.1 ACRN 1.0整体架构

图4-3中的ACRN 1.0架构是为智能驾驶舱场景专门设计的,其中包括服务虚拟机、可以运行车载娱乐系统的Linux VM或者Android VM。

●服务虚拟机主要提供两类功能。其一是设备管理,它负责管理硬件平台上的大部分物理设备,而物理设备的硬件驱动安装和运行在服务虚拟机上,如果一个物理设备是被多个用户虚拟机共享的,则用户虚拟机对硬件设备的访问和操作都必须经过服务虚拟机,先经过设备模型,再通过物理设备驱动来访问硬件。其二是用户虚拟机的生命周期管理,VM管理器负责用户虚拟机的启动/停止/暂停、虚拟CPU的暂停/恢复等。

●用户虚拟机。可以是Android VM或者普通Linux VM,里面主要运行车载信息娱乐程序。根据厂商需求和硬件平台的能力,可以支持多个娱乐系统VM。

●仪表盘控制应用程序,可以直接运行在服务虚拟机或者单独的Linux VM上。具体功能的配置划分可以根据需求来确定。

图4-3 ACRN 1.0架构

4.3.2 ACRN 2.0/3.0整体架构

从ACRN 2.0开始,ACRN扩展支持了预启动VM(主要用于安全虚拟机)和实时虚拟机。图4-4是ACRN 2.0/3.0的架构图,与ACRN 1.0主要有如下区别。

●ACRN 2.0支持预启动的虚拟机。这里的 预启动 (Pre-launched)意味着该虚拟机是由ACRN Hypervisor直接启动的,而且早于服务虚拟机启动。预启动的虚拟机独立于其他虚拟机运行,并拥有专用的硬件资源,如CPU核、内存和I/O硬件设备。其他虚拟机甚至可能不知道预启动的虚拟机的存在。因此,它通常被作为安全操作系统虚拟机使用。平台硬件故障检测代码可以在这个预启动的虚拟机中运行,并在发生系统关键故障时采取紧急措施。

●用户虚拟机。服务虚拟机和用户虚拟机之间共享剩余的硬件资源。用户虚拟机都是通过服务虚拟机来启动的,因此也叫 后启动 虚拟机。用户虚拟机系统可以是Ubuntu、Android、Windows或VxWorks。另外,还有一种特殊的用户虚拟机,称为实时虚拟机(RTVM),它运行的是实时操作系统,如Zephyr、VxWorks、Xenomai或者PREEMPT_RT Linux。RTVM通常用于各种工业控制,可编程逻辑控制器或机器人应用等对实时性有需求的场景。为了支持RTVM的实时性,ACRN也从多个方面做了优化,这将在后面的章节中详细介绍。

●服务虚拟机。如果没有预启动的虚拟机,则服务虚拟机是ACRN启动的第一个虚拟机。系统的硬件资源会首先分配给服务虚拟机,服务虚拟机可以通过设备驱动程序直接访问这些硬件资源。通过设备模型(ACRN-DM),服务虚拟机可以向用户虚拟机提供设备共享服务。服务虚拟机也可以把一些硬件设备直接分配给某一个用户虚拟机,让该虚拟机可以独占这些硬件设备进行直通访问,则此时就不用再经过服务虚拟机。目前ACRN项目中服务虚拟机的实现是基于Linux的,但只要将ACRN设备模型和其对应的内核模块移植到非Linux操作系统中,其他系统也可以扮演服务虚拟机的角色。

●ACRN Hypervisor优化。ACRN 2.0在Hypervisor中添加了一些必要的设备仿真支持,例如vPCI和vUART,以避免不同虚拟机之间的干扰。另外,ACRN 2.0支持在服务虚拟机上创建并运行RTOS,具有LAPIC的直通和轮询模式的驱动程序(Polling Mode Driver,PMD)等功能。

图4-4 ACRN 2.0/3.0架构

4.3.3 ACRN的关键组成

ACRN作为一个完整的开源项目,除了最重要的Hypervisor外,还包含其他关键部分。下面加以简单介绍,后面的章节会对此进行较详细的说明。

●服务虚拟机:是ACRN软件架构中一个重要的客户操作系统。它以non-root模式运行,并包含许多关键组件,包括VM管理器、设备模型、ACRN服务、CPU内核以及virtio和Hypercall调用模块。设备模型管理用户虚拟机并为其提供设备仿真。用户虚拟机还通过ACRN服务和VM管理器提供系统电源生命周期管理服务,并通过ACRN日志/跟踪工具提供系统调试服务。

●ACRN设备模型:设备模型是服务虚拟机中用户级的类似于QEMU的应用程序,负责创建用户虚拟机,然后根据命令行配置执行设备仿真。基于虚拟机监控器服务模块(Hypervisor Service Module,HSM),设备模型与VM Manager交互以创建用户虚拟机。然后,它通过设备模型用户级别的完全虚拟化、基于内核(如virtio、GPU虚拟化)的半虚拟化或基于内核HSM API的直通来做设备模拟。

●虚拟机监控器服务模块:HSM内核模块包含在服务虚拟机中,是用来支持用户虚拟机管理和设备模拟的服务虚拟机内核驱动程序。设备模型遵循标准Linux字符设备API(IOCTL)来访问HSM功能。HSM通过Hypercall或upcall中断与ACRN管理程序通信。

ACRN还包含Log/Trace工具用来接收Hypervisor的log/trace信息;VM Manager(ACRN-Daemon/LIBVIRT)用来管理虚拟机的创建和销毁。从ACRN 3.0之后,还引入了一系列基于Web的图形化配置工具。

4.3.4 ACRN Hypervisor的架构

ACRN利用基于硬件的英特尔虚拟化技术(Intel VT)。ACRN Hypervisor运行在虚拟机扩展(VMX)的根模式(root mode)下,而服务虚拟机和用户虚拟机则运行在VMX非根模式(non-root mode)下。图4-5所示为ACRN Hypervisor的分层架构,各模块的功能介绍如下。

图4-5 ACRN Hypervisor的分层架构

ACRN Hypervisor分层架构中各个模块的功能如下。

●Boot执行最基本的硬件初始化,以启用C代码的执行。

●Library由不需要显式初始化的子程序组成,包括标准内存和字符串操作函数,如strncpy、原子操作函数和位图操作函数。该组件独立于其他组件并广泛用于其他组件。

●Hardware Management and Utilities对硬件资源进行抽象,并向上层提供定时器和物理中断处理程序注册等服务。

●Virtual CPU实现CPU、内存和中断虚拟化。其中vCPU循环通过调用其他组件中的处理程序来处理VM退出事件。Hypercall为一种特殊类型的VM退出事件处理过程。该组件还能够向Service VM注入上行调用中断。

●Device Emulation实现在管理程序中仿真的设备,例如虚拟可编程中断控制器,包括vPIC、vLAPIC和vIOAPIC等。

●Passthrough Management管理分配给某特定VM的物理PCIe设备。

●Extended Device Emulation组件实现一种I/O请求机制,使管理程序能够将I/O访问从用户虚拟机转发到服务虚拟机以进行仿真。

●VM Management组件管理虚拟机的创建、删除和其他生命周期操作。

●Hypervisor Initialization组件调用其他组件中的初始化子例程,以启动Hypervisor并以共享模式启动Service VM或以分区模式启动所有VM。

以上模块的具体的实现将在后面的章节中详细说明。

虚拟化技术主要包括4个技术领域,即CPU虚拟化、内存虚拟化、中断虚拟化和I/O虚拟化。后面的章节将介绍这4个技术领域及其实现。 LWAGrKZsYAeNZkJT6XXD8hDzbIQfjb40cjGfMX5w5rHNGP64IFXzKx1L1LElP3JW

点击中间区域
呼出菜单
上一章
目录
下一章
×