> 新闻 > 国内新闻 > 正文

少林足球

跳水“梦之队”巴黎周期主力阵容成型_我的网站

如果我爱你

A |     作者 | Steef-Jan Wiggers     译者 | 平川          OpenAI 的工程师们花了数周时间,试图解释 Rockset 中那些神秘的崩溃问题。    

北京时间7月3日夜,随着杨健、杨昊在男子10米跳台决赛中夺得金、铜牌,2022国际泳联布达佩斯游泳世锦赛也落下了帷幕。在跳水项目的全部13个项目冠军争夺中,金牌无一例外属于中国跳水队。

B | Rockset 是一款 C++ 数据基础设施服务,为 ChatGPT 的搜索和数据插件提供支持。函数似乎会返回错误的内存地址,栈指针在执行过程中似乎会偏移 8 个字节。此外,他们还获得了2枚银牌、2枚铜牌。团队提出的每一种假设都面临着有力的反证。史无前例 17位选手包揽13个项目冠军 在11年前的上海游泳世锦赛上,中国队曾经有过一次垄断全部项目冠军的先例,但当时只有10个比赛项目。而随着2015年世锦赛不断设置新项目,现在的设项总数已经增加到了13个,中国队做到了史无前例的大包大揽,前无古人。中国跳水队不愧是名副其实的“梦之队”、六边形战队,而且经过了东京奥运会之后的局部换血,已基本形成了巴黎奥运周期的主力阵容,老将依然坚挺,新人已经挑起了大梁。这个 Bug 似乎根本不可能存在。这个意义对于中国队本身来说更加重大,更加务实。在3年前的光州世锦赛上,中国跳水队在最后一个比赛日以“队员赛程冲突”为理由放弃了混双3米跳板决赛,最终拿下了12枚金牌。         他们原本以为是一个 Bug ,结果却发现是两个互不相关的 Bug ,它们只是很巧合地在同一时间被发现了。队伍的官方表态是让男选手杨昊保存体力确保男单10米台的成绩,但是我们也可以理解为任何事情都不要太满,13块金牌全部拿下的话对整个跳水项目不是好事情。这一突破性发现并非来自对单个崩溃事件的深入排查,而是源于转向了他们所说的“流行病学调试”:构建一条管道,自动分析过去一年中生产环境的每一个核心转储文件,然后寻找整体规律,而不是对单个案例进行推断。         该团队让 ChatGPT 编写了一个脚本,用于下载每个核心文件的开头部分,提取寄存器数据,过滤已知的误报,并将每次崩溃标记为“返回空指针”、“栈对齐错误”或其他类型。他们将该脚本并行应用于过去一年中的所有 Rockset 核心转储文件。这会严重打击其他国家的积极性,影响跳水项目在国际上的发展。他们很快就发现了相关性。原本从症状上看属于同类的问题,实际上对应两组特征完全不同的崩溃事件。         这些因栈对齐错误导致的崩溃均源自同一个 Azure 区域,有明确的起始日期,而且从未出现在长期运行的节点上。团队追踪发现,这些崩溃源自一台物理主机,其 CPU 正在悄无声息地产生错误的结果。故放弃一块非奥项目金牌,让项目能平衡发展,这个做法是明智和值得的。它既没有过热,也没有抛出机器检查异常,而只是数学运算默默出了错。

C | 将该主机从服务中移除后,因栈对齐错误导致的崩溃便完全消失了。         在剔除硬件崩溃问题后,剩余的由“返回空指针”导致的崩溃问题便变得可控了。

D | 到了本届布达佩斯世锦赛,中国队的队员们全都做到了最好,一项一项的金牌入账。具体来说,此次共有17位选手出征匈牙利,仅有一人参赛未能获得金牌,就是参加男子1米跳板比赛的18岁湖北选手郑九源,他获得了第八名。

E | 此前,团队曾排除了 C++ 异常展开的原因,因为他们认为自己找到了反例:在未使用异常的代码路径中发生了崩溃。另外有一位选手随队去了布达佩斯,但在临阵之前被换下,她就是原本报名参加男女混合团体比赛的东京奥运会女双10米台金牌得主、北京的张家齐。除去这两位运动员有些遗憾之外,中国队有多达15人夺得了奖牌还都拿到了金牌,其中王宗源和全红婵一人夺得三块奖牌,陈芋汐、陈艺文、曹缘、杨昊、昌雅妮各自获得了两枚奖牌。

F | 这种参赛人数和夺得金牌、奖牌的比率,在世界单项体育锦标赛历史上,恐怕也是第一次出现,中国跳水队,现在已经到达全盛时期。但这些反例全都来自有硬件损坏的故障集群。奥运项目 女子项目强过男子项目 从8个奥运项目来看,总体而言是女子项目强过男子项目,女子项目中又是跳台项目稳过跳板项目。女子10米台、女子3米板,这次四个项目都是以中国选手的完美表现,大幅分差优势夺金而结束的。

G | 一旦剔除了这些干扰因素,剩余的所有崩溃便都是发生在异常展开过程中了。而以往女板稳于女台的情况此次在世锦赛上稍有改变,一是因为女板中国队以两名没有参加过奥运会的“新手”出战,还要给裁判重新树立印象分。         问题发生的根本原因是 GNU libunwind 的 _Ux86_64_setcontext 函数中有一个已经存在 18 年的竞争条件。

H | 女台的全红婵和陈芋汐则在去年东京奥运会上就已经一战成名,并且两人的水平实在是高出其他国家选手一大块,得分呈断崖式分布,所以她俩连带中国队的女台水准已经到了鹤立鸡群、无懈可击的地步,预计巴黎周期内中国女子跳台成绩将会“一览众山小”。女子跳板单人这次是继2008年北京奥运会14年以来,首次在世界顶级大赛上出现银牌丢失的情况,还是要警惕一下。美中不足 男子跳板、跳台尚未“高枕无忧” 如果在包揽了全部金牌后还要分析美中不足的话,那就是男子跳板、男子跳台的四个项目中有些赢得很惊险,尚没有到高枕无忧的地步,还是有部分国外选手对中国运动员构成了一定的威胁。在 C++ 异常展开过程中,libunwind 会在栈上合成一个 ucontext_t 结构体,填充所需的寄存器状态,然后调用 _Ux86_64_setcontext 将控制权转移给清理处理程序。问题在于:_Ux86_64_setcontext 在从旧结构体中读取指令指针的操作尚未完成之前,就将栈指针(%rsp)更新为指向新的栈帧。

I | 一旦 %rsp 发生变化,该结构体便不再属于活动栈的一部分,也不再受内核红区的保护。男子双人3米跳板决赛中国队赢得最为惊险,分差为个位数,最后一跳才分出了胜负。如果信号恰好在 %rsp 更新与 %rip 读取之间的这一时间窗口内到达,内核就会在该结构体之上构建其信号帧,指令指针遭到破坏,函数便会跳转到 NULL 或垃圾地址。         竞争窗口的宽度正好为一条指令。男子10米跳台决赛,杨健依靠大难度动作也是后来居上才拿到了金牌,杨昊夺得铜牌,两人中间居然被15岁的日本小选手玉井陆斗楔入拿下银牌,这些都是值得警惕的情况。中国队史无前例地包揽所有13枚跳水金牌,创造历史。

J | 以现代处理器的时钟频率计算,这大约相当于 100 皮秒。虽然这对跳水运动在全球的推广不是一件好事,但足以证明中国跳水梦之队的实力——在新老交替之后,能够交出如此辉煌的答卷。文/本报记者 刘艾林 统筹/王咏

。在大多数程序中,这种情况根本不会被触发。OpenAI 的 Rockset 使用了 timer_create 函数,每隔几毫秒的 CPU 时间就发送一次 SIGUSR2 信号,为的是实现轻量级的按查询记账,这样产生的信号发送事件远多于传统的应用程序。

K | 正是这种高频的信号发送,将只在理论上可能发生的竞争状况转化成了实际生产环境中的崩溃。         该团队将一个修复方案和一个自包含的重现示例提交到了 GNU libunwind,并通过验证证实,其他展开器(如 libgcc)不存在这个问题。该修复方案通过重新排序指令,确保在更新 %rsp 之前先读取 %rip,从而彻底消除了这个时间窗口。         该团队对这一教训的总结值得全文引用:          最重要的步骤并非巧妙地解读汇编代码,也不是对细节的深入了解,而是构建一个高质量的数据集。如果没有这个数据集,我们就会把两种截然不同的现象混为一谈,并试图通过推理来理清这种混乱。一旦获得了准确且完整的全量数据,问题的结构便显而易见了。         如果你的团队正在排查难以解释的生产环境崩溃问题,请检查你们是否将多个 Bug 混为一谈。那些看似与所有假设都不相符的症状,实际上可能并不矛盾;它们可能与两个不同的假设相符,而你却无意中将它们混淆了。

L | 洞察问题结构的最快途径,并非对单个案例进行更深入的分析,而是获取涵盖所有故障案例的完整、带标签的数据。         这篇完整的工程技术博文包含了详细的栈内存示意图、存在漏洞的汇编指令,以及揭示出两种不同类型故障的崩溃率可视化图表。

M |          https://www.infoq.com/news/2026/07/openai-libunwind-core-dumps/          声明:本文由 InfoQ 翻译,未经许可禁止转载。

Current article:http://l1z.guizhuanguchuanluanzhoudi.shop/news/20260826_116.html

Published on:21:28:23