AxVisor实习计划 — Backtrace 实现与 Xtask 修复 #1623
Replies: 11 comments
组会 Discussion 提纲背景本次目标:
检查 quick-start 流程时发现命令不一致:
→ PR #1607 修这些入口问题。 新问题:scripts 是否应该保留?Review 意见:
当前结构: 两个入口做同一件事,长期保留会导致功能逐渐不一致。 → 最终方向:用户 → cargo xtask → axbuild(删掉 scripts)。 但删 scripts 引出一个问题:Axvisor 独立发布,不能依赖 tgoskits 的 tg-xtask。必须有 standalone xtask。 Axvisor standalone xtask 怎么做?方案 A:复用 axbuild(PR #1651)
方案 B:Axvisor 自己维护 xtask问题:未来需要同时维护 tg-xtask、axvisor xtask、axbuild,与 tgoskits"复用模块"理念背离。 → 当前倾向方案 A,"发行时再拆分"。 需要讨论
Backtrace(简要同步)
|
Week2 组会内容本周工作:
问题本次改动的范围应该是哪些?
其它问题:
|
目前挂起的PR基本上都通过了检查(待合入):
正在做的工作(预计本周内完成)
PR 注册表(系列序号从 1 开始,PR 2 为系列 #1;PR 标题为提交/PR 标题):
TODO?:
|
AxVisor 网络管理控制面 — 组会进展汇报(2026-08-10)目前实现的工作
PR 中的问题1. restart-after-stop 不支持(最核心残缺)
2. 受限 create
3. 测试专用 feature 暴露在内核 feature 面(ZCShou 阻塞)
4. quickstart 文档位置不对(ZCShou 阻塞)
TODO(本周)按顺序进行
Pending PR? |
AxVisor 网络管理控制面 — 组会进展汇报(2026-08-17)目前实现的工作
TODO
|
AxVisor 网络管理控制面 — 组会进展汇报(2026-08-24)目前推进的工作
TODO:
|
组会汇报(2026-08-31)一、做了什么1. syscall 修复:eventfd 边沿语义与 Linux 对齐(https://github.com/rcore-os/tgoskits/pull/2235)
2. 网络控制面:web-ui 管理台重构与联调(exp/webui-without-eventfd-fix,6+ commits)
3. 网络终端方案设计(本周主要设计产出,两个新文档)
4. 其他项
二、遇到的问题与取舍1. 每个字节都切换特权级的问题(每字符 VM-exit 陷阱开销)guest 写虚拟 UART 的 TX,每个字符触发一次 VM exit 到 EL2,特权级切换开销按字节累计。已写进网络终端计划作为已知项:本期 2. virtio console 的取舍
3. 遗留/待办
三、下周计划(按 network-terminal-plan §5–6 的节奏)
|
组会汇报(2026-09-07)一、做了什么
|
组会汇报(2026-09-14)一、做了什么
二、TODO
|
组会汇报(2026-09-20)一、做了什么
|
组会汇报(2026-09-27)一、做了什么
二、TODO
os/axvisor/ virtualization/axvm/docs/ |
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 实习计划
作者: Xinhong Hu
日期: 2026-07-16 ~ 2026-10-10(约三个月)
当前分支:
fix/axvisor-scripts-cargo-commands基线:
dev@dbbe0e065总体路线
背景与动机
AxVisor 是基于 ArceOS 的 Type-1 虚拟机管理器。本计划覆盖两个独立方向:
os/axvisor/xtask/沦为死代码(import 已失效,逻辑全在scripts/axbuild/里)。但 每个 crate 是独立发布单元,axvisor 的 xtask 必须是自包含的。需要修复它,使 axvisor 可以脱离 monorepo 独立构建运行。axbacktrace组件,且axruntime已集成完整链路,AxVisor 仅需启用backtracefeature 即可获得 panic backtrace 能力。进一步需要在异常处理路径中集成 trap backtrace。关键发现
axbacktrace已通过ax-std → ax-runtime在依赖树中axruntime::lang_items.rs中,已含 backtrace 调用链axvisor::args::Command中的Image子命令引用了axbuild::image(顶层模块)os/axvisor/xtask/src/main.rs)import 了不存在的axbuild::axvisor::imagequick-start.sh:789,796仍用旧cargo axvisor image pull语法current_threadruntime 可在 AxVisor hypervisor 内直接运行(EL2) — 8 个 async primitive 全部通过qemu-aarch64thread::spawn发布模型说明
Monorepo 仅是为了统一开发方便。每个 crate 保持独立发布能力是我们的基本原则。具体到 axvisor:
os/axvisor/xtask/是 axvisor 的自有 xtask,不依赖 workspace-root 的tg-xtaskaxbuildcrate(作为 crates.io 依赖)复用构建逻辑,但接口必须正确维护第一周(7/16 — 7/19,本周剩余):代码熟悉 + Xtask 修复
本周重点:熟悉 AxVisor 代码结构,同时将 xtask 修复为可独立工作的状态。
任务 1:AxVisor 代码熟悉(贯穿本周)
目标:建立对 AxVisor 代码结构的整体理解,为后续工作打基础。
1.1 构建与启动流程
main.rs→ VMM 初始化 → VM 创建 → vCPU 调度Cargo.toml→ feature flags →ax-std/ax-hal/axvm→linker.x→ binaryquick-start.sh/setup_qemu.sh的作用和差异configs/qemu/qemu-*.toml各字段含义1.2 核心模块概览
axvm— VM 生命周期、vCPU 调度、stage2 页表axvmconfig— VM 配置解析ax-std/ax-hal— 依赖 ArceOS 的运行时支撑src/shell/— 交互式 Shell(命令框架、VM 管理、历史记录)src/vmm/— VMM 核心逻辑1.3 异常处理路径
axruntime::lang_items→axpanic→axbacktrace(当前 backtrace 被禁用)ax-hal/ax-cpu的 exception handlervcpu_run→vm.run_vcpu()→ VM Exit 处理 → stage2 fault 处理任务 2:AxVisor Xtask 独立化修复(小 PR 拆分)
目标:修复
os/axvisor/xtask/,使其可独立编译运行。拆分为 2-3 个小 PR。PR 1:修复当前分支的遗留问题(✅ 已提交 #1607)
范围很小,仅含以下修复:
a)
quick-start.shRDK S100P 语法修复setup_rdk_s100()(第 789、796 行)仍用旧语法:2528776e5中改为:cargo xtask image pull语法b) 文档中残留的旧命令
os/axvisor/下所有.md/.sh文件中残留的cargo axvisor image/cargo xtask qemu(应为cargo xtask axvisor qemu)等旧命令模式验证:
grep -rn "cargo axvisor image" os/axvisor/无残留PR 2:修复本地 xtask binary 使其可编译(✅ 已提交 #1651)
问题(已修复):
os/axvisor/xtask/src/main.rs第 105 行:其中
image是axbuild的顶层模块(axbuild::image),不在axbuild::axvisor下。同时,
Command::Image(args)变体使用的image::Command指向axbuild::image::Command(顶层模块),需要修正 import 路径。修复:
use axbuild::axvisor::{Command, TestCommand, image}改为分开导入:normalize_command_paths中对Command::Image(args)的处理使用正确的image::Command类型cargo build -p axvisor --bin xtask编译通过PR 3(可选,取决于独立发布需要):梳理 xtask 的 axbuild 依赖接口(⏸ 推迟)
目标:确认 axvisor xtask 对
axbuildcrate 的依赖是最小化的、接口明确的。os/axvisor/xtask/src/main.rs中使用的所有axbuild::axvisor::*类型axbuild::axvisor::Axvisor::new()?.execute(command).await链路有接口变更,同步更新Cargo.toml(目前缺失,因为在os/axvisor/Cargo.toml中作为[[bin]]定义)的依赖声明正确任务 3:当前分支收尾
目标:将
fix/axvisor-scripts-cargo-commands分支合并回 dev。devHEAD(当前分支已有全部修复)第二周(7/20 — 7/26,下周):Backtrace 实现
本周重点:backtrace 从 feature 启用到异常处理集成,从测试验证到文档。
任务 4:Backtrace Feature 启用与基础验证
目标:通过启用 feature flag 使 AxVisor 获得 panic backtrace 能力。
4.1 现有链路分析(已调研完成)
当前
ax-std未启用backtracefeature →axbacktrace无allocfeature →capture()返回Disabled。4.2 启用 Backtrace
修改点:
os/axvisor/Cargo.toml中ax-std的 features 列表:feature 链路:
ax-std/backtrace→axbacktrace/alloc→ frame pointer 栈回溯可用。4.3 初始化验证
axbacktrace::init(ip_range, fp_range)在 ax-runtime 初始化时自动调用。需要验证:_stext/_etext段符号 → IP_RANGE 正确过滤非 kernel 地址INCLUDE "runtime.x",确认runtime.x中有这些符号4.4 首次验证
启用后触发故意 panic,验证输出包含
BACKTRACE_BEGIN kind=panic arch=<arch>...BACKTRACE_END且栈帧 ≥ 3。任务 5:Trap/Exception Backtrace
目标:在 AxVisor 异常处理路径中集成 backtrace。
5.1 Host Trap Backtrace
利用
axbacktrace::Backtrace::capture_trap(fp, ip, ra):fpipraax-cpu/ax-hal的 exception handler 中添加capture_trap()调用5.2 Guest Stage2 Fault Backtrace(重点调试场景)
known-issues.md中 #2(NimbOS UEFI stage2 page fault)和 #3(RISC-V64 guest page fault)目前仅有简单日志:在
axvm的 VM exit / stage2 fault 处理路径中添加Backtrace::capture(),显示 hypervisor 调用链,辅助定位这两个问题的根因(不直接修复)。任务 6:符号解析(可选增强)
使用 host-side symbolize(
scripts/axbuild/src/backtrace/symbolize.rs+addr2line)解析裸地址为函数名。ArceOS/StarryOS 已有现成管道可复用。任务 7:测试与文档
doc/backtrace.md使用文档Backtrace 期间可同步学习的内容
在写 backtrace 的过程中,会自然接触到以下模块。主动深入理解它们,将为后续 Web VM Management 主线节省大量学习时间:
在 Week 1(Xtask 修复)期间
src/manager.rs→axvm/src/manager.rs→runtime/mod.rsaxvm/src/lifecycle/machine.rs,status.rssrc/shell/command/mod.rs,vm.rssrc/config.rs,axvmconfig/src/lib.rsPOST /vms的 request body 即 TOMLaxdevice/src/factory.rs在 Week 2(Backtrace)期间
axvm/src/runtime/vcpus.rs:294 vcpu_run()axvm/src/arch/x86_64/exit.rsaxvm/src/manager.rs:inject_interrupt()axvm/src/host/task.rs, axtaskwait_queue.rsaxstd/src/net/tcp.rsaxruntime/src/lang_items.rs第三阶段(7/27 — 10/10):Web VM Management 主线
背景与动机
AxVisor 当前只能通过串口 shell 管理 VM。增加 Web 管理面可以使 AxVisor 从一个"开发者工具"变成一个"可用的虚拟化管理程序"。该任务按三个月拆分,每月一个里程碑。
前提条件
在开始之前,以下调研结论已通过代码分析确认(详细分析见
doc/axvisor-analysis.md):TcpListener+thread::spawn,可与 vCPU 共存;或使用 Tokiocurrent_threadruntime(已验证 EL2 可运行,见tokio-in-axvisor-analysis.md)EmulatedDeviceType::VirtioConsole仅枚举定义,需从 MMIO transport 开始构建DeviceFactoryRegistry可通过注册新 factory 支持 virtio-consoleEndpoint抽象、ApiRequest分发、ConsoleOutputMode等设计模式直接借鉴qemu-aarch64上 EL2 级别可跑 Tokiocurrent_threadruntime,8 个 async primitive 全部通过(tokio_demo.rs)第一月(7/27 — 8/26):HTTP VM Management API
目标: 交付可合并的 VM CRUD + Lifecycle REST API。
模块设计(参考 CubeSandbox 的链路):
方案 A —
axstd TcpListener+thread::spawn(最小依赖):方案 B — Tokio
current_threadruntime(已验证可行,见os/axvisor/doc/tokio-in-axvisor-analysis.md):主要任务:
VmApiRequestenum(借鉴 CubeSandboxApiRequest):VmCreate, VmDelete, VmBoot, VmShutdown, VmList, VmInfo, VmPause, VmResumeTcpListener)GET /vms,POST /vms,GET /vms/:id,DELETE /vms/:id,POST /vms/:id/start,POST /vms/:id/stopAxVmError→ HTTP status code(400/404/409/500)交付物: PR to AxVisor main — HTTP VM Management API(预计 ~800-1200 行 Rust)
第二月(8/27 — 9/26):virtio-console + WebSocket Bridge
目标: guest 控制台可通过浏览器 WebSocket 访问。
模块设计(参考 CubeSandbox
Endpoint+Console+SerialManager):主要任务:
ConsoleBackendtrait(借鉴 CubeSandboxEndpointenum)virtio-driverscrate)DeviceFactoryRegistryConsoleEpollHandler::process_input_queue/output_queue)交付物: PR — virtio-console device + WebSocket console backend
第三月(9/27 — 10/10):完善与收尾
目标: 测试覆盖、文档编写、上游 review 反馈修复。
主要任务:
doc/web-vm-management.md(架构、API 参考、快速开始)交付物: 完整的 Web VM Management 系统 + 测试 + 文档
架构风险与应对
TcpListenerAPI 不完整(缺accept()/incoming())current_thread可在 EL2 运行)sched-cfs;Tokio 方案下可通过spawn_blocking避免阻塞 vCPU 任务已知残留问题(本计划范围外)
EISDIR(#6-#11)axfs-ng目录处理,跨模块mkdir -p递归创建(#8)axstd占位实现第一阶段风险
os/axvisor/xtask/的 axbuild 依赖接口与独立发布要求不匹配runtime.x,添加缺失符号-fno-omit-frame-pointer;仅影响 riscv64交付物清单
第一周
— PR fix(axvisor): correct cargo commands and update image layout in scripts and docs #1607 已提交,等待 review 合入
— PR fix(axvisor): standalone xtask CLI compatibility #1651 已提交,等待 review 合入
— 推迟到后续
fix/axvisor-scripts-cargo-commands分支合并— PR fix(axvisor): correct cargo commands and update image layout in scripts and docs #1607 未合入,待上游 merge
第一周追加任务(计划外,已并入主线文档)
feat/tokio-in-axvisor-analysis/feat/tokio-axvisor-demo)— 结论:Tokio
current_thread可在 hypervisor EL2 运行,HTTP server 可选 Tokio 方案— 已在"前提条件"、"模块设计"、"架构风险"中补充
第二周
doc/backtrace.md使用文档第一月:HTTP VM Management API
doc/web-vm-management.md(架构、API 设计)第二月:virtio-console + WebSocket Bridge
第三月:完善与收尾
doc/web-vm-management.md完整文档时间线
参考
All reactions