Bingdada テックブログBingdada テックブログ
ホームブログSEOGEOAIツール私たちについて
ログイン登録
Logo

Bingdada テックブログ

SEO、GEO、そして未来のAIトレンドに焦点を当てたテックブログ。

クイックリンク

  • ホーム
  • ブログ記事
  • 私たちについて

お問い合わせ

  • 398848662@qq.com

最新の SEO・GEO 情報をお届けするニュースレターを購読してください。

© 2024 Bingdada 技术博客. All rights reserved.

この記事は簡体字中国語です。日本語 にワンクリックで翻訳できます。
ホームブログAI人工智能核心转储流行病学:修复一个18年历史的Bug
核心转储流行病学:修复一个18年历史的Bug
AI人工智能

核心转储流行病学:修复一个18年历史的Bug

bingdadabingdada
8月 2, 20262 回の閲覧約 6 分で読めます
目次

目次

  • 核心转储流行病学:修复一个18年历史的Bug
  • 使用群体分析调试数据基础设施中的棘手崩溃问题
  • 首次调试尝试:仔细检查几个核心转储
  • 来自堆栈的线索

核心转储流行病学:修复一个18年历史的Bug

使用群体分析调试数据基础设施中的棘手崩溃问题

OpenAI的模型和代理越来越依赖可扩展的数据基础设施,以便在推理时(即模型思考你的问题时)搜索相关数据。其中一些服务是用C++编写的,C++对系统的底层控制使我们能够最大化性能并最小化内存使用。随着规模扩大,这些效率优势变得至关重要,但C++缺乏内存安全性意味着bug可能通过写入错误或不存在的内存地址导致崩溃。

几个月前,我们观察到Rockset服务出现了一些崩溃。Rockset是ChatGPT数据基础设施中的一个定制部分,对许多数据插件和搜索对话历史至关重要。在每次崩溃中,一个正常的C++函数似乎执行完毕后返回了一个虚假地址,导致内核停止程序,因为指令指针不再指向代码。有时栈帧中的返回地址槽为NULL。有时栈指针CPU寄存器本身似乎偏移了8字节,就好像%rsp在正常执行过程中被错误地减少了。在这两种情况下,崩溃都发生在返回时。

这些不是应用程序代码的正常故障模式。只落在保存的返回地址上的随机写入是可能的,但极不可能。一个不涉及内联汇编、setcontext或longjmp(我们都不使用)的bug将%rsp错位8字节更加奇怪,因为编译后的代码只在函数序言和尾声直接调整该寄存器。我们(或ChatGPT)能想到的每个假设都有强有力的证据反对它,所以这个bug似乎不可能存在。

我们最初认为的一个问题最终被证明是两个不相关的bug,巧合的是同时被发现。首先,一个Azure主机上的静默硬件损坏,CPU无法正确进行数学运算。其次,GNU libunwind中一个18年的竞态条件,这是一个广泛使用的开源库中未被注意的bug。

这篇文章讲述了我们如何通过像流行病学家一样思考并构建关于整个崩溃群体的高质量数据集,来识别和修复看似无法解释的崩溃。

首次调试尝试:仔细检查几个核心转储

首先,让我们深入了解Rockset。它是一个用于搜索和实时分析的云原生数据系统,我们在OpenAI内部用于许多用例,比如同步连接器(Rockset于2024年被OpenAI收购)。流式更新用于维护工作区知识库的最新索引,以便ChatGPT在回答问题或执行操作时可以搜索相关信息。

Rockset的执行层是用C++编写的。C++语言提供了对CPU的低级访问,这对性能和效率有好处,但也意味着应用程序bug可能导致无效内存访问和段错误。为了帮助追踪这些问题,我们使用folly的致命信号处理程序在崩溃发生时记录堆栈跟踪,并将相应的核心转储(程序崩溃时状态快照)上传到Azure blob存储以供后续分析。Rockset的所有查询处理副本都是复制的,这最小化了崩溃对客户端的影响。然而,每个段错误对应一个需要修复的bug,以满足我们的可靠性和质量目标。

我们最初的方法是将这些核心转储视为传统调试问题:非常仔细地检查几个核心转储,形成假设,并逐一排除。

大多数崩溃发生在名为DocumentTree::updateDocument的方法中。在这些崩溃中,似乎updateDocument调用了某个未知函数X,当X活动时堆栈被损坏,然后X返回了一个不是可执行代码的地址。在某些情况下,X刚刚弹出的帧看起来有效,只是其保存的返回地址为NULL。在其他情况下,栈指针本身看起来错误,但下一个有效帧似乎仍然是updateDocument。

我们不知道堆栈何时被损坏,这留下了巨大的搜索空间。updateDocument是一个大型方法,经过大量内联,所以X的候选数量是压倒性的。

这是我们的C++代码中的bug吗?编译器或链接问题?我们的运行时库之一有问题?Linux内核关于信号传递或上下文切换的bug?还是更罕见的情况?如果是随机写入,为什么我们的ASAN暂存环境没有捕获到?

我们尝试使用应用程序级日志来识别所有问题发生的情况,但堆栈损坏的bug仅从日志中很难分类,因为记录的堆栈跟踪本身被损坏或丢失。我们无法构建一个既没有误报也没有漏报的日志查询。我们手动检查了更多核心转储,发现了一些额外示例,但这个过程过于劳动密集,无法给我们一个可信的数据集。

在调查的这个阶段,我们(错误地)排除了硬件bug,因为我们在多个区域和多种硬件类型上看到了崩溃,所以我们仍在寻找仅软件的原因。有几天,我们深入研究了单个%rsp错位的崩溃,使用堆栈和寄存器内容重建崩溃前的历史。这产生了一些可能的线索,但因为我们在最初结论上坚持认为所有bug都有相同原因,这并没有让我们摆脱困境。

来自堆栈的线索

在谈到调查的转折点之前,重要的是解释我们从核心文件中提取了哪些信息。

Rockset使用-fno-omit-frame-pointer编译,因此活动栈帧始终可以通过%rbp访问,调用者形成帧指针的链表。

在Linux x86_64上,AMD64 System V ABI

目次

  • 核心转储流行病学:修复一个18年历史的Bug
  • 使用群体分析调试数据基础设施中的棘手崩溃问题
  • 首次调试尝试:仔细检查几个核心转储
  • 来自堆栈的线索
プレミアム広告枠 · 期間限定
広告募集中

ブランドを読者のフィードに

記事内広告枠は高い注意を集める場面で、新商品発表やイベント募集に最適です。

ビジネス相談

タグ

#OpenAI News#Rockset#Bug修复#核心转储#群体分析#C++调试#数据基础设施
bingdada

bingdada

SEO & GEO 技术探索者,专注于搜索引擎优化和生成式引擎优化。

関連記事

OpenAI如何用AI提升销售效率与客户成功
AI人工智能

OpenAI如何用AI提升销售效率与客户成功

OpenAI销售团队规模一年增长三倍,通过构建GTM Assistant智能助手,将顶尖销售经验系统化,实现销售生产力提升20%,让销售代表每周多出一天时间专注于客户关系。

8月 4約 5 分で読めます
OpenAI 正式发布 Sora:负责任地开启 AI 视频生成新时代
AI人工智能

OpenAI 正式发布 Sora:负责任地开启 AI 视频生成新时代

OpenAI 正式发布 AI 视频生成模型 Sora,通过水印溯源、肖像权控制、青少年保护、内容过滤等多维安全策略,在推动视频创作创新的同时,构建了负责任的 AI 应用框架。

8月 4約 6 分で読めます
Sora 2 正式发布:AI视频生成迎来GPT-3.5时刻
AI人工智能

Sora 2 正式发布:AI视频生成迎来GPT-3.5时刻

OpenAI 发布 Sora 2,视频生成模型迎来 GPT-3.5 时刻。新模型在物理准确性、可控性上大幅提升,支持同步音效和对话,并推出基于‘角色’功能的社交 iOS 应用。

8月 4約 5 分で読めます

ニュースレターを購読

最新の SEO・GEO 情報をお届けします。

プライバシーを尊重します。いつでも購読を解除できます。

コメント ({count}) (0)

ログインしてディスカッションに参加

ログイン登録
まだコメントがありません、最初の一言を