CubeSandbox 内置 hypervisor 版本演进全解:从 v0.1.0 到 v28.0 的 Cloud Hypervisor 技术路线图
【免费下载链接】CubeSandboxInstant, Concurrent, Secure & Lightweight Sandbox for AI Agents.项目地址: https://gitcode.com/GitHub_Trending/cu/CubeSandbox
本文以 CubeSandbox 仓库内hypervisor/目录下内置的 Cloud Hypervisor(VMM)release-notes.md 为核心主线,系统梳理该 VMM 从 v0.1.0 到 v28.0 的完整技术演进脉络,涵盖启动与固件、内存管理、I/O 虚拟化、设备直通、安全特性、热插拔、实时迁移与快照恢复等核心主题。读者读完后,既能掌握各版本引入的关键命令行参数与配置选项(如--memory thp、--platform iommu_segments、--balloon free_page_reporting、--vdpa等),也能理解这些特性在仓库源码中的落点,为在生产环境中选型、升级与排障提供依据。
一、版本脉络与稳定性承诺:为什么说 v15.0 是分水岭
hypervisor/release-notes.md记录的版本序列横跨两个阶段:早期0.x阶段(v0.1.0 ~ v0.14.1)与vNN.0阶段(v15.0 ~ v28.0)。
v15.0 引入新的版本编号方案与稳定性承诺,这是理解整个演进路线的关键坐标:
- API(含命令行选项)在至少提前 2 个版本预告前,不会被移除或以破坏性方式变更;已弃用功能会在 release notes 中明确记录并给出警告。
- 在两次正式版本之间,若存在需要修复的重大 bug 或安全问题,会发布 point release(例如 v20.1、v20.2、v22.1、v23.1、v0.5.1、v0.14.1)。
- 明确不受稳定性承诺保护的范围:跨版本的 snapshot/restore 与 live migration 不保证兼容;TDX、SGX 被视为实验特性,可能在版本间大幅变化。
v28.0 进入 LTS(Long Term Support)节奏:这是首个按 LTS 流程发布的版本,后续 18 个月内会持续发布 bug 修复的 point release,且在 LTS 的 point release 之间保证 live migration 与 live upgrade 兼容。仓库中 hypervisor/Cargo.toml 的版本号正是28.0.0,与 release notes 的 v28.0 一一对应。
从源码结构看,该 VMM 的构建特性(feature flags)也与发布说明高度一致(见 hypervisor/Cargo.toml):
| Feature 标志 | 作用 | 默认 |
|---|---|---|
kvm | 基于 KVM 的后端支持 | 默认开启 |
mshv | 微软 Hypervisor (MSHV) 后端支持 | 关闭 |
tdx | Intel TDX 支持 | 关闭 |
tracing | 启动跟踪(boot tracing)支持 | 关闭 |
guest_debug | GDB 调试与 guest 内存导出 | 关闭 |
lib_support | 以库形式使用 VMM | 关闭 |
二、启动与固件:从传统引导到 PVH 与多固件选项
启动方式是该 VMM 演进中最具代表性的主线之一。
v0.1.0 时代:支持 Linux 内核bzImage直接启动(发行版内核常见格式),并默认以virtio-console作为 guest 控制台,可通过--serial tty --console off回退到传统串口。
v0.6.0 引入 PVH 直接内核引导:在传统 Linux boot protocol 之外,新增对 PVH ABI 的直接内核启动支持,这是后续固件策略的基础。
v0.8.0 支持 5 级页表(LA57):当宿主机支持时,guest 可启用 5-level paging,支持 vmlinux、bzImage 与固件引导;但受 PVH 引导流程限制,使用CONFIG_PVH=y编译的 ELF 内核暂不支持。
v16.0 移除 LinuxBoot 协议:不再支持以 "LinuxBoot" 协议引导 ELF 与bzImage,直接引导用户需将内核配置为CONFIG_PVH=y。
v27.0 废弃 legacy 固件引导:由于 Cloud Hypervisor OVMF 与 Rust Hypervisor Firmware 均已支持 PVH 引导,以传统模式加载固件不再需要;v28.0 正式移除非 PVH 固件引导(对应源码 issue #4511)以及旧版固件使用的 I/O 端口(#3926)。v28.0 还移除了已弃用的 kernel/cmdline/initramfs 旧 API 选项(#4737)。
与固件相关的重要修复还有 v19.0 的 "TDVF 固件下 ACPI 表经由固件暴露给 guest"、v22.0 的 "通过 TD-Shim 轻量固件在 TDX 下直接引导内核"。仓库中 hypervisor/docs/uefi.md、hypervisor/docs/intel_tdx.md 与 hypervisor/docs/custom-image.md 记录了完整的固件与内核引导配置方法。
三、内存管理演进:从基础分配到大内存与透明大页
内存子系统的演进贯穿了几乎所有版本:
- v0.1.0:
virtio-pmem虚拟持久内存设备,可绕过 guest 页缓存、改善内存占用。 - v0.2.0:virtio-fs 共享文件系统加入 DAX 共享内存区,兼顾性能与小内存占用。
- v0.3.0:重写 guest 地址空间处理,支持超过 64GB 的大内存 guest。
- v0.10.0:引入Memory Zones,可对 guest 内存分区进行细粒度控制:指定各段内存的 backing、绑定宿主 NUMA 节点,并将内存与 vCPU 映射到 guest 内的特定 memory node,详见 hypervisor/docs/memory.md。
- v0.11.0:
virtio-balloon控制从--memory独立为--balloon参数。 - v0.13.0:
--memory新增hugepage_size,可指定分配 guest 内存时使用的巨页大小(需保证池中具有足够的目标尺寸巨页)。 - v22.0:
--balloon free_page_reporting=on让 guest 向 VMM 报告空闲页,VMM 再通知宿主机释放,提升内存密度。 - v28.0:Transparent Huge Page(THP)支持成为默认行为——只要 guest 内存不使用文件 backing 且
shared=off,就会默认以透明大页为 guest 内存提供 backing,改善启动性能;可通过--memory thp=off关闭。
源码可以印证 THP 的默认值:在 hypervisor/vmm/src/vm_config.rs 中default_memoryconfig_thp()返回true,而--memory的参数解析位于 hypervisor/vmm/src/config.rs,实际的内存区域创建逻辑在 hypervisor/vmm/src/memory_manager.rs(仅当 region 无文件 backing 时才应用 THP,与文档描述一致)。
内存相关的其他重要能力还包括:v19.0 起 live migration 支持virtio-mem内存热插拔与virtio-balloon设备迁移;v24.0 为 VFIO 与 vfio-user 设备加入sparse mmap,允许设备区域被部分映射,映射越完整则访问时的 VM exits 越少、设备相关性能越好(同时修复了 VFIO/vfio-user MMIO 区域的潜在 mmap 泄漏,#4069)。
四、I/O 虚拟化:virtio、io_uring、vhost-user 与磁盘格式
4.1 virtio 设备与传输层
- v0.1.0:virtio-console 作为默认 guest 控制台。
- v0.3.0:新增 virtio MMIO 传输层支持,为无 PCI 总线的最小化 guest 配置铺路;v0.11.0 正式移除
virtio-mmio,统一到 PCI 传输(简化代码并显著降低测试负担)。 - v0.4.0:增加 Rust 实现的 vhost-user-blk 与 virtiofs 后端。
- v0.9.0:virtio 网络与块设备统计经
vm.countersHTTP API 暴露;CPU 拓扑经--cpus topology=配置(sockets、packages、cores、threads 参数)。 - v0.11.0:
io_uring成为virtio-block的默认 I/O 引擎(需宿主机 Linux 5.8+),块设备性能显著提升;--balloon独立参数化;新增实验性virtio-watchdog(--watchdog,需要内核支持)。 - v0.10.0:
virtio-block支持多 descriptor 请求;--cpus新增kvm_hyperv选项(KVM 的 HyperV 模拟开关)。 - v22.0:
virtio-balloon尺寸会与 guest RAM 大小交叉校验(#3689);多个 TAP fd 可用于virtio-net热插拔(#3607)。
4.2 vhost-user 与 I/O 卸载
vhost-user 是贯穿多个版本的持续主线:v0.2.0 支持 vhost-user-net 后端(可对接 DPDK);v0.3.0 支持 vhost-user-blk 后端(可对接 SPDK);v0.4.0 补齐 Rust 版 vhost-user-blk 与 virtiofs 后端;v0.6.0 在用户选择 offload 时自动以独立进程 spawn 默认的 vhost-user-blk/net 后端;v0.11.0 弃用 self-spawning,v0.12.0 正式移除——此后用户须自行启动后端并提供 socket 给 VMM 使用。v0.12.0 同时将 vhost-user-fs 后端迁出到独立仓库(virtiofsd-rs),仓库内对应实现见 hypervisor/virtiofsd。
v0.16.0 增强 vhost-user 设备重连支持,并支持 vhost-user-net 连接方向反转(server 在 VMM、client 在后端,与 Open vSwitch 默认做法一致);v17.0 为 vhost-user 设备加入 I/O 请求的 inflight tracking,支持设备重连后的恢复;v18.0 起 vhost-user 设备可参与 live migration(常用 DPDK 后端已支持)。
4.3 磁盘镜像格式与网络
- v0.13.0:新增 VHD(fixed)磁盘镜像支持(此前已有 raw 与 QCOWv2);
--net支持fd=传入已打开的 TAP fd,便于与 libvirt 集成及使用 MACvTAP(见 hypervisor/docs/macvtap-bridge.md)。 - v18.0:新增VHDX磁盘镜像格式支持;仓库内对应实现为 hypervisor/vhdx crate。
- v24.0:修复 VHDX 文件格式头问题(#4291);拒绝压缩 QCOW 镜像(#4055)。
- v28.0:修复超大 QCOW 文件(>4TiB)支持(#4767)。
- v27.0:
virtio-net关联 TAP 设备的 MTU 暴露给 guest,--net mtu=..指定的 MTU 会应用到创建的 TAP 接口,同时适用于 vhost-user-net(#4658、#4676)。 - v0.15.0:网络设备支持限速(rate limiting),与块设备限速统一,详见 hypervisor/docs/io_throttling.md(v0.14.0 先为块设备引入限速)。
- v0.15.0:guest 可运行时控制
virtio-netoffload 设置(同时规避 Linux 内核在未声明可配置时仍尝试重编程 offload 的问题,#2528)。
五、设备直通、IOMMU 与安全:VFIO、seccomp、SGX、TDX、TPM
5.1 VFIO 与 vfio-user
- v0.1.0:通过 VFIO 框架支持宿主机物理设备直通(hypervisor/docs/vfio.md)。
- v0.2.0:修复 VT-d 场景下 guest 内存未缓存导致的直通性能问题,达到直通设备预期性能。
- v0.13.0:支持不依赖 MSI/MSI-X 而依赖 INTx 中断的 PCI 设备直通,显著扩大了对 NVIDIA 显卡(专有驱动)等设备的支持。
- v20.0:基于 VFIO region capabilities 对所有 region 做内存映射,减少 VM exits、提升直通性能;vCPU 支持 CPU pinning(
--cpus指定允许运行的宿主 CPU 集合)。 - v18.0:实验性 vfio-user 用户态设备支持(
--user-device),可与 SPDK NVMe vfio-user controller 对接。 - v24.0:VFIO 与 vfio-user 均加入 sparse mmap;同一个 VFIO 设备不能重复添加(#4453、#4463)。
源码中 vfio-user 的实现位于 hypervisor/vfio_user crate,对应文档为 hypervisor/docs/vfio-user.md。
5.2 IOMMU:virtio-iommu 与 PCI segments
- v0.3.0:引入 paravirtualized IOMMU(
virtio-iommu),--disk路径需以path=前缀并支持iommu=[on|off](hypervisor/docs/iommu.md)。 - v19.0:virtio-iommu 支持 AArch64。
- v22.0:新增
--platform iommu_segments=<list_of_segments>,将指定 PCI segment 全部置于 IOMMU 之后,便于热插拔需要 IOMMU 的设备(如 QAT)。 - v23.0:virtio-iommu 背书的 PCI segments 被完整地置于 vIOMMU 之后(#3870)。
- v24.0:virtio-iommu 支持bypass domain(规范描述的默认直通域),使得不支持 virtio-iommu 的 guest 软件也能在
virtio-block位于虚拟 IOMMU 之后时正常引导(支持 Rust Hypervisor Firmware 与 OVMF)。
5.3 安全与机密计算
- v0.7.0:引入seccomp沙箱(默认开启,
--seccomp控制)。 - v0.8.0:virtiofs 服务端支持 seccomp 自沙箱。
- v0.9.0:常用 virtio 设备拥有独立 seccomp filter;
--seccomp=log可记录本应被拒绝的系统调用请求;guest 支持 Intel SGX(hypervisor/docs/intel_sgx.md)。 - v0.10.0:全部剩余线程与设备均纳入独立 seccomp filter。
- v17.0:SGX 支持对齐最新内核,支持 SGX provisioning 与 EPC 段关联 NUMA 节点。
- v22.0:支持 TDX 下直接内核引导(配合 TD-Shim);GDB stub 支持(
gdb编译特性,hypervisor/docs/gdb.md)。 - v23.0:
amx编译特性 +--cpu features=amx运行时启用 AMX 指令集扩展。 - v28.0:新增模拟 CRB TPM 设备支持(hypervisor/tpm crate,文档见 hypervisor/docs/tpm.md)。
5.4 MACvTAP 与网络直通
- v13.0:MACvTAP 支持(通过
--net的fd参数传入已打开的 TAP)。 - v17.0:
macvtap设备热插拔(ch-remote支持添加网络设备时传入 fd)。
六、热插拔与动态资源配置
热插拔能力是"可运行工作负载的 VMM"的核心能力,演进路径清晰:
- v0.4.0:CPU 热插拔(硬件精简 ACPI 通知),并引入程序化生成 ACPI 表的
acpi-tablescrate。 - v0.5.0:CPU 热拔出 + 内存热插拔,支持动态 resize(Kubernetes 类场景所需);多队列多线程 virtio 网络/块设备;Kata Containers 成为完全支持的 hypervisor。
- v0.6.0:直通(VFIO)设备热插拔/热拔出;
ch-remoteCLI 工具诞生(抽象 REST API)。 - v0.7.0:block、network、pmem、virtio-fs、vsock 的热插拔/拔出;
virtio-mem作为 ACPI 之外的替代内存热插拔方式(--memory hotplug_method);--initramfs支持。 - v22.0:支持VM 引导前修改配置(增加/移除设备、resize)。
- v23.0:CMOS 复位支持(适配 Ubuntu "jammy" 的 reboot)。
源码中的热插拔文档见 hypervisor/docs/hotplug.md,virtio-mem相关配置与校验逻辑可在 hypervisor/vmm/src/memory_manager.rs 中找到。
七、实时迁移、快照恢复与调试
- v0.8.0:首个实验性 snapshot/restore 支持(不支持 VFIO 直通设备的 VM,SMP 场景存在已知问题)。
- v0.9.0:快照持久化更多 vCPU 状态(含 paravirtualized clock,避免多 vCPU 挂起)。
- v0.11.0:快照/恢复支持 ARM64;支持 >2GiB 单 region 的 VM。
- v15.0:
--api-socket支持fd=参数传入既有文件描述符;修复 TAP 在宿主 buffer 耗尽不可写时的处理(#2517)。 - v16.0:实时迁移跟踪 VMM 自身写入的脏页(补充 guest 脏页跟踪);VMM 内部状态版本化,允许跨版本安全迁移(仍需谨慎,详见 hypervisor/docs/live_migration.md)。
- v17.0:
vm.infoAPI 增加设备详情(含 VFIO 设备)。 - v18.0:ARM64 支持 live migration;MSHV 上支持 live migration(含高效脏页跟踪)。
- v21.0:本地实时迁移优化——
ch-remote send-migration --local跳过源到目的地的内存比较,将 live upgrade 耗时从约 3s 降至约 50ms;修复迁移在固件阶段触发时的支持。 - v22.0:GDB 调试 stub(
--gdb)。 - v25.0:
ch-remote支持从 JSON 配置创建 VM、引导与删除 VM;guest_debug特性下支持VM "coredump"(导出 guest 内存供crash等工具分析,#4012)。 - v27.0:Boot tracing——生成启动耗时 trace 报告并提供生成 SVG 的脚本(
tracing特性,hypervisor/docs/tracing.md)。
与调试相关的实现文件包括 hypervisor/vmm/src/gdb.rs 与 hypervisor/vmm/src/coredump.rs。
八、平台与架构支持:AArch64、MSHV、Windows guest
- v0.8.0:实验性 ARM64 支持(最初仅 virtio-mmio 与串口,hypervisor/docs/arm64.md)。
- v0.9.0:ARM64 支持 PCI 暴露设备与 initramfs 引导。
- v0.11.0:官方支持 Windows guest(hypervisor/docs/windows.md)。
- v0.12.0:ARM64 支持
--watchdog与 guest 内 reboot。 - v16.0:ARM64 支持 ACPI 与 UEFI 引导(无需直接内核引导,可用发行版原厂镜像)。
- v17.0:ARM64 ACPI NUMA 支持;MSHV 后端补齐 seccomp 规则。
- v18.0:AArch64 CPU 拓扑支持(ACPI 或 device tree 传达)、AArch64 电源按钮支持、MSHV 上的设备直通。
- v19.0:AArch64 支持 virtio-iommu。
- v20.0:x86_64 与 aarch64 均支持16 个 PCI segments(最多 496 个 PCI 设备)。
- v22.0:AArch64 提供 PMU(宿主可用时自动暴露);修复 Windows 11 on AArch64 的宽 MSI-X 寄存器访问问题(#3714、#3720)。
- v23.0:AArch64 内存映射改进(UEFI region 处理,guest 可完整访问分配的 RAM);支持 >31 vCPU on aarch64(v28.0 修复,#4863)。
- v26.0:统一二进制同时支持 MSHV 与 KVM,运行时自动检测使用哪个 hypervisor;
--platform支持 OEM strings(向 guest systemd 传递元数据)与 UUID 指定。
从 hypervisor/hypervisor crate 的源码结构看,hypervisor 抽象层正是 v0.9.0 引入的"Hypervisor Abstraction"的延续——独立的hypervisorcrate 用于支持 KVM 之外更多后端。
九、API、工具与可观测性
- v0.3.0:VMM 内置 HTTP API(为异步操作如热插拔、迁移做准备)。
- v0.6.0:推出
ch-remoteCLI,封装 REST API;支持 PVH 引导。 - v0.7.0:
ch-remote新增add-disk、add-fs、add-net、add-pmem、add-vsock与remove-device子命令。 - v0.8.0:
--net增加host_mac选项;ch-remote显示 VMM 生成的错误消息。 - v0.9.0:
vm.counters端点暴露设备统计;add-device API 返回设备名与 PCI BDF。 - v0.14.0:
--event-monitor选项,通过文件或 fd 输出结构化(JSON)事件。 - v15.0:
--api-socket支持fd=参数。 - v26.0:
VmConfig顶层kernel/initramfs移入PayloadConfig(payload成员),旧 API 继续映射兼容,v28.0 移除。
仓库中的 OpenAPI 规范文件为 hypervisor/vmm/src/api/openapi/cloud-hypervisor.yaml(v26.0 起随 PayloadConfig 调整持续更新)。
十、关键命令行参数速查(源码佐证)
以下参数均已在仓库源码中找到对应实现,可直接在构建/运行该 VMM 时使用:
| 参数 | 说明 | 源码位置 |
|---|---|---|
--memory thp=off | 关闭默认的透明大页 backing | hypervisor/vmm/src/config.rs、hypervisor/vmm/src/vm_config.rs |
--memory hugepage_size= | 指定巨页大小 | v0.13.0 引入 |
--memory hotplug_method=virtio-mem | 使用 virtio-mem 内存热插拔 | v0.7.0 引入 |
--platform iommu_segments=<list> | 指定 PCI segment 置于 IOMMU 后 | hypervisor/vmm/src/vm_config.rs、hypervisor/vmm/src/config.rs |
--platform serial_number= | 设置 SMBIOS 暴露的平台序列号 | hypervisor/vmm/src/vm_config.rs、hypervisor/vmm/src/vm.rs |
--balloon free_page_reporting=on | 启用空闲页报告 | v22.0 引入 |
--net mtu=.. | 指定 TAP 接口 MTU 并暴露给 guest | v27.0 引入 |
--vdpa | 启用 vDPA 设备 | hypervisor/vmm/src/config.rs |
--user-device | 启用 vfio-user 用户态设备 | hypervisor/vmm/src/config.rs |
--watchdog | 启用 virtio-watchdog | hypervisor/vmm/src/config.rs |
--gdb | 启用 GDB 调试 stub(guest_debug特性) | hypervisor/vmm/src/config.rs |
十一、重要的弃用与移除记录(升级必读)
升级路径上需要特别留意的移除项:
- LinuxBoot 协议引导:v15.0 弃用,v16.0 移除(改用
CONFIG_PVH=y直接引导)。 - vhost-user 自 spawn:v0.11.0 弃用,v0.12.0 移除(用户自行启动后端并提供 socket)。
- virtio-mmio 传输:v0.11.0 移除。
--pmem的mergeable选项 /--fs的dax选项:v23.0/v24.0 弃用,v25.0 移除。--disk的poll_queue参数:v26.0 移除。- 非 PVH 固件引导与旧固件 I/O 端口:v28.0 移除。
kernel/initramfs顶层 API 成员:v26.0 迁移至PayloadConfig.payload,v28.0 移除旧版。- "Classic" C 版 virtiofsd:v22.0 起不再测试,推荐 Rust 版 virtiofsd。
十二、结语:如何继续深入
release-notes.md 是一份浓缩的 VMM 能力地图。若希望按图索骥深入每个特性,仓库内 hypervisor/docs 目录提供了 30+ 篇配套文档,其中与本文各章节直接对应的包括:hypervisor/docs/memory.md(内存 zones 与 THP)、hypervisor/docs/balloon.md(气球设备)、hypervisor/docs/tpm.md(v28.0 新增)、hypervisor/docs/vdpa.md、hypervisor/docs/intel_tdx.md、hypervisor/docs/intel_sgx.md、hypervisor/docs/live_migration.md、hypervisor/docs/snapshot_restore.md、hypervisor/docs/gdb.md、hypervisor/docs/io_throttling.md、hypervisor/docs/hotplug.md 与 hypervisor/docs/tracing.md。
对于需要跟随最新演进(如 LTS 期间的 point release)或评估从旧版本升级的读者,建议将本 release notes 与 hypervisor/Cargo.toml 中的 feature 定义、hypervisor/vmm/src/config.rs 中的命令行解析以及 hypervisor/vmm/src/api/openapi/cloud-hypervisor.yaml 中的 API 规范对照阅读,即可获得从"版本特性"到"源码实现"的完整闭环。
【免费下载链接】CubeSandboxInstant, Concurrent, Secure & Lightweight Sandbox for AI Agents.项目地址: https://gitcode.com/GitHub_Trending/cu/CubeSandbox
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考