arceos-sleep
路径:
test-suit/arceos/task/sleep类型:测试入口 crate 分层:测试层 / ArceOS 定时休眠回归 版本:0.1.0文档依据:Cargo.toml、src/main.rs、qemu-riscv64.toml、docs/build/overview.md
arceos-sleep 用一组非常直观的工作负载,验证 ArceOS 中“线程睡眠到期后被唤醒”这条能力链是否正常。它既测试主线程的单次睡眠,也测试多个任务在不同休眠长度下的并发睡眠,还额外放了一个后台 tick 任务观察时间推进。
最重要的边界是:它不是计时器精度 benchmark,也不是实时性测试套件;它只是用行为级断言和日志来验证 thread::sleep() 没有失效。
架构设计
1.1 测试场景划分
这个 crate 可以拆成三段:
- 主线程先睡 1 秒,并打印实际耗时。
- 一个后台任务每 500ms 打一次
tick,持续 30 次。 - 5 个子任务分别按
1s..5s的粒度,每个重复休眠 3 次。
最终主线程通过 FINISHED_TASKS 原子计数器等待所有子任务结束。
1.2 真实调用关系
这里用的是用户侧最普通的 thread::sleep(),但实际会落到任务与时钟子系统:
如果 multitask 或 irq 不成立,这条链会退化;而本 crate 明确在 Cargo.toml 打开了:
multitaskirq
说明它测试的是“真正的定时阻塞与唤醒”,不是 busy wait 退化路径。
1.3 为什么要有后台 tick 线程
后台线程不是为了功能展示,而是为了额外确认:
- 睡眠期间系统时间仍在推进
- 调度器和定时器中断没有卡死
- 一个线程睡眠时,不会阻塞其他线程继续运行
这让 arceos-sleep 同时具备“单线程休眠验证”和“多任务定时推进 smoke test”两层含义。