Память с кодом исправления ошибок ( память ECC ) - это тип хранилища компьютерных данных, в котором используется код исправления ошибок [a] (ECC) для обнаружения и исправления n-битного повреждения данных, которое происходит в памяти. Память ECC используется в большинстве компьютеров, где повреждение данных недопустимо ни при каких обстоятельствах, например, в приложениях промышленного управления, критически важных базах данных и кэше инфраструктурной памяти.
Как правило, память ECC поддерживает систему памяти, невосприимчивую к однобитовым ошибкам: данные, которые считываются из каждого слова , всегда совпадают с данными, которые были записаны в него, даже если один из фактически сохраненных битов был перевернут на неправильное состояние. Большая часть памяти без ECC не может обнаруживать ошибки, хотя некоторая память без ECC с поддержкой четности позволяет обнаруживать, но не исправлять.
Описание
Коды исправления ошибок защищают от необнаруженного повреждения данных памяти и используются в компьютерах, где такое повреждение недопустимо, например, в некоторых научных и финансовых вычислительных приложениях, или в базах данных и файловых серверах . ECC также снижает количество сбоев, которые особенно недопустимы в многопользовательских серверных приложениях и системах максимальной доступности.
Электрические или магнитные помехи внутри компьютерной системы могут вызвать спонтанное переключение одного бита динамической памяти с произвольным доступом (DRAM) в противоположное состояние. Первоначально предполагалось, что это в основном связано с альфа-частицами, испускаемыми загрязнителями в упаковочном материале чипа, но исследования показали, что большинство разовых мягких ошибок в чипах DRAM происходит в результате фонового излучения , в основном нейтронов от вторичных космических лучей. , которые могут изменять содержимое одной или нескольких ячеек памяти или мешать работе схемы, используемой для чтения или записи в них. [2] Следовательно, частота ошибок быстро увеличивается с увеличением высоты; например, по сравнению с уровнем моря скорость нейтронного потока в 3,5 раза выше на 1,5 км и в 300 раз выше на 10–12 км (крейсерская высота коммерческих самолетов). [3] В результате системы, работающие на больших высотах, требуют особого обеспечения надежности.
Например, космический корабль « Кассини-Гюйгенс» , запущенный в 1997 году, содержал два идентичных бортовых самописца, каждый с 2,5 гигабитами памяти в виде массивов коммерческих микросхем DRAM. Благодаря встроенной функциональности EDAC , инженерная телеметрия космического корабля сообщала о количестве (исправляемых) ошибок, связанных с одним битом на слово, и (не исправляемых) ошибок с двумя битами на слово. В течение первых 2,5 лет полета космический аппарат сообщал о почти постоянной частоте однобитовых ошибок, составляющей около 280 ошибок в день. Однако 6 ноября 1997 г., в течение первого месяца полета, количество ошибок увеличилось более чем в четыре раза за этот день. Это было приписано событию с солнечными частицами, которое было обнаружено спутником GOES 9 . [4]
Были некоторые опасения, что по мере дальнейшего увеличения плотности DRAM и, следовательно, уменьшения размеров компонентов на микросхемах, в то время как рабочие напряжения продолжают падать, микросхемы DRAM будут подвергаться воздействию такого излучения чаще, поскольку частицы с более низкой энергией могут для изменения состояния ячейки памяти. [3] С другой стороны, меньшие ячейки создают меньшие цели, и переход к таким технологиям, как SOI, может сделать отдельные ячейки менее восприимчивыми и, таким образом, противодействовать или даже обратить вспять эту тенденцию. Недавние исследования [5] показывают, что единичные сбои, вызванные космическим излучением, резко сокращаются в зависимости от геометрии процесса, и предыдущие опасения по поводу увеличения количества ошибок в битовых ячейках необоснованны.
Исследовать
Работа, опубликованная в период с 2007 по 2009 год, показала широко варьирующуюся частоту ошибок с разницей более чем на 7 порядков величины, в диапазоне от 10 −10 ошибок / бит · ч (примерно одна битовая ошибка в час на гигабайт памяти) до 10 −17 ошибок / бит · час. (примерно одна битовая ошибка на тысячелетие на гигабайт памяти). [5] [6] [7] На конференции SIGMETRICS / Performance '09 было представлено крупномасштабное исследование, основанное на очень большом количестве серверов Google . [6] Фактическая частота обнаруженных ошибок была на несколько порядков выше, чем в предыдущих мелкомасштабных или лабораторных исследованиях: от 25 000 (2,5 × 10 -11 ошибок / бит · ч) до 70 000 (7,0 · 10 -11 ошибок / бит). · Ч, или 1 битовая ошибка на гигабайт ОЗУ за 1,8 часа) ошибок на миллиард часов устройства на мегабит. Ежегодно более 8% модулей памяти DIMM подвергались ошибкам.
Последствия ошибки памяти зависят от системы. В системах без ECC ошибка может привести либо к сбою, либо к повреждению данных; на крупных производственных площадках ошибки памяти являются одной из наиболее частых аппаратных причин сбоев оборудования. [6] Ошибки памяти могут вызвать уязвимости системы безопасности. [6] Ошибка памяти не может иметь последствий, если она изменяет бит, который не вызывает наблюдаемых сбоев и не влияет на данные, используемые в расчетах или сохраняемые. Имитационное исследование 2010 года показало, что для веб-браузера только небольшая часть ошибок памяти вызвала повреждение данных, хотя, поскольку многие ошибки памяти являются прерывистыми и коррелированными, влияние ошибок памяти было больше, чем можно было бы ожидать от независимых программных ошибок. [8]
Некоторые тесты показывают, что изоляцию ячеек памяти DRAM можно обойти с помощью непреднамеренных побочных эффектов специально созданного доступа к соседним ячейкам. Таким образом, доступ к данным, хранящимся в DRAM, заставляет ячейки памяти терять свои заряды и электрически взаимодействовать в результате высокой плотности ячеек в современной памяти, изменяя содержимое соседних строк памяти, которые фактически не были адресованы в исходном доступе к памяти. Этот эффект известен как молоток строк , и он также использовался в некоторых эксплойтах компьютерной безопасности повышения привилегий . [9] [10]
Пример однобитовой ошибки, которая будет проигнорирована системой без проверки ошибок, остановит машину с проверкой четности или будет незаметно исправлена ECC: один бит застревает на 1 из-за неисправного чипа, или становится 1 из-за фона или космического излучения; загружается электронная таблица, хранящая числа в формате ASCII, и символ «8» (десятичное значение 56 в кодировке ASCII) сохраняется в байте, который содержит застрявший бит в его самой нижней битовой позиции; затем в электронную таблицу вносятся изменения, и она сохраняется. В результате цифра «8» (0011 100 0 двоичный код) незаметно превратилась в «9» (0011 100 1 ).
Решения
Для борьбы с нежелательными переворотами битов было разработано несколько подходов, в том числе программирование с учетом невосприимчивости , память с проверкой четности RAM и память ECC .
Эту проблему можно смягчить, используя модули DRAM, которые включают в себя дополнительные биты памяти, и контроллеры памяти, которые используют эти биты. Эти дополнительные биты используются для записи четности или для использования кода исправления ошибок (ECC). Четность позволяет обнаруживать все однобитовые ошибки (фактически, любое нечетное количество ошибочных битов). Наиболее распространенный код с исправлением ошибок, код Хэмминга с исправлением одиночных и двойных ошибок (SECDED) , позволяет исправлять однобитовые ошибки и (в обычной конфигурации с дополнительным битом четности) двухбитовые ошибки. быть обнаруженным. Chipkill ECC - более эффективная версия, которая также исправляет множественные битовые ошибки, включая потерю всего чипа памяти.
Реализации
Сеймур Крей, как известно, сказал, что « паритет для фермеров », когда его спросили, почему он не упомянул об этом в CDC 6600 . [11] Позже он включил паритет в CDC 7600 , что заставило ученых мужей заметить, что «очевидно, что многие фермеры покупают компьютеры». В исходном ПК IBM и на всех ПК до начала 1990-х годов использовалась проверка четности. [12] Более поздние по большей части этого не сделали.
Контроллер памяти с поддержкой ECC может обычно [a] обнаруживать и исправлять ошибки одного бита на слово [b] (единица передачи по шине ) и обнаруживать (но не исправлять) ошибки двух битов на слово. BIOS , в некоторых компьютерах, при сопоставлении с операционными системами , такими как некоторые версии Linux , BSD и Windows , ( Windows 2000 , а затем [13] ), позволяет подсчет обнаруженных и исправленных ошибок памяти, в частности , чтобы помочь определить неудачу модулей памяти перед проблема становится катастрофической.
Некоторые микросхемы DRAM включают «внутренние» схемы коррекции ошибок на кристалле, которые позволяют системам с контроллерами памяти без ECC по-прежнему получать большинство преимуществ памяти ECC. [14] [15] В некоторых системах подобный эффект может быть достигнут при использовании модулей памяти EOS .
Обнаружение и исправление ошибок зависит от ожидаемого типа возникающих ошибок. Неявно предполагается, что сбой каждого бита в слове памяти независим, что приводит к маловероятности двух одновременных ошибок. Раньше так было, когда микросхемы памяти имели ширину в один бит, что было типично для первой половины 1980-х годов; более поздние разработки переместили много битов в тот же чип. Эта слабость адресуется различных технологий, в том числе IBM 's ChipKill , Sun Microsystems ' Extended ECC , Hewlett Packard 's Chipspare и Intel ' ы Single Device Data Correction (SDDC).
Память DRAM может обеспечить повышенную защиту от программных ошибок , полагаясь на коды исправления ошибок. Такая память с исправлением ошибок , известная как память с ECC или EDAC , особенно желательна для приложений с высокой отказоустойчивостью, таких как серверы, а также для приложений дальнего космоса из-за повышенного излучения . Некоторые системы также « очищают » память, периодически считывая все адреса и записывая исправленные версии, если это необходимо для удаления программных ошибок.
Чередование позволяет распределить эффект одного космического луча, потенциально нарушая несколько физически соседних битов в нескольких словах, связывая соседние биты с разными словами. Пока единичное сбойное событие (SEU) не превышает пороговое значение ошибки (например, одиночная ошибка) в любом конкретном слове между доступами, оно может быть исправлено (например, с помощью однобитового кода исправления ошибок) и эффективно безошибочная система памяти может поддерживаться. [16]
Контроллеры памяти с исправлением ошибок традиционно используют коды Хэмминга , хотя некоторые используют тройную модульную избыточность (TMR). Последнее предпочтительнее, потому что его оборудование быстрее, чем у схемы исправления ошибок Хэмминга. [16] Космические спутниковые системы часто используют TMR, [17] [18] [19], хотя спутниковая RAM обычно использует коррекцию ошибок Хэмминга. [20]
Многие ранние реализации корректируемых ошибок памяти ECC маскируют, действуя «так, как будто» ошибки никогда не возникали, и сообщают только о неисправимых ошибках. Современные реализации регистрируют как исправимые ошибки (CE), так и неисправимые ошибки (UE). Некоторые люди заблаговременно заменяют модули памяти с высоким уровнем ошибок, чтобы снизить вероятность возникновения неисправимых ошибок. [21]
Многие системы памяти ECC используют «внешнюю» схему EDAC между процессором и памятью. Некоторые системы с памятью ECC используют как внутренние, так и внешние системы EDAC; внешняя система EDAC должна быть спроектирована так, чтобы исправлять определенные ошибки, которые внутренняя система EDAC не может исправить. [14] Современные настольные и серверные ЦП интегрируют схему EDAC в ЦП [22] еще до перехода к интегрированным в ЦП контроллерам памяти, которые связаны с архитектурой NUMA . Интеграция с ЦП обеспечивает безошибочную работу системы EDAC без штрафных санкций.
С 2009 года наиболее распространенные коды исправления ошибок используют коды Хэмминга или Сяо, которые обеспечивают исправление однобитовых ошибок и обнаружение двухбитовых ошибок (SEC-DED). Для защиты памяти были предложены другие коды с исправлением ошибок - коды с двухбитовой коррекцией ошибок и трехбитовые коды с обнаружением ошибок (DEC-TED), с коррекцией ошибок с одним полубайтом и коды с обнаружением ошибок с двумя полубайтами (SNC-DND), Reed– Коды исправления ошибок Соломона и т. Д. Однако на практике многобитовая коррекция обычно осуществляется путем перемежения нескольких кодов SEC-DED. [23] [24]
Ранние исследования пытались минимизировать накладные расходы на площадь и задержку в схемах ECC. Хэмминг впервые продемонстрировал, что коды SEC-DED возможны с одной конкретной проверочной матрицей. Сяо показал, что альтернативная матрица со столбцами с нечетным весом обеспечивает возможность SEC-DED с меньшей площадью аппаратного обеспечения и более короткой задержкой, чем традиционные коды SEC-DED Хэмминга. В более поздних исследованиях также делается попытка минимизировать мощность в дополнение к минимизации площади и задержки. [25] [26] [27]
Кэш
Многие процессоры используют коды исправления ошибок во встроенном кэше , включая процессоры Intel Itanium , Xeon , Core и Pentium (начиная с микроархитектуры P6 ) [28] [29] , AMD Athlon , Opteron , все Zen - [30] и Zen + основанное [31] процессоров ( EPYC , EPYC Embedded , Ryzen и Ryzen Threadripper ) и DEC Alpha 21264. [23] [32]
По состоянию на 2006 г.[Обновить], EDC / ECC и ECC / ECC - два наиболее распространенных метода защиты от ошибок кэш-памяти, используемые в коммерческих микропроцессорах. Метод EDC / ECC использует код обнаружения ошибок (EDC) в кэше уровня 1. При обнаружении ошибки данные восстанавливаются из кэша 2-го уровня, защищенного с помощью ECC. В методе ECC / ECC используется кэш уровня 1 с защитой ECC и кэш уровня 2 с защитой ECC. [33] Процессоры, использующие технологию EDC / ECC, всегда осуществляют запись через все ХРАНИЛИЩИ в кэш уровня 2, поэтому при обнаружении ошибки во время чтения из кэша данных уровня 1 копия этих данных может быть восстановлена из кэш 2-го уровня.
Зарегистрированная память
Зарегистрированная или буферизованная память - это не то же самое, что и ECC; технологии выполняют разные функции. Обычно память, используемая на серверах, регистрируется, чтобы позволить использовать многие модули памяти без электрических проблем, и ECC для целостности данных. Память, используемая в настольных компьютерах, не предназначена для экономии. Однако доступна небуферизованная (незарегистрированная) память ECC, [34] и некоторые несерверные материнские платы поддерживают функции ECC таких модулей при использовании с ЦП, поддерживающим ECC. [35] Зарегистрированная память не работает надежно на материнских платах без схемы буферизации, и наоборот.
Преимущества и недостатки
В конечном счете, существует компромисс между защитой от необычной потери данных и более высокой стоимостью.
Память ECC обычно имеет более высокую цену по сравнению с памятью без ECC из-за дополнительного оборудования, необходимого для производства модулей памяти ECC, а также из-за меньших объемов производства памяти ECC и связанного с ней системного оборудования. Материнские платы, чипсеты и процессоры, поддерживающие ECC, также могут быть более дорогими.
Поддержка ECC варьируется в зависимости от производителей материнских плат, поэтому память ECC может просто не распознаваться материнской платой, несовместимой с ECC. Большинство материнских плат и процессоров для менее важных приложений не поддерживают ECC, поэтому их цены могут быть ниже. Некоторые платы и процессоры с поддержкой ECC могут поддерживать небуферизованную (незарегистрированную) ECC, но также будут работать с памятью без ECC; микропрограмма системы включает функцию ECC, если установлена память ECC.
ECC может снизить производительность памяти примерно на 2–3 процента в некоторых системах, в зависимости от приложения и реализации, из-за дополнительного времени, необходимого контроллерам памяти ECC для выполнения проверки ошибок. [36] Однако современные системы интегрируют тестирование ECC в ЦП, не создавая дополнительной задержки при доступе к памяти до тех пор, пока не обнаруживаются ошибки. [22] [37] [38]
Память с поддержкой ECC может способствовать дополнительному энергопотреблению из-за схемы исправления ошибок.
Заметки
- ^ a b Большая часть памяти ECC использует код SECDED .
- ^ В то время как 72-битное слово с 64 битами данных и 8 битов проверки является обычным явлением, ECC также используется с меньшими и большими размерами.
Рекомендации
- ^ Вернер Фишер. "RAM выявлена" . admin-magazine.com . Проверено 20 октября 2014 года .
- ^ Расстройство События на уровне земли, Евгений Норманда, член IEEE, Boeing Defense & Space Group, Seattle, WA 98124-2499
- ^ a b « Обзор методов моделирования и повышения надежности вычислительных систем », IEEE TPDS, 2015
- ^ Гэри М. Свифт и Стивен М. Гертин. «Наблюдения в полете за многобитовой ошибкой в DRAM». Лаборатория реактивного движения
- ^ a b Borucki, «Сравнение ускоренных коэффициентов мягких ошибок DRAM, измеренных на уровне компонентов и систем», 46-й ежегодный международный симпозиум по физике надежности, Феникс, 2008 г., стр. 482–487
- ^ а б в г Шредер, Бьянка; Пинейро, Эдуардо; Вебер, Вольф-Дитрих (2009). Ошибки DRAM в дикой природе: крупномасштабное полевое исследование (PDF) . СИГМЕТРИКА / Производительность . ACM. ISBN 978-1-60558-511-6. Краткое содержание - ZDNet .
- ^ «Измерение программных ошибок памяти в производственных системах» . Архивировано из оригинала на 2017-02-14 . Проверено 27 июня 2011 .
- ^ Ли, Хуанг; Шен, Чу (2010). « » Реалистичная оценка аппаратных ошибок памяти и программное обеспечение система Восприимчивость». Usenix Ежегодной техническая конференция 2010" (PDF) .
- ^ Юнгу Ким; Росс Дейли; Джереми Ким; Крис Фоллин; Джи Хе Ли; Донхёк Ли; Крис Вилкерсон; Конрад Лай; Онур Мутлу (24.06.2014). «Перестановка битов в памяти без доступа к ним: экспериментальное исследование ошибок нарушения памяти DRAM» (PDF) . ece.cmu.edu . IEEE . Проверено 10 марта 2015 .
- ^ Дэн Гудин (10 марта 2015 г.). «Передовой хакерский подход дает статус суперпользователя, используя слабые места DRAM» . Ars Technica . Проверено 10 марта 2015 .
- ^ «CDC 6600» . Microsoft Research . Проверено 23 ноября 2011 .
- ^ «Проверка четности» . Pcguide.com. 2001-04-17 . Проверено 23 ноября 2011 .
- ^ ДОМАРС. «mca - драйверы для Windows» . docs.microsoft.com . Проверено 27 марта 2021 .
- ^ a b А. Х. Джонстон. "Эффекты космической радиации в расширенных флэш-воспоминаниях". Архивировано 4 марта 2016 г. в Wayback Machine . Программа НАСА по электронным деталям и упаковке (NEPP). 2001 г.
- ^ «ECC DRAM - Интеллектуальная память» . Intelligentmemory.com . Архивировано из оригинала на 2019-02-19 . Проверено 12 июня 2021 .
- ^ а б «Использование StrongArm SA-1110 в бортовом компьютере наноспутника» . Космический центр Цинхуа, Университет Цинхуа, Пекин. Архивировано из оригинала на 2011-10-02 . Проверено 16 февраля 2009 .
- ^ «Инженеры Actel используют трехмодульное резервирование в новых ПЛИС с повышенной жесткостью» . Военная и аэрокосмическая электроника. Архивировано из оригинала на 2012-07-14 . Проверено 16 февраля 2009 .
- ^ «Упрочнение SEU программируемых вентильных матриц (FPGA) для космических приложений и определения характеристик устройств» . Klabs.org. 2010-02-03. Архивировано из оригинала на 2011-11-25 . Проверено 23 ноября 2011 .
- ^ «ПЛИС в космосе» . Techfocusmedia.net . Проверено 23 ноября 2011 .[ постоянная мертвая ссылка ]
- ^ «Технологии коммерческой микроэлектроники для применения в радиационной среде спутников» . Radhome.gsfc.nasa.gov . Проверено 23 ноября 2011 .
- ^ Дуг Томпсон, Мауро Карвалью Чехаб. "EDAC - обнаружение и исправление ошибок". Архивировано 5 сентября 2009 г. на Wayback Machine . 2005 - 2009. «Цель модуля ядра 'edac' - обнаруживать и сообщать об ошибках, возникающих в компьютерной системе, работающей под Linux».
- ^ а б «Руководство по проектированию программного обеспечения / BIOS системного контроллера AMD-762 ™, стр. 179» (PDF) .
- ^ а б До Хён Юн; Мэттан Эрез. «Memory Mapped ECC: недорогая защита от ошибок для кэшей последнего уровня» . 2009. с. 3
- ^ Даниэле Росси; Никола Тимончини; Майкл Спика; Сесилия Метра. «Анализ кода с исправлением ошибок для обеспечения высокой надежности и производительности кэш-памяти». Архивировано 3 февраля 2015 г. на Wayback Machine .
- ^ Шалини Гош; Сугато Басу; и Нур А. Туба. «Выбор кодов исправления ошибок для минимизации энергопотребления в схемах проверки памяти». Архивировано 03 февраля 2015 г. на Wayback Machine . п. 2 и стр. 4.
- ^ Крис Вилкерсон; Алаа Р. Аламельдин; Зешан Чишти; Вэй Ву; Динеш Сомасекхар; Ши-лен Лу. «Снижение мощности кэш-памяти с помощью недорогих многобитовых кодов с исправлением ошибок» . DOI : 10.1145 / 1816038.1815973 .
- ^ МОЙ Сяо. «Класс оптимальных кодов SEC-DED с минимальным нечетным столбцом» . 1970 г.
- ^ Корпорация Intel. «Семейство процессоров Intel Xeon E7: надежность, доступность и удобство обслуживания» . 2011. с. 12.
- ^ «Биос и кэш - Компьютеры нестандартной сборки» . www.custom-build-computers.com . Проверено 27 марта 2021 .
- ^ «Микроархитектура AMD Zen - Иерархия памяти» . WikiChip . Проверено 15 октября 2018 года .
- ^ «Микроархитектура AMD Zen + - Иерархия памяти» . WikiChip . Проверено 15 октября 2018 года .
- ^ Jangwoo Kim; Никос Хардавеллас; Кен Май; Бабак Фальсафи; Джеймс С. Хоу. «Многобитовые кэши, устойчивые к ошибкам, использующие двумерное кодирование ошибок» . 2007. с. 2.
- ^ Натан Н. Сэдлер и Дэниел Дж. Сорин. «Выбор схемы защиты от ошибок для кэша данных L1 микропроцессора» . 2006. с. 1.
- ^ «Типичный модуль ОЗУ без буферизации ECC: Crucial CT25672BA1067» .
- ^ Спецификация настольной материнской платы, которая поддерживает небуферизованную оперативную память как с ECC, так и без ECC, с совместимыми процессорами.
- ^ «Обсуждение ECC на pcguide» . Pcguide.com. 2001-04-17 . Проверено 23 ноября 2011 .
- ^ Тест производительности платформы AMD-762 / Athlon с ECC и без него. Архивировано 15 июня 2013 г. на Wayback Machine.
- ^ «ECCploit: память ECC все-таки уязвима для атак Rowhammer» . Группа системной и сетевой безопасности в VU Amsterdam . Проверено 22 ноября 2018 .
Внешние ссылки
- SoftECC: система проверки целостности программной памяти
- Настраиваемая программная библиотека обнаружения и исправления ошибок DRAM для HPC
- Обнаружение и исправление скрытых искажений данных для крупномасштабных высокопроизводительных вычислений
- Однобитовые ошибки: взгляд поставщика модуля памяти на причину, влияние и обнаружение
- Процессор Intel Xeon E3 - семейство продуктов 1200 Руководство по настройке памяти
- Линус Торвальдс о важности ОЗУ с ECC, называет "плохую политику" Intel в отношении ECC