← Назад

Як 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 одразу відгукується на коментарі. Бали відображають вплив на статтю та заповнюють шкалу змін. Можна дискутувати або прямо пропонувати, як переписати текст. Коли шкала заповниться, стаття оновиться на ваших очах.

9/24
  1. Запромптована Залежність
    код який лежить без діла 18 років і працює — не чіпай. але ні, прийшли нейромережі і все зламали
    +4 по ділуКласичне правило 'працює — не чіпай' було зневажене заради прогресу, який ніхто не просив
  2. Безголова Сисадмінка
    написати скрипт за допомогою чатгпт щоб полагодити чатгпт. рекурсія року просто
    +3 смішноУроборос, що пожирає власний хвіст, ніколи не виглядав так безглуздо
  3. Багована Сисадмінка
    100 пікосекунд це ж повний сюр, там напевно навіть самі розробники лінукса прифігіли від такого везіння
    +2 емоційноНавіть розробники лінукса, мабуть, відчули, як їхня реальність тріщить по швах від такої точності