前言
2023年Zephyr开发者大会(ZDS)于6月27日至30日在捷克布拉格隆重举行。与以往两次不同,本次ZDS由Zephyr项目规划和管理,并作为首届嵌入式开源峰会(EOSS)的一部分进行。在这个令人期待已久的盛会中,全球Zephyr开发者们共同探讨了Zephyr实时操作系统(RTOS)的最新技术与发展趋势。作为一款开源、灵活和可扩展的嵌入式实时操作系统,Zephyr项目在2014年由英特尔发起,2016年作为Linux基金会项目正式面向公众启动,得到了全球范围内的广泛关注和采用。
ZDS 2023共70余个技术报告,涵盖了使用指导与展示、新功能与技术、架构修改与操作系统、多核异构与虚拟化、模拟器、测试、工业流程与代码管理、安全性、应用案例、工具与调试等丰富多样的内容。湖大嵌入式实验室的小伙伴们将对本次大会的所有技术报告进行逐一收集、整理与分享,尽最大努力为Zephyr开发者提供ZDS 2023技术报告的开发经验、实践成果以及解决方案的参考。
今天分享第21篇技术报告,由ZVM核心维护者熊程来整理,题目为:
“ZVM:基于Zephyr RTOS的嵌入式实时虚拟机”
作者简介
谢国琪,湖南大学教授、博士生导师、嵌入式与网络计算湖南省重点实验室主任、国家级青年人才计划获得者、湖南省杰出青年基金获得者、获IEEE可扩展计算Early Career Researcher Award。长期从事嵌入式计算与系统方面的关键核心技术研究与人才培养,研究成果发表于RTSS、DAC、TPDS、TCAD、TDSC、TSC等会议与期刊上,发表英文综述论文4篇,出版英文专著2本。担任中国计算机学会(CCF)嵌入式系统专委候任秘书长,CCF YOCSEF长沙学术秘书,JSA、JCSC及MICPRO 3本嵌入式领域SCI期刊编委。
Zephyr RTOS及虚拟化技术
先问几个问题:
1. 为什么要选择Zephyr RTOS?
2. 为什么要使用嵌入式虚拟化技术?
3. 现有的虚拟化技术有哪些?
选择Zephyr RTOS,主要因为其有如下特性 :
多架构支持
产品级应用
轻量级设计
灵活的可配置性
多种嵌入式协议支持
活跃的开源社区
这些特性有有助于开发人员便捷的进行应用的开发。
嵌入式场景下需要使用虚拟化的原因:
虚拟化实现域间的隔离
嵌入式虚拟化需要较高的性能
实现资源的复用以降低资源损耗
支持多种架构
为了设计虚拟化的方案,作者列出了许多常见的虚拟化产品,包括Linux-KVM,QNX,VMware,Virtual Box等:
此外,还有一些其他的方案如XEN,ACRN等,以往的一些工作中,Zephyr RTOS作为一个客户虚拟机,可以运行在XEN,ACRN等虚拟化管理平台上。因此作者考虑,为什么不能将Zephyr RTSO作为实时操作系统底座。
因此,作者分析了如果Zephyr RTOS作为Host OS会带来哪些优势,主要包括:
使用Zephyr RTOS进行虚拟化,主要进行如下工作,即修改Zephyr RTOS,添加虚拟化模块:
虚拟化模块设计的整体架构设计,
(1)系统架构
整体架构包括主机操作系统,虚拟化模块以及多个客户机操作系统的平台。
(2)虚拟化模块设计
虚拟化模块作为Zephyr RTOS的一个模块加入到Zephyr自身中,以为虚拟机提供一个虚拟化的环境。同时,提供了一些虚拟机资源调用的接口。
ZVM的设计,使用了ARMv8架构完善的虚拟化支持,包括:
处理器虚拟化拓展支持,为Hypervisor设计了单独的特权级(EL2 mode)
内存虚拟化拓展支持,支持两阶段物理地址转换(Stage-2 Translation)
中断虚拟化拓展支持,提供一组物理寄存器支持虚拟中断注入(vCPU Interface)
外设虚拟化拓展支持,为DMA设备提供单独硬件地址转换机制(SMMU)
这些虚拟化特性可以显著的降低系统虚拟化的开销。
除了基本的虚拟化支持,ZVM还使用了主机虚拟化拓展VHE特性来支持Zephyr RTOS主机运行在hypervisor层上,来进一步减少开销。
基础虚拟化模块的设计:
①虚拟处理器(vCPU)模块:核心计算资源
②虚拟内存(vMem)模块:核心存储资源
③虚拟中断(vGIC)模块:物理外设中断+软件模拟中断
④虚拟设备(vDev)模块:完全虚拟化+直通
⑤虚拟时钟(vTimer)模块:Host记录VM的事件
1. 处理器虚拟化设计
每个Zephyr的线程表现为一个vCPU;
采用主从模式进行vCPU的分配,主机绑定单个CPU,从机绑定其他CPU;
核间通信采用IPI的方式实现,通过IPI在不同核间传递信息。
使用Zephyr线程来模拟单个vCPU,包括如下部分内容:
优先级:优先级一般主机>虚拟机实时应用>虚拟机正常应用
调度器:vCPU线程统一参与主机线程调度,采用单链表的方式进行调度
运行:vCPU在指定的CPU上执行,直到异常发生
2. 定时器虚拟化设计
vTimer register:
VM可以使用一套专门的虚拟机计数器来实现vTimer的计数,其通过每次计算与主机的时间偏差来具体实现。
Event trigger:
VM的事件可以绑定到Zephyr RTSO的事件中进行处理,以实现实时性相关任务。
3. 内存虚拟化设计
使用两阶段的地址转换来实现虚拟内存的映射,实现从GVA到HPA的地址转换。
在ZVM针对VM的内存设计方案中,每个VM由如下三个部分组成,包括vm_domain,vm_partition,vm_block来共同构成VM的物理地址空间。
Fully Virtualized Devices:
由软件模拟,兼容性好,开销大,性能差。用于不可单独分配设备(例如中断控制器GIC)
Device Passthrough:
使用原有的硬件驱动,不增加新驱动,性能和主机上直接使用该物理硬件非常接近。用于可单独分配设备(调试串口等独占外设)
在设备虚拟化过程中,需要设计到虚拟内存的映射框架,包含如下内容:
中断虚拟化包括中断模块的部署:
vIRQ: 使用软件模拟ARM GIC的中断处理功能;
Supported interrupt: 支持物理设备、软件模拟等中断类型;
Interrupt Injection: 使用vGIC来实现虚拟中断的注入。
6. 系统部署
演示平台为QEMU virt平台,版本为QEMU6.20,基本功能实现演示界面如下:
同时,作者演示在硬件平台上支持了启动主机的示例,平台为ROC_RK3568_PC板卡。
未来的工作主要从如下几个部分展开,包括实时性支持,虚拟设备框架支持,安全性支持以及端测AI框架的支持:
实时性支持:
实时性支持方面包括使用主机调度算法实现支持虚拟机的实时调度任务以及使用Ivshmem实现虚拟机间的实时通信技术:
虚拟设备框架支持:
虚拟设备框架支持主要包括对virtIO等虚拟框架的支持,主要设计virt-driver,virt-queue以及virt-device的一些工作:
安全性支持:
安全性支持主要在Guest OS上支持LLVM+CFI的技术,以及在Hypervisor中支持对Guest中断栈防护的一些工作:
AI框架支持:
主要在Zephyr RTOS端支持Paddle Lite和TensorFlos Lite等轻量级AI框架,同时底层硬件支持NPU等智能计算硬件:
谢国琪老师在ZDS上分析的这个ZVM虚拟机管理器是一个基于Zephyr RTOS研发的面向实时嵌入式系统的管理器。先阶段已经开源到openEuler社区,该项目的目标是为Zephyr打造一个虚拟机管理平台,现阶段已经实现了基本的功能。同时也欢迎感兴趣的人能加入其中一起建设这个项目。