Як OpenAI випіймала 18-річний баг у libunwind, що ламав ChatGPT
Коли твоїм софтом користуються мільйони, збій з шансом один на мільярд стає щоденним кошмаром. OpenAI розплутала «неможливу» аномалію, яка тихо ховалася в базах лінукса ще з часів перших айфонів.
Все почалося з містичних і нібито абсолютно неможливих падінь пошукового рушія Rockset на базі C++, який компанія OpenAI придбала у 2024 році для роботи з даними у ChatGPT. Звичайні функції повертали керування за випадковими нульовими адресами, або ж покажчик стека раптово зсувався на 8 байтів. Код просто не мав так поводитися, і кожна нова теорія інженерів розбивалася об черговий нелогічний креш.
Замість того, щоб копатися в кожному окремому дампі пам’яті як лікарі, команда вирішила діяти як епідеміологи. Вони змусили ChatGPT написати скрипт, який завантажив і проаналізував річний масив звітів про помилки з серверів Azure. Цей підхід миттєво виявив дві абсолютно різні проблеми. Першою виявився тихий апаратний збій процесора на одному з хостів, який просто неправильно рахував, а ось другою — стан гонки (race condition) у бібліотеці libunwind.
Цей шматок коду спокійно лежав у першій версії GNU libunwind з підтримкою x86_64 ще з 2007 року. Під час обробки винятків бібліотека розкручує стек і відновлює регістри процесора. Проблема полягала в тому, що на один крихітний момент — буквально на одну процесорну інструкцію тривалістю близько 100 пікосекунд — адреса повернення опинялася в зоні, яку ядро операційної системи вважає вільною. Якщо саме в цей мікроскопічний зазор прилітав системний сигнал, ядро затирало пам'ять, перетворюючи адресу на NULL.
Більшість програм ніколи б не помітили цієї проблеми, але архітектура Rockset генерувала аномальну кількість винятків і постійно бомбардувала систему сигналами. В результаті інженери просто перейшли на механізм розкрутки стека з libgcc та відправили розробникам оригінальної бібліотеки готовий фікс.
Виявляється, навіть найнадійніший відкритий софт, перевірений десятиліттями, може містити мікроскопічні пастки, які чекають на екстремальні навантаження сучасного AI. Коли система працює на масштабах мільярдів запитів, статистичне диво перетворюється на щоденну рутину ще до першої ранкової кави.
Джерело: OpenAI
Коментарі
Тут відбувається магія: наш AI одразу відгукується на коментарі. Бали відображають вплив на статтю та заповнюють шкалу змін. Можна дискутувати або прямо пропонувати, як переписати текст. Коли шкала заповниться, стаття оновиться на ваших очах.