arceos-parallel 技术文档
路径:
test-suit/arceos/task/parallel类型:测试入口 crate 分层:测试层 / ArceOS 并行执行与同步回归 版本:0.1.0文档依据:Cargo.toml、src/main.rs、qemu-riscv64.toml
arceos-parallel 通过“把 200 万个数分片给 16 个任务并求和”的固定工作负载,验证 ArceOS 的多任务、join、等待队列屏障以及多核并行路径是否仍然正确。它不是在提供并行框架,而是在拿一条可复现的并发计算链做系统回归。
核心边界非常清楚:它不是线程池、不是并行算法库,也不是性能 benchmark;它只是用一个固定工作负载证明并行任务、同步屏障和结果归并没有坏。
1. 架构设计分析
1.1 工作负载结构
这个 crate 的主线分三步:
- 用固定随机种子生成
NUM_DATA = 2_000_000个u64数据。 - 主线程串行计算一次期望结果
expect。 - 16 个任务并行处理各自的切片,最后主线程
join所有任务并汇总结果。
这让它同时具备:
- 正确性基线:串行
expect - 并行路径:多任务分片求和
- 收敛点:所有子任务
join
1.2 自制 barrier 的作用
源码里的 barrier() 不是多余的,它明确让所有任务在完成自己的局部计算后,在同一个同步点汇合,然后再统一继续。对 ax-std 场景,它使用:
AxWaitQueueHandleax_wait_queue_wait_until()ax_wait_queue_wake()
这相当于顺手把等待队列同步路径也带进了测试。
1.3 真实调用链
此外,main() 一开始还故意调用了一次“永不满足条件、500ms 超时返回”的 ax_wait_queue_wait_until(),专门验证超时路径能返回 true。