ZVM技术解读·架构篇①|实时内核与虚拟化功能一体化
01 什么是实时内核与虚拟化功能一体化
传统虚拟化系统通常将操作系统内核与虚拟化功能划分为不同的软件层次:Hypervisor负责客户OS(Guest)运行与资源虚拟化,主机OS(Host)或管理域负责系统服务和设备管理,不同层次之间通过Hypercall、跨域通知等机制协同工作。KVM将虚拟化功能集成到Host,但仍需通过用户态VMM(即QEMU)协同管理;Xen采用独立Hypervisor,并依赖Dom0承担Guest管理和设备服务;Jailhouse则进一步简化为静态分区Hypervisor,不进行Guest调度。
ZVM是将虚拟化功能直接构建在RTOS内核机制之中,使实时内核同时成为虚拟化运行基础。如表1所示,RTOS原有的CPU调度、内存管理、中断管理、设备管理和定时机制,分别直接支撑vCPU、虚拟内存、虚拟中断、虚拟设备和虚拟定时器。ZVM不是简单地实现RTOS+Hypervisor,实时内核与虚拟化功能一体化的核心思想是减少实时内核与独立Hypervisor之间不必要的特权级切换、上下文切换和控制权转交,将虚拟化功能直接放入RTOS的实时控制路径,构建一个具备原生虚拟化能力的RTOS。
表1:RTOS实时内核机制与虚拟化功能的一体化对应关系
| RTOS内核机制 | 虚拟化功能 | ZVM一体化设计 |
|---|---|---|
| CPU调度与绑定 | 虚拟CPU | 复用统一CPU管理和调度机制 |
| 内存空间管理 | 虚拟内存 | 在统一内存资源体系中完成Guest隔离 |
| 中断管理 | 虚拟中断 | 物理与虚拟中断统一进入实时中断控制路径 |
| 定时机制 | 虚拟定时器 | 依托统一时间基准和定时机制 |
| 设备与驱动框架 | 虚拟设备 | 直接复用RTOS设备框架并扩展虚拟化能力 |
ZVM将RTOS的调度、内存管理、设备、中断和定时能力直接扩展到虚拟化场景,而无需建立完全独立的第二套控制体系。其本质可以概括为三个"统一":
- • 统一资源控制:将RTOS原有CPU、内存、设备等资源管理机制直接扩展到虚拟化场景,实现物理资源与虚拟资源的一体化控制;
- • 统一实时调度:复用RTOS实时调度机制统一管理RTOS任务和Guest vCPU,通过1V1静态绑核隔离CPU资源,并采用O(1)复杂度调度实现确定性任务切换,减少多套调度体系之间的协同开销;
- • 统一中断与时间路径:将物理中断、虚拟中断和定时机制纳入同一实时控制路径,缩短事件响应链路并降低时间不确定性。
02 主流虚拟化方案中内核与虚拟化的组织方式对比
主流虚拟化方案都能够运行Guest,但其Hypervisor内核与虚拟化功能之间的组织方式不同,具体见表2所示。
表2:KVM、Xen、Jailhouse与ZVM的内核与虚拟化的组织方式对比
| 方案 | 内核与虚拟化关系 | CPU与Guest控制 | 典型切换/转交 | 实时性实现特点 |
|---|---|---|---|---|
| KVM | Host负责虚拟化+用户态VMM接口 | Linux管理vCPU+ KVM负责Guest运行 | Guest↔Host切换+设备处理切换到用户态 | VHE+绑核+实时Linux优化 |
| Xen | 独立Hypervisor + Dom0/服务域 | Xen调度vCPU,Dom0管理Guest | Guest↔Xen;设备Backend涉及跨Dom0 | CPU绑定+资源分区保障 |
| Jailhouse | 静态分区Hypervisor | 无Guest调度,CPU静态分配给Cell | 运行期切换非常少 | 通过静态资源隔离获得低干扰 |
| ZVM | RTOS内核与虚拟化功能一体化 | 统一RTOS机制支撑本地任务与vCPU | 减少Host/Hypervisor/管理域之间的中间转交 | 将虚拟化直接纳入RTOS确定性体系 |
- 1) KVM的设计已经具有较高的内核集成度,其API通过/dev/kvm及一系列ioctl由用户态创建Guest、vCPU和设备,KVM_RUN负责进入Guest执行;对于需要用户态设备模型处理的Guest Exit,执行路径还需要返回用户空间(QEMU)。
- 2) Xen与Dom0等服务域相互独立,并共同承担系统管理职责。Xen的xl工具则负责Guest创建、暂停、关闭等操作;Dom0默认获得设备并负责Guest I/O复用。这种分层具有清晰的系统边界,但部分完整功能需要Hypervisor与Dom0之间跨层协作。
- 3) Jailhouse只虚拟化无法直接硬件分区的必要资源,其他资源都采用硬件划分的方式。其中,Root Cell首先启动并加载、配置Jailhouse,之后各Cell使用静态划分的资源运行。在单纯的静态CPU和设备直通场景中,Jailhouse的运行路径本身较短。
- 4) ZVM并不是通过取消调度、减少虚拟化功能来获得实时性,而是希望在保留RTOS调度、虚拟中断、虚拟设备、VirtIO以及系统服务能力的同时,将这些能力直接组织到实时内核中。其技术重点是:既要短路径,也要完整的实时虚拟化能力。
03 例子一:实时事件到来后,谁来决定Guest OS什么时候运行?
假设一个实时事件到达系统,需要唤醒相关服务并使某个Guest快速运行。下面分析各个Hypervisor如何处理。
- 1) KVM中的Host管理vCPU调度而KVM通过KVM_RUN运行Guest。Guest同时受到Host调度体系以及KVM的共同控制。对于需要用户空间处理的Guest Exit,还需返回用户态VMM中,然后再次进入Host。即使采用VHE减少EL1与EL2之间的特权级切换,其并不改变其"Linux Host + KVM + 用户态虚拟机"控制的基本组织形式,Host仍然是一套面向通用操作系统设计的调度与服务体系。
- 2) Xen负责vCPU调度而Dom0拥有自己的操作系统调度体系。对于单纯的vCPU调度,Xen可以直接在Hypervisor内完成;但当事件涉及Dom0中的设备Backend或者系统服务时,就会形成"Dom0服务处理→Xen事件通知/调度→Guest vCPU运行"的跨Domain协同关系。Xen的典型Backend机制使用事件通道和共享Ring连接前后端,也就是说,系统中同时存在Hypervisor调度域和Dom0操作系统调度域。
- 3) Jailhouse干脆不做vCPU调度。一个Cell获得CPU之后长期独占该CPU运行,因此不存在"Hypervisor下一步应该调度哪个Guest"的问题。这使Jailhouse在静态实时分区场景中具有天然优势,但同时意味着它并不提供一套用于统一管理"RTOS任务 + 多Guest vCPU"的实时调度体系。
- 4) ZVM采用的是另一种方式。RTOS本身已经拥有成熟的CPU管理、优先级及实时线程控制机制。ZVM不再额外建立一套独立的Hypervisor调度体系,而是直接复用RTOS内机制。其逻辑关系可以简化为:"实时事件 → ZVM实时内核 → 统一中断/调度机制 → 本地实时任务或Guest vCPU → Guest运行"。这里减少的是"RTOS内核 → 独立Hypervisor → Host/管理OS → 再回到Hypervisor"这一类软件控制权转交。对实时系统来说,需要分析最坏情况下究竟经过多少调度点、多少执行环境及不确定的流程。因此,本地实时线程、Guest和事件响应可以置于一套实时控制体系中分析。
图1:实时事件到Guest运行的典型控制路径对比:ZVM强调统一实时控制与少切换
04 例子二:一次Guest虚拟I/O完成,要切换多少次?
第二个例子是Guest通过虚拟设备访问物理硬件。假设Linux Guest通过虚拟网卡发送数据,设备处理完成以后还需要向Guest返回中断。不同架构的路径差异更加明显。
- 1) KVM的用户态设备模型处理的路径表现为:"Guest→KVM→用户态VMM→Host Linux I/O/驱动 →KVM→Guest"。例如,虚拟设备产生设备异常时,KVM_RUN返回用户空间后可以由用户态完成相应Guest exit处理,再重新进入Guest。当然,KVM可以通过vhost、设备直通以及VHE等机制明显缩短特定I/O路径。这里比较的是需用户态设备服务参与的典型完整虚拟设备路径,不是所有KVM I/O都必须经过QEMU。
- 2) Xen的典型前后端设备模型中路径可以表示为:"Guest Frontend → Xen跨域机制 → Dom0 Backend → Dom0设备驱动 → Xen事件通知 → Guest"。Dom0通常获得设备并承担Guest I/O复用,其前后端接口通过共享Ring和Event Channel完成请求与通知。所以一次设备请求不仅涉及Guest和Hypervisor,还可能涉及另一个具有独立调度与状态管理体系的Domain。
- 3) Jailhouse直接将设备静态分配给某个Cell:"Cell → 物理设备"。这正是Jailhouse静态分区的优势,Jailhouse官方设计明确强调不进行通用设备仿真,但这里存在一个重要前提:"设备必须能够静态划分"。当系统进一步需要多个Guest共享网络、GPU、存储等资源,需要VirtIO、SR-IOV管理或其他虚拟设备服务时,就必须增加额外的软件机制。也就是说,Jailhouse主要通过"尽可能少做虚拟化"获得短路径。
- 4) ZVM同时获得两方面能力:"短路径+虚拟设备服务"。其典型路径可以收敛为:"Guest Frontend → ZVM内置虚拟设备服务 → ZVM I/O/驱动 → 物理设备"。设备完成后:"物理中断 → ZVM中断机制 → 虚拟中断 → Guest"。ZVM的虚拟化栈最小化设计已经明确提出,不依赖独立Host/管理域和QEMU等用户态VMM,而将设备虚拟化、I/O和系统服务直接在ZVM内部实现。
这里体现的正是一体化架构与另外两项架构创新之间的配合:
- • 实时内核与虚拟化功能一体化,减少内核与虚拟化控制之间的切换;
- • 虚拟化栈最小化,减少Host、用户态VMM等软件层级;
- • 无管理域服务下沉,减少Guest、Hypervisor与管理OS之间的跨域服务转交。
最终目的都是让关键实时路径更加直接和可控。
图2:Guest虚拟I/O典型服务路径对比:ZVM将虚拟设备服务与I/O能力组织在统一RTOS底座内
05 为什么"少切换"有利于实时性?
影响实时性的因素包括:"切换开销 + 调度等待 + 服务等待 + 时间抖动"。ZVM将实时内核与虚拟化功能融合后,RTOS原有的CPU调度、中断和定时机制可以直接作用于虚拟化控制,减少实时路径中的不确定执行环节。这种一体化融合带来三方面价值:
减少控制路径切换
虚拟化不再作为一个额外软件层叠加在RTOS之外,减少RTOS内核、独立Hypervisor和其他执行环境之间不必要的控制权往返。
减少多套调度体系协同
vCPU运行控制直接建立在RTOS CPU管理机制之上,有利于将CPU绑定、实时任务和Guest运行纳入统一的资源控制框架。
缩短最坏时延分析链
实时事件经过的软件层次越少,越容易明确事件从产生到Guest响应的时间,从而有利于降低时延抖动并开展端到端最坏响应时间分析。
ARM架构上VHE硬件特性进一步为这种一体化提供了硬件基础。VHE模式下Host 可以运行于EL2,而nVHE模式下Host通常位于EL1。ZVM提出了HyperVHE,使"RTOS直接运行在虚拟化控制特权级,实时内核本身执行虚拟化控制",控制管理统一在EL2实时内核内部直接完成,同时支持ARMv8.0和ARMv8.1+的所有硬件。
06 总结
嵌入式系统既需要RTOS的时间确定性,又需要多Guest和完整虚拟化能力。因此,ZVM在实时内核原有机制之上,使实时内核本身成为虚拟化运行基础。这种设计的核心价值可以概括为一句话:不是让RTOS去调用虚拟化,而是让虚拟化成为RTOS的原生能力。
由此减少不必要的特权级切换、上下文切换和跨执行环境转交,使Guest运行、本地实时任务、中断和时间控制进入更加统一的实时路径,为端到端时延控制和确定性执行提供体系结构基础。"实时内核与虚拟化功能一体化——少切换"正是"RTOS原生虚拟化"的第一层架构含义。