GitHub - facebookexperimental/hermit: Hermit 在一个特殊的、密封隔离的沙盒中启动 Linux x86_64 程序,以控制它们的执行。Hermit 将正常的、非确定性的行为转换为确定性的、可重复的行为。这可以使..

主要观点: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 支持正在进行中。
阅读 15
0 条评论