Каждую секунду сквозь любой компьютер проходят частицы, родившиеся далеко за пределами атмосферы. Первичные космические лучи - протоны и ядра атомов, разогнанные сверхновыми и магнитарами - врезаются в верхние слои атмосферы и порождают каскады вторичных частиц, среди которых особенно опасны нейтроны. Нейтрон не несёт электрического заряда, экранировать его внутри чипа невозможно, а при столкновении с ядром кремния он отдаёт энергию и создаёт вдоль трека осколков облако электронно-дырочных пар. Если этот заряд оказывается рядом с чувствительным узлом ячейки памяти, ёмкость перезаряжается, и хранимый бит меняет значение. Второй источник находится ближе: микропримеси урана и тория в упаковке кристалла испускают альфа-частицы, которые ионизируют кремний непосредственно внутри корпуса. Результат в обоих случаях одинаков - мягкая ошибка, soft error: транзистор не повреждён, сбой не повторится при перезаписи, но данные уже искажены. Такие события редки, измеримы, предсказуемы статистически, и индустрия давно научилась с ними жить: от ECC-памяти в серверах до тройного резервирования логики в спутниках.

Физика ионизирующего удара и инжекции заряда в кремний

Ячейка DRAM - это конденсатор, где единица и ноль различаются зарядом порядка десятков фемтокулонов. SRAM-ячейка держит состояние на двух инверторах в защёлке, но у неё тоже есть критический заряд Qcrit - минимальный заряд, которого хватит, чтобы опрокинуть узел. Когда вторичный осколок ядра после нейтронного удара или альфа-частица из примеси пролетает через кремний, вдоль трека возникает линейка свободных носителей. Электрическое поле обеднённой области собирает их на узле, и если собранный заряд превышает Qcrit, состояние ячейки переворачивается. Процесс занимает пикосекунды и не оставляет структурных повреждений: это не пробой оксидов и не защёлкивание, а чисто информационный сбой. Критический заряд падает с уменьшением топологических норм, и именно поэтому миниатюризация с одной стороны снижает заряд на ячейку, а с другой - делает ячейку столь маленькой, что вероятность попадания частицы в конкретную ячейку тоже уменьшается; на практике эти два фактора частично компенсируют друг друга, и частота мягких ошибок на гигабайт остаётся на удивление стабильной величиной на протяжении поколений техпроцессов.

Частоты событий от серверной комнаты до околоземной орбиты

Эмпирическая оценка на уровне моря - порядка одного битового переворота на гигабайт памяти за несколько месяцев непрерывной работы, а в агрегированных измерениях на больших парках машин величины укладываются в диапазон от десятков до сотен FIT на гигабайт, где один FIT - это один отказ за миллиард часов. Высота меняет всё радикально: атмосфера - главный щит, и на крейсерской высоте авиалайнера около десяти километров поток атмосферных нейтронов превышает морской примерно в сто-триста раз. Авиационная электроника проектируется с учётом этого фактора, и бортовые вычислители традиционно получают защищённые коды и дублирование. Ещё выше, на высотах спутниковых орбит, вторичные нейтроны уступают место прямой бомбардировке первичными протонами и тяжёлыми ионами, и там одного кода коррекции ошибок уже недостаточно - требуется архитектурное резервирование. Полярные области и периоды солнечной активности дополнительно сдвигают потоки, поэтому карты радиационной обстановки - обычный инженерный документ для космических программ. Большое исследование на парке серверов Google показало, что мягкие ошибки DRAM - не экзотика, а регулярно регистрируемое событие: значимая доля машин за год фиксирует хотя бы одну исправленную ошибку, а небольшая доля модулей даёт заметную часть всех событий, что указывает и на роль качества конкретных кристаллов.

Знаменитые случаи от избирательной машины до спидранов

Самый наглядный документированный эпизод произошёл в Бельгии на выборах 2003 года. Счётная система в коммунах Схарбек и Брюссель выдала одному из кандидатов ровно 4096 лишних голоса - число, которое любой инженер мгновенно читает как 2 в степени 12. Внутренний журнал машины хранил подсчёт в двоичном виде, и переворот одного бита в разряде двенадцатой степени прибавил кандидату ровно один бит голосов. Расхождение заметили, потому что арифметика отказалась сходиться, пересчёт подтвердил однобитовую аномалию, и объяснение через космическую частицу стало каноническим примером мягкой ошибки вне дата-центров. Второй ареал историй - любительские спидраны: в сообществе игроков в Super Mario 64 периодически обсуждают так называемые битогличи, когда переменная, например вертикальная координата персонажа, внезапно меняется ровно на степень двойки, что подозрительно похоже на переворот одного бита. Хотя коммерческие приставки давно имеют бюджетную защиту памяти, а часть случаев объясняется программными причинами, сама дискуссия показательна: событие настолько реальное, что у него появился фольклор. На серьёзной стороне шкалы - телекоммуникационные коммутаторы, банковские мэйнфреймы и аэрокосмические приборы, где журналы коррекции ECC регулярно фиксируют тысячи исправленных битфлипов, которые пользователи никогда не замечают.

Арсенал защиты от SECDED до тройного резервирования

Индустрия отвечает слоями защиты. Рассмотрим основные механизмы по порядку нарастания сложности.

  1. ECC-память класса SECDED - исправление одиночной ошибки и обнаружение двойной в каждом слове за счёт дополнительных бит Хэмминга; это штатная опция серверных платформ.
  2. Chipkill и аналогичные схемы с символьными кодами - переживают отказ целого чипа в линейке, распределяя данные и синдромы по разным кристаллам.
  3. ECC и четность внутри процессора - регистры, кэши всех уровней и очереди серверных кристаллов защищены, потому что битфлип в кэше опаснее битфлипа в памяти: он попадёт во множество последующих вычислений.
  4. Memory scrubbing - фоновый обход памяти с перезаписью, который исправляет одиночные ошибки до того, как в ту же строку ударит вторая частица и ошибка станет некорректируемой.
  5. Triple modular redundancy - три экземпляра логики и голосование большинством в космических приборах, где одиночное событие не должно влиять на результат вообще.

Поверх аппаратных средств работают программные: контрольные суммы страниц, избыточные транзакции, периодическая верификация состояния. Визитная карточка хорошей архитектуры - не отсутствие ошибок, а то, что каждая ошибка обнаруживается в предсказуемом месте и гасится до пользователя.

Домашний компьютер и математика редкого события

Для настольной машины с 16 гигабайтами памяти оценка уровня моря даёт примерно один битфлип за несколько лет непрерывной работы, если принять базовую частоту около одного события на гигабайт в несколько месяцев. Это окно подверженности настолько узкое, что при практически любом сбое домашнего ПК вероятность программной ошибки, перегрева, севшего блока питания или битой строки памяти на порядки выше вероятности космической частицы. К тому же даже свершившийся битфлип чаще всего безвреден: большая часть памяти занята пикселями текстур, аудиосэмплами и уже ненужными структурами, и попадание в действительно исполняемый указатель или счётчик - событие внутри события. Именно поэтому розничные платформы без ECC остаются разумным решением: цена риска - редкий необъяснимый краш раз в годы, который всё равно случился бы по программной причине. Однако это рассуждение принципиально меняется там, где масштаб другой: в дата-центре с миллионом гигабайт суммарная частота умножается, и события перестают быть экзотикой - они происходят постоянно, и отсутствие ECC превращается из локальной экономии в систематический источник тихих повреждений данных.

Как измеряют невидимое событие и кто записывает чеки

Доказать, что конкретный сбой вызван именно частицей, напрямую почти никогда нельзя - частица не оставляет визитки. Зато можно измерить статистику. Первые прямые эксперименты были незамысловатыми и элегантными: массив SRAM, память с известной чувствительностью, помещают в разные среды - на уровень моря, в шахту под слоем породы, на вершину горы - и считают частоту ошибок. Результат читается однозначно: под землёй частота падает в разы, на высоте растёт, а при имитации нейтронного потока на ускорителе кривая совпадает с полевыми наблюдениями, что и закрепило роль вторичных нейтронов атмосферного каскада. Из тех же кривых выводят FIT-рейтинг - число отказов на миллиард часов работы на мегабит, и этот рейтинг стоит прямо в даташитах качественной памяти.

На практике рулевым измерением служит регистрация исправлений. Сервер с ECC ведёт журнал single bit errors: процессор и контроллер памяти считают их автоматически, и системный администратор видит, как редкие единичные события маршируют по планкам. Когда поток исправляемых ошибок на одном модуле начинает превышать норму, модуль помечают под замену - задолго до того, как он откажет по-настоящему. Подобная телеметрия встроена и в машинный контроль исключений: Machine Check Architecture процессоров x86 фиксирует чихание железа в виде кодов, которые ещё можно прочитать после перезагрузки. Именно с ней и начинается объективный разбор любого "необъяснимого зависания" - инженер смотрит не на настроение, а в журналы.

Орбита, полёт и высокогорье как отдельный режим существования

Если на земле отказ радиационного происхождения редок, то за пределами нижней атмосферы он становится рутиной. Солнечные вспышки резко повышают фон заряженных частиц, пояс Ван Аллена приносит собственную картину, и аппарат глубокого космоса классически выезжает из положения тремя приёмами: избыточными вычислениями, когда три независимых компьютера голосуют по каждому решению, периодической перезаписью программной памяти из эталона и честными перезагрузками подконтрольных узлов без драматизации. Марсоходы и межпланетные зонды проектировались с расчётом, что единичный сбой не повод для штаба, а повод для протокола самодиагностики и отката на последний проверенный образ. Отсюда в земную инженерию приехала и привычка считать "красивые" тесты недостаточными: систему, которая не выдерживает солнечной вспышки, ещё надо специально агитировать повести себя плохо.

Поучительно, что геймерская культура наткнулась на ту же физику с другого конца: обсуждения скоростных прохождений игр выделяют целый класс аномалий, объясняемых теоретически битфлипом в консоли, - разница показаний одного счётчика ровно на степень двойки. Строго доказать происхождение невозможно, но когда аппаратура считает иначе, чем следовало бы из кода, а больше ничего не сломано, космос остаётся вполне рабочей гипотезой. Частица энергией в десятки мегаэлектронвольт не знает, что она помешала рекорду человечества - она просто выполнила свою работу в кремнии, как миллиарды лет до появления игр.

Бэкапы, контрольные суммы и тихая порча данных

Битфлип опасен не только в момент вычисления, но и через наследование: искажённый блок может быть добросовестно записан на диск и затем аккуратно скопирован во все резервные копии. Тогда бэкап перестаёт быть страховкой и становится репликатором ошибки. Отсюда следует главный вывод для инфраструктур хранения - любой архив должен сопровождаться независимо вычисляемыми контрольными суммами, а не только временными метками. Файловые системы со сквозной верификацией, прежде всего ZFS, вычисляют хэши блоков при записи и сверяют их при чтении, а периодический scrub проходит по всему пулу и чинит повреждённые блоки из избыточных копий до того, как ошибка накопится. Тот же принцип применим и к простым архивам: манифест SHA-256 по всем файлам и его сверка раз в квартал позволяют отличить живой архив от медленно портящегося. Ещё один практический инструмент - краш-корреляция: если один и тот же бинарник падает на разных машинах в одной точке, это почти наверняка дефект кода, а если одна и та же машина падает в случайных точках разных программ при исправном блоке питания и нормальных температурах, подозрение смещается к памяти, и журналы ECC либо результаты memtest становятся следующим шагом. Таким образом радиация из космоса, непрерывный и неизбежный фон, превращается в инженерную величину: она измеряется, закладывается в бюджет надёжности и гасится слоем избыточности, который правильно спроектированная система несёт незаметно для пользователя - от серверной стойки до орбитального аппарата.