
一 |
01
从“全网寻人”到“双向奔赴”今年5月,一段“全国劳模殷玉珍替树‘寻亲’”的视频在全网被转发,殷玉珍希望一个名叫“赛考斯”的美国人能来中国看看。 作者 | Steef-Jan Wiggers 译者 | 平川 OpenAI 的工程师们花了数周时间,试图解释 Rockset 中那些神秘的崩溃问题。

二 | Rockset 是一款 C++ 数据基础设施服务,为 ChatGPT 的搜索和数据插件提供支持。因为在2000年,这位美国人曾为她的治沙事业捐助了5000美元。

三 | “赛考斯”回忆,他和殷玉珍的故事源于1999年的洛阳,当时42岁的“赛考斯”通过中美教师交流项目,在洛阳任教。他看到中央四台有英文节目报道内蒙古毛乌素沙地,殷玉珍和丈夫常年在一线植树,坚持治沙的故事,深受感动。

四 | 后来,他通过一家基金会,捐资5000美元,助力殷玉珍在毛乌素沙地种下万亩树林。 该团队让 ChatGPT 编写了一个脚本,用于下载每个核心文件的开头部分,提取寄存器数据,过滤已知的误报,并将每次崩溃标记为“返回空指针”、“栈对齐错误”或其他类型。如今,用这笔钱购买栽种的树苗,已长成5万多棵大树。得知“赛考斯”要来,殷玉珍非常高兴,“当年你给的美金,我给你种下一片森林,你啥时候来看一看”“我在沙漠等着你”。
02
这段绿色情谊被全网点赞!“赛考斯”被“找到”之后,他在采访中说:“我们都是一家人,中国人和美国人,都是同一个星球上的同胞。团队追踪发现,这些崩溃源自一台物理主机,其 CPU 正在悄无声息地产生错误的结果。”此前,两人线上重逢后,网友们纷纷为跨越国界的善举和情谊点赞。

5月25日的外交部发布会上,发言人毛宁也为他们点赞!
20余载
5000美元
变成了毛乌素沙地的5万多棵大树
也见证了殷玉珍和“赛考斯”
跨越大洋的动人故事
这次全网见证的故地重逢
相信能浇灌出更加美丽的友谊之花制片人丨杨瑾记者丨郑青松 闫影 陈晓东 高鑫 翟昊辰编辑丨魏韫桐

五 | 将该主机从服务中移除后,因栈对齐错误导致的崩溃便完全消失了。 在剔除硬件崩溃问题后,剩余的由“返回空指针”导致的崩溃问题便变得可控了。此前,团队曾排除了 C++ 异常展开的原因,因为他们认为自己找到了反例:在未使用异常的代码路径中发生了崩溃。但这些反例全都来自有硬件损坏的故障集群。一旦剔除了这些干扰因素,剩余的所有崩溃便都是发生在异常展开过程中了。 问题发生的根本原因是 GNU libunwind 的 _Ux86_64_setcontext 函数中有一个已经存在 18 年的竞争条件。

六 | 在 C++ 异常展开过程中,libunwind 会在栈上合成一个 ucontext_t 结构体,填充所需的寄存器状态,然后调用 _Ux86_64_setcontext 将控制权转移给清理处理程序。

七 | 问题在于:_Ux86_64_setcontext 在从旧结构体中读取指令指针的操作尚未完成之前,就将栈指针(%rsp)更新为指向新的栈帧。一旦 %rsp 发生变化,该结构体便不再属于活动栈的一部分,也不再受内核红区的保护。如果信号恰好在 %rsp 更新与 %rip 读取之间的这一时间窗口内到达,内核就会在该结构体之上构建其信号帧,指令指针遭到破坏,函数便会跳转到 NULL 或垃圾地址。 竞争窗口的宽度正好为一条指令。以现代处理器的时钟频率计算,这大约相当于 100 皮秒。

八 | 在大多数程序中,这种情况根本不会被触发。OpenAI 的 Rockset 使用了 timer_create 函数,每隔几毫秒的 CPU 时间就发送一次 SIGUSR2 信号,为的是实现轻量级的按查询记账,这样产生的信号发送事件远多于传统的应用程序。正是这种高频的信号发送,将只在理论上可能发生的竞争状况转化成了实际生产环境中的崩溃。 该团队将一个修复方案和一个自包含的重现示例提交到了 GNU libunwind,并通过验证证实,其他展开器(如 libgcc)不存在这个问题。该修复方案通过重新排序指令,确保在更新 %rsp 之前先读取 %rip,从而彻底消除了这个时间窗口。 该团队对这一教训的总结值得全文引用: 最重要的步骤并非巧妙地解读汇编代码,也不是对细节的深入了解,而是构建一个高质量的数据集。

九 | 如果没有这个数据集,我们就会把两种截然不同的现象混为一谈,并试图通过推理来理清这种混乱。一旦获得了准确且完整的全量数据,问题的结构便显而易见了。 如果你的团队正在排查难以解释的生产环境崩溃问题,请检查你们是否将多个 Bug 混为一谈。那些看似与所有假设都不相符的症状,实际上可能并不矛盾;它们可能与两个不同的假设相符,而你却无意中将它们混淆了。洞察问题结构的最快途径,并非对单个案例进行更深入的分析,而是获取涵盖所有故障案例的完整、带标签的数据。 这篇完整的工程技术博文包含了详细的栈内存示意图、存在漏洞的汇编指令,以及揭示出两种不同类型故障的崩溃率可视化图表。 https://www.infoq.com/news/2026/07/openai-libunwind-core-dumps/ 声明:本文由 InfoQ 翻译,未经许可禁止转载。
Current article:http://www.choumaimuwogenkuzhainuan.bond/list_9iwp/xtf.html
Published on:07:12:06