CubeSandbox 内置 hypervisor 版本演进全解:从 v0.1.0 到 v28.0 的 Cloud Hypervisor 技术路线图
2026/9/16 20:17:54 网站建设 项目流程

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) 后端支持关闭
tdxIntel TDX 支持关闭
tracing启动跟踪(boot tracing)支持关闭
guest_debugGDB 调试与 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.0virtio-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.0virtio-balloon控制从--memory独立为--balloon参数。
  • v0.13.0--memory新增hugepage_size,可指定分配 guest 内存时使用的巨页大小(需保证池中具有足够的目标尺寸巨页)。
  • v22.0--balloon free_page_reporting=on让 guest 向 VMM 报告空闲页,VMM 再通知宿主机释放,提升内存密度。
  • v28.0Transparent 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.0io_uring成为virtio-block的默认 I/O 引擎(需宿主机 Linux 5.8+),块设备性能显著提升;--balloon独立参数化;新增实验性virtio-watchdog--watchdog,需要内核支持)。
  • v0.10.0virtio-block支持多 descriptor 请求;--cpus新增kvm_hyperv选项(KVM 的 HyperV 模拟开关)。
  • v22.0virtio-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.0virtio-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.0amx编译特性 +--cpu features=amx运行时启用 AMX 指令集扩展。
  • v28.0:新增模拟 CRB TPM 设备支持(hypervisor/tpm crate,文档见 hypervisor/docs/tpm.md)。

5.4 MACvTAP 与网络直通

  • v13.0:MACvTAP 支持(通过--netfd参数传入已打开的 TAP)。
  • v17.0macvtap设备热插拔(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.0vm.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.0ch-remote支持从 JSON 配置创建 VM、引导与删除 VM;guest_debug特性下支持VM "coredump"(导出 guest 内存供crash等工具分析,#4012)。
  • v27.0Boot 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.0ch-remote新增add-diskadd-fsadd-netadd-pmemadd-vsockremove-device子命令。
  • v0.8.0--net增加host_mac选项;ch-remote显示 VMM 生成的错误消息。
  • v0.9.0vm.counters端点暴露设备统计;add-device API 返回设备名与 PCI BDF。
  • v0.14.0--event-monitor选项,通过文件或 fd 输出结构化(JSON)事件。
  • v15.0--api-socket支持fd=参数。
  • v26.0VmConfig顶层kernel/initramfs移入PayloadConfigpayload成员),旧 API 继续映射兼容,v28.0 移除。

仓库中的 OpenAPI 规范文件为 hypervisor/vmm/src/api/openapi/cloud-hypervisor.yaml(v26.0 起随 PayloadConfig 调整持续更新)。

十、关键命令行参数速查(源码佐证)

以下参数均已在仓库源码中找到对应实现,可直接在构建/运行该 VMM 时使用:

参数说明源码位置
--memory thp=off关闭默认的透明大页 backinghypervisor/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 并暴露给 guestv27.0 引入
--vdpa启用 vDPA 设备hypervisor/vmm/src/config.rs
--user-device启用 vfio-user 用户态设备hypervisor/vmm/src/config.rs
--watchdog启用 virtio-watchdoghypervisor/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 移除。
  • --pmemmergeable选项 /--fsdax选项:v23.0/v24.0 弃用,v25.0 移除。
  • --diskpoll_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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询