AxVisor 内部机制
本文档面向准备修改 Hypervisor 运行时、VMM、vCPU 调度、板级配置、Guest 启动流程或 axvisor_api 的开发者, 重点阐述 AxVisor 的组织原理与关键执行路径。
若需要先运行 QEMU 示例,请先阅读 quick-start.md 和 axvisor-guide.md。
1. 系统定位与设计目标
AxVisor 是基于 ArceOS 的统一组件化 Type-I Hypervisor。它既非直接包裹 KVM 的用户态工具,也非单体式虚拟机管理程序,而是建立在 ArceOS 运行时、虚拟化组件库与分层配置系统之上的 Hypervisor 软件栈。
核心设计目标:
| 目标 | 含义 | 典型落点 |
|---|---|---|
| 统一 | 尽可能用同一套代码覆盖多架构平台 | hal/arch/*、configs/board/* |
| 组件化 | 将 VM、vCPU、虚拟设备、地址空间、API 注入等能力拆成独立组件 | components/axvm、axvcpu、axdevice、axaddrspace、axvisor_api |
| 可配置 | 通过板级配置与 VM 配置控制构建与运行行为 | configs/board/*.toml、configs/vms/*.toml、.build.toml |
| 可验证 | 通过本地 xtask、setup_qemu.sh、QEMU workflow 和统一测试入口形成闭环 | os/axvisor/xtask、.github/workflows/*.toml、根 cargo axvisor test qemu |
从开发体验上看,AxVisor 与 ArceOS/StarryOS 的最大差异在于:代码、配置和 Guest 镜像同等重要。许多"看起来像代码 bug"的问题 ,根因通常是 .build.toml、vm_configs、kernel_path 或 tmp/rootfs.img 未对齐。
2. 架构概览
AxVisor 的运行结构可概括为"ArceOS 作为宿主运行时 + 虚拟化组件作为能力核 + AxVisor 运行时负责编排 + Guest 作为最终负载"。
此图可从两条主线理解:
- 运行主线:
hardware -> ArceOS base -> virt components -> Axvisor runtime -> guests - 配置主线:
board config + vm config -> Axvisor runtime / virt components
AxVisor 的实际行为同时取决于 Rust 代码和运行时加载的 TOML 配置。
2.1 主要分层职责
| 层次 | 目录 | 职责 |
|---|---|---|
| 宿主运行时层 | ax-std、ax-hal、ax-alloc、ax-task | 提供宿主机上的调度、内存、时间、控制台与硬件抽象 |
| 虚拟化能力层 | components/axvm、axvcpu、axdevice、axaddrspace | 抽象 VM、vCPU、设备模拟/直通与客户机地址空间 |
| API 注入层 | components/axvisor_api、src/hal 中的 api_mod_impl | 将 ArceOS 的能力注入到更底层虚拟化组件 |
| AxVisor 编排层 | os/axvisor/src/* |