本次实习工作总结
摘要
本次实习围绕 x86 自动化测试体系构建、starry-vdso 完善、以及基于自定义 vDSO 接口的 fast path 设计与实现 三条主线展开。完成了从 PXE 自动化部署验证、CI 集成、多组织资源锁适配,到多架构 vDSO/getcpu 支持、vvar 映射优化、自定义 fast path 加载与调用、eBPF→vDSO 数据通路打通等一系列工作。整体实现了 vDSO 基础设施、以及低延迟 fast path 机制上的重要增强,为后续可插拔调度器、动态 eBPF 策略与用户态零系统调用访问奠定了基础。
x86 自动化测试支持
验证了 x86 平台使用 pxe 进行自动测试部署的流程,并编写验证报告
拆分 pxe 部署脚本,并与已有 github-runners 结合,使其能够在 CI 中自动触发测试
验证了部署流程与多组织资源锁 runner-wrapper 的适配,在 ubuntu+qemu 环境成功触发资源锁并执行完整测试
由于本地环境限制(缺少物理开发板),将已完成部分交付给柏乔森老师负责真实硬件上的验证
starry-vdso 的完善
- 将 starry-vdso 接入 starryOS 验证时间相关函数已经能够走 vdso 路径 具体验证结果见笔记
- 修改了 x86 架构 getcpu 的初始化实现 为每个 cpu 分配独立 GDT 空间 解决多核场景下 CPU ID 获取不准确的问题

- 实现了 loongarch64 架构的 vdso_getcpu
基于自定义 vDSO 接口的 fast path 设计与实现
使用 vdso-helper 编译包含自定义 fast path 的
.so文件,并完成在 StarryOS 中的加载与调用
优化 starry-vdso 的 vvar 映射逻辑 使用户态可以正常通过 vdso基地址+偏移量 访问自定义 vdso 接口
在已有可加载模块
modules/kebpf中增加 vdso 数据页的更新逻辑。当 eBPF 程序执行时,将结果从 map 写入 vvar,使用户态可以零系统调用读取结果,显著降低延迟
在
api/src/lib.rs处增加 vdso 数据页的更新逻辑,在register_timer_callback时同步更新 vvar 中的任务快照,确保 fast path 始终读取到最新状态
相关链接
项目工程仓库
- starry-vdso https://github.com/HoshimiP/starry-vdso
- StarryOS/tree/vdso_for_ebpf https://github.com/HoshimiP/StarryOS/tree/vdso_for_ebpf
周报和工作总结
参考
- github-runners https://github.com/arceos-hypervisor/github-runners
- 在 x86 物理机验证通过的自动测试文档 https://github.com/arceos-hypervisor/github-runners/blob/x86/docs/PXE%E9%83%A8%E7%BD%B2%E8%AF%B4%E6%98%8E.md
- vdso-helper https://crates.io/crates/vdso_helper
- StarryOS 支持内核可加载模块和 ebpf 的分支 https://github.com/Starry-OS/StarryOS/tree/kmod