主要观点:Hermit 是一个可重现容器,能强制任意程序的确定性执行,通过拦截系统调用并进行处理来实现,虽不能隔离所有非确定性源,但能保证程序执行的确定性,目前处于维护模式,不再积极开发,但其在多个应用场景有价值,如并发压力测试、可重现构建等。
关键信息:
- Hermit 利用[Reverie]拦截系统调用,可完全替换内核功能或净化响应。
- 构建用标准 Rust cargo 工具,二进制在
target/debug/hermit
。 - 运行程序用
hermit run <prog>
,可进行并发压力测试等多种模式。 - 示例程序在[./examples]文件夹,可通过不同方式运行展示非确定性消除或控制。
- 内部 CI 用 buck 构建,有 700 多个集成测试待迁移到外部系统。
- Hermit 可用于诊断并发错误,通过
hermit analyze
等命令。 - Hermit 基于 BSD-3 条款许可证。
重要细节: - Hermit 不能隔离文件系统变化或外部网络响应等非确定性源,需提供固定文件系统基础镜像和禁用外部网络。
- 为保证线程调度的确定性,先序列化线程执行,再确定性选择下一个运行线程,利用 CPU 的 PMU 控制线程运行时间。
- 集成测试较复杂,结合多种运行模式和测试二进制。
- 目前 Hermit 支持 x86_64 Linux,Aarch64 支持正在进行中。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。