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"
]
背景与问题分析
当前Axvisor启动客户机需同时提供设备树文件(如
linux_qemu.dtb)和客户机配置文件(如linux_qemu_aarch64.toml),存在以下问题:配置冗余:设备树与配置文件中的物理CPU映射(
phys_cpu_ids)、内存区域(memory_regions)、直通设备地址等参数需手动同步,使用复杂。部署低效:修改客户机配置后需重新编译和下载Axvisor,无法动态更新。
优化目标
本次优化设计主要致力于实现以下两个核心目标:
具体实现方案
整个重构方案主要分为三个阶段:
阶段一
一、设备树自动生成机制
1. 设备树来源:
.dtb)。2. 生成逻辑:
关键步骤说明:
passthrough_devices):uart@2800d000)自动获取物理地址、长度、中断号。memory_regions):memory节点。phys_cpu_ids):phys_cpu_sets字段。3. 具体实现:
直通设备处理(
passthrough_devices):如下设备树节点中,可以通过
reg读取出基地址为0x2800d000, 大小为0x1000,读出相关数据后可使用vm_cfg.add_pass_through_device(pt_dev)函数将相关节点信息添加到config文件中供后续使用。修改前后对比:
内存映射(
memory_regions):使用
fdt-parser仓库可实现主机设备树文件的读取,使用vm-fdt仓库可实现客户机设备树文件的生成。CPU映射(
phys_cpu_ids):与处理直通设备相同,读取
phys_cpu_ids在设备树中顺序,自动填充phys_cpu_sets字段。以
phytium-pi e2000开发板为例,配置文件中:axvisor的cpu节点如下,通过
phys_cpu_ids和设备树节点可以推断出phys_cpu_sets二、配置文件精简
优化后的配置文件仅保留必要参数:
移除的冗余项:
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需挂载与客户机相同的文件系统(如EXT4/FAT32),确保直通设备可被双向识别。
路径标准化:
在文件系统根目录创建guest文件夹,内部存放客户机配置文件和镜像
3. 运行时加载流程
阶段三
四、控制台动态配置客户机
1. 设计目标
2. 配置客户机流程
使用
本设计通过三个阶段的有序优化,对 Axvisor 的配置管理和启动流程进行了重要改进。这些优化旨在简化初始化配置、增强部署灵活性,并为未来交互式配置提供基础,从而整体提升系统的易用性和适应性。
优化后,原客户机配置文件中优化去掉的参数均通过读取主设备树获得,且写入axvisor内存中客户机配置结构体中,这些参数在后续使用时与优化前无区别。
以下是各阶段优化重点及影响的汇总:
image_location="fs"时,客户机配置文件可与客户机镜像一样存放于文件系统中,简化了更换客户机及配置时部署流程,启动命令保持不变。