Обновлено 3 июля 2026
Два бага под одной маской: OpenAI разобрала краши Rockset с помощью ChatGPT

В C++-сервисе Rockset, через который ChatGPT ищет данные при ответах, месяцами ловили «невозможные» падения: функция как будто возвращалась по нулевому адресу или со сбитым на 8 байт указателем стека. Команда OpenAI перешла от ручного разбора отдельных дампов к анализу всей популяции крашей за год — и нашла два несвязанных дефекта под одним симптомом.
Один дамп — тупик
Чаще всего сбой случался в DocumentTree::updateDocument. Гипотезы шли от бага в своём коде до ядра Linux — у каждой находились контрдоводы. Несколько дней команда копала один кейс: реконструировала стек по дампу, гоняла версии ChatGPT в переписке — картина всё равно не сходилась.
Весь архив вместо одного кейса
Текстовые логи не помогали: трассировки в них сами были битыми. ChatGPT написал скрипт, который скачивает начало каждого дампа из Azure Blob Storage, читает регистры и маркирует падение как return-to-null, misaligned-stack или другое. Скрипт прогнали параллельно по всем боевым дампам Rockset за прошлый год.
Паттерны всплыли сразу. Return-to-null размазан по кластерам и регионам. Misaligned-stack — только из одного региона, с чёткой датой старта и только на свежих нодах: один физический хост Azure с тихой порчей регистров, а не единый софтверный баг.
Два бага под одной маской
- Битый хост Azure. Цепочка misaligned-stack ушла на один физический сервер; после вывода из строя такие падения исчезли.
- 18-летняя гонка в GNU libunwind. Вторая популяция — return-to-null — оказалась гонкой в широко используемой библиотеке раскрутки стека.
Rockset собран с -fno-omit-frame-pointer и 128-байтовой red zone по AMD64 ABI — без этого читать хвост завершённых фреймов после сигнала было бы ещё сложнее. После инцидента в обработчик фатальных сигналов folly добавили состояние регистров, чтобы ловить похожие случаи уже по логам.
Источник: Core dump epidemiology: fixing an 18-year-old bug.