arceos-memtest 技术文档
路径:
test-suit/arceos/memtest类型:测试入口 crate 分层:测试层 / ArceOS 堆分配与集合操作回归 版本:0.1.0文档依据:Cargo.toml、src/main.rs、qemu-riscv64.toml、docs/build-system.md
arceos-memtest 通过两个简单但压力不小的工作负载,验证 ArceOS 在 alloc 打开后,堆分配与常用集合操作仍然可用:一个是大规模 Vec<u32> 分配、排序与有序性检查,另一个是 BTreeMap<String, u32> 插入与回读校验。
最重要的边界澄清是:它不是物理内存测试器,也不是页分配器诊断工具;它验证的是“用户侧堆对象和集合在 ArceOS 上还能正常工作”。
1. 架构设计分析
1.1 两个测试工作负载
源码里的测试非常集中:
test_vec():构造 300 万个u32,排序后验证单调不减test_btree_map():构造 5 万条key_<value>映射,再把 key 解析回整数做一致性检查
这两个测试分别覆盖了两类最典型的堆对象行为:
- 连续大块增长和重排
- 大量离散节点分配与字符串格式化
1.2 真实调用链
虽然源码表面看是普通 Rust 集合操作,但在 ArceOS 上会落到真实的堆分配路径:
因此,一旦这里失败,问题通常不在容器本身,而在:
- 全局分配器
- 堆初始化
- 内存回收/分配
- 较大对象或大量小对象分配路径
1.3 固定随机种子的意义
SmallRng::seed_from_u64(0xdead_beef) 不是装饰,而是为了让测试输入稳定可复现。这样在不同架构或不同回归轮次中,容器处理的是同一批数据,便于定位问题。