Replies: 9 comments
-
|
1.20 - 1.31 开发分支: 已完成
待完善
|
Beta Was this translation helpful? Give feedback.
-
|
2.1 - 2.7 已完成:
待完善:
|
Beta Was this translation helpful? Give feedback.
-
|
2.8 - 2.21 已完成:
待完善:
|
Beta Was this translation helpful? Give feedback.
-
|
2.22 - 2.28 已完成:
待完善:
|
Beta Was this translation helpful? Give feedback.
-
|
3.1 - 3.8 已完成:
待完善:
|
Beta Was this translation helpful? Give feedback.
-
|
3.9 - 3.15 已完成:
待完善:
|
Beta Was this translation helpful? Give feedback.
-
|
3.16 - 3.22 已完成:
待完善:
|
Beta Was this translation helpful? Give feedback.
-
|
3.23 - 3.29 这周主要还是继续收口 Linux guest 用户态探针,重点放在 guest-uprobe/guest-uretprobe 的返回探针、实例隔离和 shell 可观测性上。到这一步,这条链路已经不只是“能注册一个 probe”,而是开始具备按 mm/pid/tgid 区分实例、按进程清理状态,以及在 trace list 里直接看到 active 实例上下文的能力。主程序场景下的基础 ASLR 适配和返回探针主路径也已经基本可用。不过边界也很明确:现在的对象模型还停留在主程序文本段这一层,共享库、多对象映射和 dlopen 带来的完整动态装载语义还没有进主线,所以这周的重点还是先把主程序场景做稳,而不是继续往共享库方向扩展。 |
Beta Was this translation helpful? Give feedback.
-
|
3.30 - 4.12 这两周先把共享库 uprobe/uretprobe 的问题边界看清了。现在真正卡住的,不是 load bias 或重定位公式本身,而是 runtime observer 在共享对象场景下还不能稳定完成对象路径和实例识别。实际现象是:dlopen 之后,guest 侧的共享库已经完成映射,目标函数也确实被执行了,但 host 侧没有把这次映射识别成能和 pending binding 对上的目标对象,结果 probe 一直停在 pending,共享库实例进不了 active。在这个前提下,这两周没有再继续往共享库方向扩功能,而是把重点转到主线联调上,集中把 tracepoint、hprobe/hretprobe、guest-kprobe/kretprobe、guest-uprobe/uretprobe 放进同一条QEMU + AxVisor + Linux guest 验证流程里,同时补齐统一 guest demo、rootfs 注入、自动化验收脚本、人工手工演示手册和配套文档。到目前为止,主线七类能力已经可以在一次运行窗口里统一验证, 当前这轮联调更多还是做到关键日志和关键命中结果可稳定输出,离正式对外演示还有一段距离,后面还需要继续打磨演示流程、日志呈现和操作节奏。 |
Beta Was this translation helpful? Give feedback.
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 eBPF 性能追踪系统
1. 项目背景
1.1 问题陈述
AxVisor 是基于 ArceOS 构建的模块化 Type-1 Hypervisor。当前的可观测性依赖于静态日志输出,存在以下局限:
1.2 解决方案
引入 eBPF 技术,实现:
1.3 技术路线
由于 Starry-OS 是基于 ArceOS 扩展的宏内核,AxVisor 是基于 ArceOS 扩展的 VMM,两者共享底层基础设施。本项目将移植并扩展 Starry-OS 的 eBPF 实现,适配 Hypervisor 场景。
2. 系统架构
3. 核心功能
3.1 追踪点 (Tracepoint)
预定义的静态插桩点,适用于 Hypervisor 关键路径:
vmm:vcpu_run_entervmm:vcpu_run_exitvmm:hypercallvmm:mmio_accessvmm:ept_violationvmm:interrupt_inject3.2 动态探针 (Kprobe/Kretprobe)
支持在任意内核函数入口/返回处动态插桩,无需预定义追踪点:
3.3 Hypervisor 专用 Helper
除标准 eBPF Helper 外,提供 Hypervisor 上下文访问:
bpf_get_current_vm_idbpf_get_current_vcpu_idbpf_get_exit_reasonbpf_get_guest_regs3.4 预期效果
4. 开发计划 (12 周)
4.1 时间线概览
4.2 Phase 1: 基础设施 (Week 1-2)
目标: 集成 Starry-OS 组件,建立符号表和追踪点基础设施
modules/axebpf,包含子模块结构symbols.rs,集成 ksym;修改 xtask 生成 kallsyms.bintracepoint.rs,封装 tracepoint 库交付物:
modules/axebpf模块xtask symbols命令4.3 Phase 2: eBPF 运行时 (Week 3-4)
目标: 移植 rbpf VM,实现程序加载和执行
EbpfVm结构体,支持 Helper 注册maps.rs,封装 kbpf-basic (HashMap, Array, RingBuf)交付物:
4.4 Phase 3: VMM 追踪点与 Shell (Week 5-6)
目标: 定义 Hypervisor 追踪点,实现 Shell 命令
交付物:
trace命令组4.5 Phase 4: Kprobe/Kretprobe 支持 (Week 7-8)
目标: 移植 Starry-OS kprobe 实现,支持动态探针
trace kprobe/kretprobe命令交付物:
4.6 Phase 5: 验证器与 Uprobe (Week 9-10)
目标: 实现 eBPF 验证器,探索 Uprobe 支持
交付物:
4.7 Phase 6: 测试与文档 (Week 11-12)
目标: 全面测试,编写文档,性能优化
性能目标:
交付物:
5. 依赖组件
5.1 Starry-OS 组件 (直接复用)
5.2 社区组件
6. 未来扩展
6.1 完善 Uprobe 支持
Phase 5 将进行 Uprobe 可行性研究。在 Hypervisor 场景下,Uprobe 面临的挑战:
如可行,将支持追踪 Guest OS 中的用户态程序。
6.2 Rust 异步追踪 (研究方向)
问题: 现有 eBPF 追踪方案基于同步执行模型,无法有效追踪 Rust async/await 异步代码:
研究方向: 探索针对 Rust async runtime 的专用追踪方案,可能需要:
此方向需要进一步研究,不在当前 12 周计划范围内。
7. 参考资料
Beta Was this translation helpful? Give feedback.
All reactions