我们在 Antithesis 遇到的最严重的 bug

主要观点:Antithesis 早期机器频繁崩溃,引发关于是否修复该罕见 bug 的争论,最终决定调查。调查过程中发现 bug 极其罕见、非确定性,起初以为是协议或逻辑 bug,后在 FreeBSD 内核源代码中找到相关代码,又因偶然发现 bug 出现时间规律而联系 Colin Percival,原来这是 Colin 2017 年在 Xen netfront 驱动中修复过的 bug,EC2 的 DHCP 租约设置导致网络接口每 30 分钟重置引发错误,此经历让团队明白调试此类 bug 痛苦,且证明保留 bug 会降低系统质量,促使团队决心让 Antithesis 实现“自我托管”和自我测试。
关键信息

  • Antithesis 机器早期频繁崩溃,存在是否修复的争论。
  • 调查聚焦于 hypervisor 的网络组件,未找到明显问题。
  • 偶然发现 bug 出现时间规律,联系 Colin Percival 后找到根源。
  • 原因为 EC2 的 DHCP 租约设置使网络接口每 30 分钟重置。
  • 此经历让团队认识到调试此类 bug 的困难及保留 bug 的危害。
    重要细节
  • Antithesis 是基于 FreeBSD 的 type 2 hypervisor,与平台通过自制协议通信。
  • 首次怀疑是协议或逻辑 bug,重点关注网络组件但未发现问题。
  • 找到 FreeBSD 内核源代码中与 ENODEV 相关的代码,其含义与文档不符。
  • Colin 对团队提及的 send()系统调用偶尔错误做出回应,指出与网络接口重置有关。
  • 网络接口重置涉及两步,期间存在窗口导致 IFF_DRV_RUNNING 标志未设置,引发 ENODEV 错误。
  • 此经历让团队明白快速修复 bug 可防止堆积,提高生产力,也促使团队决心实现 Antithesis 的“自我托管”和自我测试。
阅读 12
0 条评论