В прошлой статье мы подробно разобрали проблему «флипбитов» — непредсказуемого изменения битов в компьютерной памяти из-за проникновения высокоэнергетических частиц в чувствительные области компьютерных микросхем. В научной литературе и компьютерной документации данный феномен известен как «одиночные сбои» (single event upset, SEU).

Раньше считалось, что проблема характерна только для авионики и космонавтики. Но эксперименты доказали, что SEU неминуемо происходят даже на уровне океана (то есть под защитой атмосферы) в компьютерных системах с модулями оперативной памяти (RAM). Можно рассчитать вероятность такого повреждения: примерно 1 битфлип на 256 МБ оперативной памяти в месяц (см. также статистику аппаратных сбоев в одном миллионе пользовательских ПК).

Как мы уже говорили, столкновение космических частиц с атомами в земной атмосфере порождает каскад из нейтронов и протонов, которые, в свою очередь, взаимодействуют с земной электроникой.



Ещё одна причина SEU — альфа-частицы от радиоактивных примесей в корпусировке микросхем или присутствие иных источников излучения. В любом случае внешнее излучение — основной источник битфлипов в кремниевых чипах.

Если от альфа-излучения несложно защититься путём экранирования, то защита от нейтронов представляет более трудную задачу, потому что эффективных абсорбентов до сих пор не найдено. По некоторым расчётам, для полного экранирования от нейтронов толщина бетонной стены должна составлять примерно 6 м.


Эффект попадания нейтрона в интегральную схему, источник: Neutron and alpha particle single event upset (SEU) failures in SRAM technologies, технический отчёт, Actel Corporation, 2006

Исправление битфлипов


Самый очевидный способ борьбы с SEU — контроль ошибок.

В теории информации контроль ошибок — это методы, позволяющие надёжно передавать цифровые данные по ненадёжным каналам. В частности, одним из таких методов является корректирующий код или помехоустойчивый код (ECC, error correction code). Первый ECC изобретён математиком Ричардом Хэммингом в 1950 году.

Корректирующий код Хэмминга включает несколько бит, которые добавляются к исходному блоку. Существует огромное количество вариантов кодов Хэмминга, в зависимости от размера исходного блока и кодового слова.

Получение кодового слова выглядит следующим образом:



На вход декодера поступает семь бит, которые могут быть искажены в процессе передачи. Классический (7,4)-код Хэмминга обеспечивает исправление всех однобитных ошибок и обнаружение двухбитных (без исправления).

Для компьютерных систем больше подходит код с восьмибитными словами. При этом на практике размер добавочного кода в восьмибитных словах можно сократить до трёх бит.

В теории информации существует понятие расстояние Хэмминга (кодовое расстояние) — число позиций, по которым отличаются два слова. В качестве офтопика, по очень похожему принципу работает исправление ошибок в ДНК (такие ошибки случаются при делении клеток). Двойная спираль нужна для резервирования данных, но, начиная с некоторого расстояния Хэмминга, её образование становится невозможным. Коды коррекции и резервирование данных в программах живых организмов изучают биоинформатика и геномика.

Корректирующие коды давно используются в разных схемах кодирования. Например, в СССР на русский язык переводили учебник Питерсона и Уэлдона «Коды, исправляющие ошибки» (1976), а также учебник Блейхута «Теория и практика кодов, контролирующих ошибки» (1986).

Но в свете новых исследований SEU корректирующие коды решили снова реализовать в модулях компьютерной памяти. Почему «снова»? Потому что изначально бит чётности был реализован практически во всех персональных компьютерах, в том числе в оригинальных IBM PC начала 90-х. Но потом эту практику прекратили.

Сегодня коррекцию ошибок в памяти выполняют контроллеры памяти. Дополнительно — некоторые модули памяти оснащаются встроенной поддержкой ECC, независимо от контроллера. В данном случае контроль ошибок реализован с помощью одной дополнительной (избыточной) микросхемы памяти на каждые восемь рабочих микросхем.



Сейчас ECC DRAM часто встречается в серверах, но редкий гость в настольных компьютерах или других вычислительных устройствах. Этот печальный факт огорчает даже Линуса Торвальдса, то есть речь не о маркетинговом хайпе, а о реально важной технической фиче с точки зрения надёжности систем.

Вообще, память с поддержкой ECC (включая флэш) может использовать одну из нескольких реализаций корректирующего кода:

  • Самый простой код Хэмминга используется в чипах флэш-памяти SLC NAND.


    Хранение кода Хэмминга в чипе NAND, источник
  • В более современных и менее надёжных чипах MLC NAND используются более сложные коды для детектирования и исправления многобитных ошибок: например, коды Бозе — Чёдхури — Хокуингхема (BCH, они же БЧХ-коды) или коды Рида — Соломона, как во многих технологиях типа CD, DVD, QR-кодов и др. В то же время память NOR Flash обычно не использует никакой коррекции ошибок.
  • В модулях оперативной памяти DRAM обычно используются коды SECDED (single error correction, double error detection). Как понятно из названия, они позволяют обнаружить и исправить однобитные ошибки и обнаружить двухбитные, как и классический код Хэмминга.

    Интересно, что тут присутствует некоторый компромисс. Дело в том, что если декодеру не требуется исправлять ошибки, то он может надёжно обнаруживать даже трёхбитные ошибки. Но если он занимается исправлением, то некоторые тройные ошибки будут приняты за одинарные и «исправлены» на неверное значение.

    Для исправления двухбитных ошибок можно применять одновременно несколько кодов SECDED или схему DEC-TED с оверхедом минимум 13% вместо 7%.

    Table 1: ECC storage array overheads
    SEC-DED SNC-DND DEC-TED
    Data bits check overhead check overhead check overhead
    16 6 38% 10 75% 11 69%
    32 7 22% 12 38% 13 41%
    64 8 13% 14 22% 15 23%
    128 9 7% 16 13% 17 13%
    В микросхемах оперативной памяти особенно популярен (72,64)-код Хэмминга — усечённый вариант (127,120)-кода. Как видно из количества битов, он занимает столько же места, сколько и (9,8)-код чётности.

Проблема лишь в том, что далеко не вся оперативная память в компьютере поддерживает корректирующие коды (ECC). Да, такие модули памяти часто используются в серверах, но в любом ЦОД найдётся множество других устройств с оперативной памятью без ECC: сетевые устройства, GPU, чипсеты материнских плат, кэши процессоров и т. д.

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

Среднее количество ошибок


Битфлипы в микросхемах памяти приводят к ошибкам четырёх типов:

  1. незаметная ошибка, которая допускается системой;
  2. исправляемые ошибки, которые обнаруживаются и успешно исправляются;
  3. обнаруженные неисправимые ошибки (DUE);
  4. тихое повреждение данных (SDC), т.е. необнаруженная ошибка, которая повредила данные.

Очевидно, самые опасные ошибки — это DUE и SDC. Ошибки DUE приводят к сбоям, а SDC — к потере данных.

По оценке ITRS (International Technology Roadmap for Semiconductors), для типичного сервера рекомендуется ориентироваться на такие показатели надёжности:

Тип ошибки Время между сбоями (ориентир)
SDC 1000 лет (114 FIT)
DUE для системного сбоя 25 лет
DUE для сбоя приложения 10 лет
1 FIT (Failure In Time) = 1 сбой в 10^9 часов

Соответственно, система проектируется исходя из требуемой надёжности.

Согласно исследованиям, количество флипбитов в обычной оперативной памяти SRAM легко достигает 1000 FIT на 1 Мбит, что значительно превышает допустимые показатели.

Физическая защита серверов


В современных серверах для защиты от SEU используются традиционные методы контроля ошибок, включая коды ECC и EDEC, биты чётности и резервирование, в том числе RAID.

В качестве дополнительного метода защиты можно оценить расположение микросхем относительно земной поверхности. Например, такой метод предлагают авторы научной статьи Soft Error Considerations for Computer Web Servers (doi: 10.1109/SSST.2010.5442820), инженеры из компании Juniper Networks и Обернского университета (США). Статья опубликована в сборнике 42nd South Eastern Symposium on System Theory в далёком 2010 году.


Горизонтальный и вертикальный дизайн серверных модулей

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



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

Есть опасение, что по мере дальнейшего увеличения плотности DRAM, уменьшения размеров компонентов и снижения рабочих напряжений чипы будут чаще подвергаться битфлипам. Это логично, поскольку тогда частицы меньшей энергии смогут изменить состояние ячейки памяти. С другой стороны, меньшие ячейки уменьшают мишень, а переход на новые технологии вроде КНИ (кремний на изоляторе) может сделать ячейки менее восприимчивыми к SEU. Так что опасения могут быть необоснованны.

В любом случае дублирование систем для избыточной надёжности никогда не помешает.


НЛО прилетело и оставило здесь промокод для читателей нашего блога:

15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.

Комментарии (11)


  1. 13werwolf13
    04.07.2022 11:18

    ну ок, с оперативкой поняли. но есть же проблема такого же повреждения данных на накопителях (hdd/ssd/). на эту тему будет написано?


    1. event1
      04.07.2022 17:27

      в SSD используется NAND который всегда уже с ECC. Иначе он без всяких космических частиц протухнет


      1. 13werwolf13
        04.07.2022 18:08

        А hdd?..


  1. GospodinKolhoznik
    04.07.2022 12:43
    +2

    Для полного экранирования от нейтронов толщина бетонной стены должна составлять примерно 6 м

    Т.е. если сервер стоит в высотном здании, и над ним есть 15-20 этажей, то космическое излучение ему не грозит.


    1. doctorw
      04.07.2022 13:57
      +1

      Прилететь ведь может и под углом, не обязательно строго с крыши, верно?


      1. GospodinKolhoznik
        04.07.2022 14:33
        +1

        Хорошо, что у нас высотки ставят вплотную одна к одной, когда из окна видно не небо, а стену соседней высотки. Чтобы никакой нейтрон не просочился.


        1. doctorw
          04.07.2022 16:03

          Даже расстояние в 1м между многоэтажками будет достаточным, для пролёта частиц под углом между ними. Вопрос только в том, как много будет таких частиц.


      1. Obormottt
        05.07.2022 08:30
        +1

        под углом толщина атмосферы резко возрастает.

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

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

        так что если даже расположение плат с чипами вертикально ( я так понимаю под открытым небом) значительно снижает количество ошибок, то реально бояться нужно только окон с видом на небо прямо из серверной.


    1. kovserg
      04.07.2022 18:32

      От нейтронов лучше полиэтиленом экранировать.


  1. Ufo28
    04.07.2022 14:27

    Интересно, на сколько корпус ПК и радиаторы охлаждения на память снижают ошибки


  1. juffinhalli
    05.07.2022 11:26

    Тема ECC в современной RAM не раскрыта — www.reddit.com/r/hardware/comments/mc8j2c/what_is_the_difference_between_ddr5_ecc_and_real