-
Notifications
You must be signed in to change notification settings - Fork 43
Description
背景与问题分析
当前Axvisor启动客户机需同时提供设备树文件(如linux_qemu.dtb
)和客户机配置文件(如linux_qemu_aarch64.toml
),存在以下问题:
-
配置冗余:设备树与配置文件中的物理CPU映射(
phys_cpu_ids
)、内存区域(memory_regions
)、直通设备地址等参数需手动同步,使用复杂。 -
部署低效:修改客户机配置后需重新编译和下载Axvisor,无法动态更新。
优化目标
本次优化设计主要致力于实现以下两个核心目标:
- 减少启动配置复杂度:通过自动从主机设备树解析参数,减少了启动 Axvisor 所需的手动配置项和参数数量。这降低了用户的配置负担,减少了因手动输入错误导致启动失败的可能性,提升了使用便捷性。
- 增强工程实用性与灵活性:优化使 Axvisor 更能适应实际工程项目的需求。用户可以更方便地根据需要修改客户机配置参数,例如控制台选择客户机配置和不重新编译下更换客户机,增强了系统在不同场景下的适用性和可维护性。
优化主要分为三个阶段:
阶段 | 核心目标 | 关键收益 |
---|---|---|
阶段1 | (简化配置)动态生成客户机设备树 | 不再使用客户机设备树文件,并减少客户机配置项 |
阶段2 | (工程应用)从文件系统中读取客户机配置文件 | 修改客户机配置无需重新编译Axvisor |
阶段3 | (工程应用)控制台动态配置 | axvisor启动时动态加载/修改客户机配置 |
具体实现方案
阶段一
一、设备树自动生成机制
1. 设备树来源:
- 主机设备树:Axvisor启动时加载的硬件描述树(
.dtb
)。
2. 生成逻辑:

关键步骤说明:
- 直通设备处理(
passthrough_devices
):- 根据设备节点名(如
uart@2800d000
)自动获取物理地址、长度、中断号。 - 级联父节点:直通设备时自动包含其父总线/控制器节点,确保硬件拓扑完整。
- 根据设备节点名(如
- 内存映射(
memory_regions
):- 根据配置文件生成客户机设备树
memory
节点。
- 根据配置文件生成客户机设备树
- CPU映射(
phys_cpu_ids
):- 自动生成客户机CPU节点,移除冗余的
phys_cpu_sets
字段。
- 自动生成客户机CPU节点,移除冗余的
3. 具体实现:
-
直通设备处理(
passthrough_devices
):如下设备树节点中,可以通过
reg
读取出基地址为0x2800d000
, 大小为0x1000
,读出相关数据后可使用vm_cfg.add_pass_through_device(pt_dev)
函数将相关节点信息添加到config文件中供后续使用。uart@2800d000 { compatible = "arm,pl011\0arm,primecell"; reg = <0x00 0x2800d000 0x00 0x1000>; interrupts = <0x00 0x54 0x04>; clocks = <0x0c 0x0c>; clock-names = "uartclk\0apb_pclk"; status = "okay"; };
修改前后对比:
passthrough_devices = [ ["intc@8000000", 0x800_0000, 0x800_0000, 0x50_000, 0x1], #[name, base_gpa, base_hpa, length, irq_id] ["pl011@9000000", 0x900_0000, 0x900_0000, 0x1000, 0x1], ["pl031@9010000", 0x901_0000, 0x901_0000, 0x1000, 0x1], ] passthrough_devices = [ "intc@8000000", "pl011@9000000", "pl031@9010000" ]
-
内存映射(
memory_regions
):使用
fdt-parser
仓库可实现主机设备树文件的读取,使用vm-fdt
仓库可实现客户机设备树文件的生成。 -
CPU映射(
phys_cpu_ids
):与处理直通设备相同,读取
phys_cpu_ids
在设备树中顺序,自动填充phys_cpu_sets
字段。以
phytium-pi e2000
开发板为例,配置文件中:cpu_num = 3 phys_cpu_ids = [0x200, 0x201, 0x100] # cpu逻辑ID phys_cpu_sets = [1, 2, 8] # 物理CPU掩码位
axvisor的cpu节点如下,通过
phys_cpu_ids
和设备树节点可以推断出phys_cpu_sets
cpu@0 { device_type = "cpu"; compatible = "phytium,ftc310\0arm,armv8"; reg = <0x00 0x200>; ... }; cpu@1 { device_type = "cpu"; compatible = "phytium,ftc310\0arm,armv8"; reg = <0x00 0x201>; ... }; cpu@100 { device_type = "cpu"; compatible = "phytium,ftc664\0arm,armv8"; reg = <0x00 0x00>; ... }; cpu@101 { device_type = "cpu"; compatible = "phytium,ftc664\0arm,armv8"; reg = <0x00 0x100>; ... };
二、配置文件精简
优化后的配置文件仅保留必要参数:
# Vm base info configs
[base]
id = 1
name = "linux"
vm_type = 1
cpu_num = 4
phys_cpu_ids = [0x00, 0x100, 0x200, 0x300]
[kernel]
entry_point = 0x4000_0000
kernel_load_addr = 0x4000_0000
dtb_load_addr = 0x4008_0000
ramdisk_load_addr = 0x4020_0000
image_location = "memory"
kernel_path = "Image.bin"
ramdisk_path = "ramdisk.img"
[memory]
regions = [
[0x4000_0000, 0x4000_0000, 0x7, 1]
]
[devices]
passthrough_devices = [
"intc@8000000", # 自动解析地址
"pl011@9000000",
"pl031@9010000"
]
emu_devices = [ ]
移除的冗余项:
-
dtb_path
→ 不再需要,客户机设备树由主机设备树文件和客户机配置文件共同生成。 -
phys_cpu_sets
→ 通过phys_cpu_ids
动态计算位掩码。 -
passthrough_devices
参数精简。
阶段二
三、 配置文件的存储与加载
1. 设计目标:
-
解耦配置与代码:将客户机配置文件(
axvisor/configs/vms/xxxxx.toml
)从Axvisor源码中剥离,避免因客户机配置更新触发Hypervisor重编译。 -
动态加载能力: 支持初始化时从文件系统读取配置文件,客户机重启即可生效,无需重启Axvisor宿主机。
-
兼容直通存储架构:利用设备直通特性,使Axvisor与客户机共享相同存储设备和相同文件系统格式(如EXT4),简化存储管理。
2. 存储架构设计
-
配置文件存储位置
配置模式 存储位置 image_location="fs"
客户机文件系统固定路径(如 /guest/vms1/guest_config.toml
)image_location="memory"
编译时嵌入Axvisor二进制文件 -
文件系统要求
Axvisor需挂载与客户机相同的文件系统(如EXT4/FAT32),确保直通设备可被双向识别。
-
路径标准化:
在文件系统根目录创建guest文件夹,内部存放客户机配置文件和镜像
/guest/ # 根目录 ├── vms1/ # 客户机1专属目录 │ ├── vm_config.toml # 客户机1配置文件(TOML格式) │ └── Image # 客户机1系统镜像文件(如linux) └── vms2/ # 客户机2专属目录 ├── vm_config.toml # 客户机2配置文件(TOML格式) └── arceos.bin # 客户机2系统镜像文件
3. 运行时加载流程

阶段三
四、控制台动态配置客户机
1. 设计目标
- 通过控制台交互界面实时生成/修改客户机配置文件(TOML格式)。
- 支持配置模板选择、参数修改(CPU/内存/设备直通等)。
2. 配置客户机流程

使用
本设计通过三个阶段的有序优化,对 Axvisor 的配置管理和启动流程进行了重要改进。这些优化旨在简化初始化配置、增强部署灵活性,并为未来交互式配置提供基础,从而整体提升系统的易用性和适应性。
优化后,原客户机配置文件中优化去掉的参数均通过读取主设备树获得,且写入axvisor内存中客户机配置结构体中,这些参数在后续使用时与优化前无区别。
以下是各阶段优化重点及影响的汇总:
阶段 | 优化重点 | 主要变化与影响 |
---|---|---|
阶段一 | 精简配置内容 | 客户机配置文件内容减少,自动从主机设备树解析参数。启动命令与部署方式保持不变。 |
阶段二 | 配置文件存放位置变更 | 当 image_location="fs" 时,客户机配置文件可与客户机镜像一样存放于文件系统中,简化了更换客户机及配置时部署流程,启动命令保持不变。 |
阶段三 | 交互式配置能力(需后续实现控制台) | 为实现控制台交互式重新配置客户机参数预留了设计空间,待控制台功能实现后再作详细设计,旨在提供动态调整能力。 |