主要观点: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 的“自我托管”和自我测试。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。