关于 AxVisor 现状及开发计划 #607
ZCShou
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
AxVisor 开发计划
目标
AxVisor 下一阶段核心任务是围绕 RK3588、RDK S100、K3、飞腾派和 Intel 等真实硬件板卡,推进完善 AxVisor 的多系统混合部署能力。当前重点围绕基于 RK3588 的四足机器人和基于 RDK S100 的 PLC 样机两大平台,并且优先验证基于 RK3588 的四足机器人样机,然后是基于 RDK S100 的 PLC 样机迭代验证。
开发现状
AxVisor 已可在多个架构上启动 Linux 和 RTOS 客户机,但不少功能还在基础验证阶段。下面按模块整理现状和问题。
多架构支持
目标:各架构当前需要补代码或真机验证的路径。
riscv_vcpu(含完整 RustSBI:DBCN/TIME/HSM/SRST/PMU/RFNC)、vPLIC(pending/active bitmap + VSEIP 同步)、Sstc timer;外部中断注入经 HAL/vPLIC MMIO 路径已可在单 CPU 场景工作inject_interrupt()为unimplemented!()(中断仅走 HAL 绕行路径);跨 CPU 中断注入缺少 IPI 路径(尚未实现),SMP Guest 中断注入不可用;K3 真机的 PLIC/APLIC/IMSIC/IOMMU 还没有完整验证inject_interrupt(),实现跨 CPU IPI 路径,继续做 K3 真机验证,明确 PLIC/APLIC/IMSIC、IOMMU/PCIe 支持边界x86_vcpu已包含 VMX/SVM 方向代码(互斥 feature gate),测试中已有 VMX/SVM QEMU 入口;VMX 已有 EPT、MSR/IO bitmap、preemption timer;vLAPIC x2APIC MSR 模拟已完整(含 ICR IPI、ISR/TMR/IRR 跟踪、timer);当前主要验证 NimbOS/基础用户态unimplemented!());无完整 ACPI 表解析支持(依赖 UEFI 固件或 mptable);距离 Linux/Windows 所需的完整 ACPI、IO/APIC、时钟、块设备、网卡路径还有缺口inject_interrupt()已通过 GINTC HWIS/ESTAT 实现,支持 HWI0-7 和 IPI 向量注入;当前 QEMU smoke 主要验证 AxVisor shellhandle_exception_irq()已解码中断向量(INT_TIMER 等),但无独立虚拟中断控制器组件(中断注入直接写 GINTC/ESTAT);QEMU smoke 仅验证 AxVisor shell 出现,无实际 Guest 运行验证客户机支持
目标:补齐 Guest 启动、生命周期管理、配置和故障恢复。
configs/vms/已有 ArceOS、Linux、NimbOS、FreeRTOS、Zephyr 配置(RT-Thread 还没有配置文件);AArch64/RISC-V 已有 Linux smoke,x86_64 已有 NimbOS smoke,部分板卡已有 Linux 启动记录vm list --format json已实现(输出 id/name/state/vcpu/memory);vm show --full/--config/--stats已有基础;Shell 与 VM 并发运行(vmm::start()启动异步 vCPU 任务后返回,shell::console_init()随即激活)vm show --stats信息量不足;shell 命令输出格式(错误码、状态变更反馈)不统一vm list/show/stats增加完整机器可读输出(vCPU 状态、设备、IRQ、内存详情);统一错误码和输出格式cargo xtask axvisor test和板级串口日志可作为观测入口客户机之间通信
目标:在已有 IVC 基础上补齐 VM 间通信、配置和测试。
BTreeMap<(publisher_vm_id, key), IVCChannel>存储;subscriber 数量无硬限(BTreeMap 按需扩展)alloc_frame()单帧,代码有 TODO "support larger shared region sizes");共享区是裸内存(开头 16 字节为IVCChannelHeader,其余为纯数据),无 ring buffer、消息槽、权限标记和版本协商;通知完全依赖 Guest 主动 hypercall,没有 doorbell 或虚拟中断通知;无静态配置(仅 hypercall 动态发现)axdevice已有 IVC channel range allocator 和 emulated device 配置入口实时性与调度
目标:在 Guest 能运行的基础上,补上实时延迟、干扰来源、配置方式和测试数据。
phys_cpu_ids+phys_cpu_sets位掩码);已有虚拟中断后端基础(AArch64 VGIC、RISC-V vPLIC VSEIP、x86_64 vLAPIC ICR);ArceOS task 支持设置 CPU 亲和性vm statsvm stats命令和 shell JSON 输出暴露vm stats输出 VM exit、IRQ、调度延迟等数值,可被测试脚本采集测试与交付
目标:每个开发计划有可重复验证路径,最终形成可交付版本。
test-suit/axvisor的 QEMU、SVM QEMU、board smoke/build 用例;quick-start 和 xtask 侧已有 QEMU/U-Boot/board 运行流程开发计划
后续开发优先验证基于 RK3588 的四足机器人样机,然后是基于 RDK S100 的 PLC 样机。两条线都先做 Linux + RT-Thread 双客户机,Linux 作为业务、管理和上层应用域,RT-Thread 作为实时控制域。
M1:双客户机基础
目标:Linux + RT-Thread 在 RK3588 和 RDK S100 上稳定启动,后面的样机都基于这套基础。
M2:双客户机通信
目标:Linux 和 RT-Thread 之间同时支持共享内存和基于虚拟网卡的两种通信方式,能传控制命令、状态、日志和心跳。
M3:RK3588 四足机器人样机
目标:围绕四足机器人场景,把 Linux 侧的上层业务和 RT-Thread 侧的实时控制串起来。
M4:RDK S100 PLC 样机
目标:围绕 PLC 样机场景,把 Linux 侧的配置、监控和网络接入,与 RT-Thread 侧的控制任务和 I/O 状态同步打通。
人员安排
All reactions