Hypervisor 总览
什么是 Cube Hypervisor
Cube Hypervisor 是 CubeSandbox 的虚拟化核心,基于 Cloud Hypervisor 深度定制,使用 Rust 语言编写。它负责创建和管理轻量级虚拟机(MicroVM),为每个沙箱提供强隔离的运行环境。
核心能力
| 能力 | 说明 |
|---|---|
| 轻量级虚拟化 | 基于 KVM/MS-HV 创建轻量级 MicroVM,启动时间 < 100ms |
| 强隔离 | 每个沙箱运行在独立的虚拟机中,内核级别隔离 |
| Virtio 设备 | 支持 virtio-blk、virtio-net、virtio-fs、virtio-vsock 等 |
| 设备直通 | 支持 VFIO 设备直通,提供接近原生的 I/O 性能 |
| 快照与恢复 | 支持 VM 快照、热迁移,实现毫秒级冷启动 |
| 内存管理 | 支持大页、NUMA、内存热插拔 |
| 安全加固 | seccomp 过滤、最小权限原则 |
代码仓库结构
hypervisor/
├── src/ # 主入口
│ ├── main.rs # CLI 入口
│ ├── lib.rs # VmmInstance 封装
│ ├── vmm_config.rs # VMM 配置
│ └── common.rs # 通用工具
├── vmm/ # VMM 核心
│ └── src/
│ ├── vm.rs # 虚拟机管理
│ ├── cpu.rs # vCPU 管理
│ ├── memory_manager.rs # 内存管理
│ ├── device_manager.rs # 设备管理
│ ├── migration.rs # 迁移与快照
│ ├── acpi.rs # ACPI 表生成
│ ├── config.rs # 配置解析
│ ├── vm_config.rs # 配置结构定义
│ └── api/ # HTTP API
├── hypervisor/ # Hypervisor 抽象层
│ └── src/
│ ├── lib.rs # Trait 定义
│ ├── kvm/ # KVM 实现
│ └── mshv/ # MSHV 实现
├── virtio-devices/ # Virtio 设备实现
│ └── src/
│ ├── block.rs # 块设备
│ ├── net.rs # 网络设备
│ ├── fs.rs # 文件系统
│ ├── vsock.rs # Vsock
│ ├── balloon.rs # 内存气球
│ ├── rng.rs # 随机数
│ ├── console.rs # 控制台
│ ├── iommu.rs # IOMMU
│ ├── mem.rs # 内存设备
│ ├── pmem.rs # 持久内存
│ ├── vdpa.rs # vDPA
│ ├── watchdog.rs # 看门狗
│ └── vhost_user/ # Vhost-user
├── devices/ # 传统设备
│ └── src/
│ ├── acpi.rs # ACPI 设备
│ ├── ioapic.rs # IOAPIC
│ ├── gic.rs # GIC (ARM)
│ ├── ivshmem.rs # 共享内存
│ ├── pvpanic.rs # 恐慌设备
│ ├── tpm.rs # TPM
│ └── legacy/ # 传统串口
├── arch/ # 架构支持
│ └── src/
│ ├── x86_64/ # x86_64 特定
│ └── aarch64/ # ARM64 特定
├── pci/ # PCI 子系统
├── vm-allocator/ # 资源分配器
├── vm-device/ # 设备抽象
├── vm-migration/ # 迁移协议
├── vm-virtio/ # Virtio 抽象
├── block_util/ # 块设备工具
├── net_util/ # 网络工具
├── virtiofsd/ # VirtioFS 守护进程
├── vhost_user_block/ # Vhost-user 块
├── vhost_user_net/ # Vhost-user 网络
├── acpi_tables/ # ACPI 表工具
├── event_monitor/ # 事件监控
├── event_notifier/ # 事件通知
├── logging/ # 日志
├── tracer/ # 追踪
├── rate_limiter/ # 限流器
├── serial_buffer/ # 串口缓冲
├── tpm/ # TPM 工具
├── qcow/ # QCOW 格式
├── vhdx/ # VHDX 格式
└── vfio_user/ # VFIO-user技术栈
- 语言: Rust (Edition 2021)
- 构建: Cargo workspace
- 虚拟化: KVM (Linux) / MS-HV (Windows)
- 设备模型: Virtio 1.1 + PCI
- 内存管理: mmap + 大页支持
- 异步运行时: epoll (非 tokio)
- 序列化: serde + serde_json
- CLI: clap v4
- 日志: slog + log
- 安全: seccompiler
阅读路径建议
快速了解
- Hypervisor 总览 - 本文
- 安全隔离模型 - 了解安全设计
- 快速启动与快照恢复 - 了解性能优化
深入源码
- 整体架构与 Cargo Workspace - 代码组织
- main.rs 入口与 CLI 解析 - 启动流程
- VMM 核心:vm.rs 深度解析 - 虚拟机管理
- CPU 管理:vCPU 生命周期 - CPU 虚拟化
- 内存管理:memory_manager.rs - 内存虚拟化
- 设备管理:device_manager.rs - 设备模型
- Hypervisor 抽象层 - KVM/MSHV
- Virtio 设备实现 - 半虚拟化设备
- 迁移与快照 - 状态管理
- ACPI 与设备树 - 固件接口
与 Cloud Hypervisor 的关系
Cube Hypervisor 基于 Cloud Hypervisor v28.0.0 分支,主要定制包括:
- VmmInstance 封装 - 提供
src/lib.rs中的VmmInstance结构,作为上层调用的统一入口 - sandbox_id 支持 - 每个 VM 关联一个 sandbox_id,用于日志和追踪
- 事件通知机制 - 通过
event_notifier模块支持上层事件订阅 - 日志定制 - 异步日志、JSON 格式日志、sandbox 级别日志隔离
- 集成优化 - 与 CubeShim 深度集成,支持 vsock 通信