Hermit,一种用于受控测试和错误检测的工具

隐士

Hermit,作为一个可重现的容器,给出了如果系统栈提供可重现性作为抽象会是什么样子的想法

Facebook揭幕 最近通过一份出版物,推出 隐士, 形成一个 确定性程序执行的环境,这使得可以使用相同的输入数据在不同的启动上获得相同的结果并重复执行过程。

在正常执行期间,各种无关因素会影响输出,例如当前时间、线程调度函数、虚拟内存地址、来自伪随机数生成器的数据以及各种唯一标识符。

Hermit 允许在容器中运行程序 这些因素在后续运行中保持不变。 可重复执行,完全再现易变环境的配置, 可用于错误诊断、调试 多步迭代,为回归测试、压力测试、多线程故障排除和可重复构建系统创建固定环境。

Hermit 强制任意程序的确定性执行,并充当可重现的包装器。 也就是说,它将程序与非确定性来源(如时序、线程交错、随机数生成等)隔离开来。 有保证的确定性是一个强大的工具,是许多应用程序的基础,包括并发压力测试、记录/重放、可重现构建和并发错误的自动诊断等。

Hermit 无法将来宾程序与非确定性来源隔离开来,例如文件系统更改或来自外部网络的响应。 相反,为了提供完全确定性,用户必须提供固定的文件系统基础映像(例如,使用 Docker)并禁用外部网络。

关于隐士

隐士 允许电源创建可重现的环境 通过拦截系统调用,其中一些被替换为它们自己的产生恒定输出的处理程序,其中一些被重定向到内核,之后从输出中删除非持久性数据。

拦截呼叫 对系统来说, 使用框架 遐想,其代码也由 Facebook 发布。 为了防止文件系统更改和网络请求影响执行进度, 使用静止图像执行执行 文件系统并禁用对外部网络的访问。 通过访问伪随机数生成器,Hermit 生成一个预定义的序列,每次执行时都会重复该序列。

非确定性最复杂的来源是线程调度程序。 内核调度线程的方式取决于许多外部因素,包括物理 CPU 的数量或系统上运行的其他需要 CPU 时间的线程的数量。

在对性能的更复杂的非永久性影响中, 亮点线程调度器,其行为取决于许多外部因素,例如 CPU 内核的数量和其他正在运行的线程的存在。

确保可重复的调度程序行为,所有线程都序列化,绑定到单个 CPU 内核 以及控制传递给线程的顺序。 每个线程被允许执行固定数量的指令,之后停止执行并转移到另一个线程(为了限制,使用 CPU PMU(性能监控单元),它在指定数量的条件分支后停止执行)。

诊断 由于竞争条件导致的线程问题,Hermit 有一种模式可以检测出乱序的操作 并造成封锁。 为了识别这些问题,比较了正确操作和异常终止执行的注册状态。

最后,如果你有兴趣能够更多地了解它,你应该知道 项目代码 它是用 Rust 编写的,并在 BSD 许可下分发。

您可以查看详细信息 以下链接。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责资料:AB Internet Networks 2008 SL
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。