Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Модули DIMM с ECC обычно имеют девять микросхем памяти с каждой стороны, на одну больше, чем обычно в модулях DIMM без ECC (некоторые модули могут иметь 5 или 18). [1]

Память с кодом исправления ошибок ( память 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 , MacOS и Windows , , [ править ] позволяет подсчет обнаруженных и исправленных ошибок памяти, в частности , чтобы помочь определить недостаток модулей памяти , прежде чем проблема становится катастрофической.

Некоторые микросхемы DRAM включают «внутренние» схемы коррекции ошибок на кристалле, которые позволяют системам с контроллерами памяти без ECC по-прежнему получать большинство преимуществ памяти ECC. [13] [14] В некоторых системах подобный эффект может быть достигнут при использовании модулей памяти EOS .

Обнаружение и исправление ошибок зависит от ожидаемого типа возникающих ошибок. Неявно предполагается, что сбой каждого бита в слове памяти является независимым, что приводит к маловероятности двух одновременных ошибок. Раньше так было, когда микросхемы памяти имели ширину в один бит, что было типично для первой половины 1980-х годов; более поздние разработки переместили много битов в тот же чип. Эта слабость адресуется различных технологий, в том числе IBM 's ChipKill , Sun Microsystems ' Extended ECC , Hewlett Packard 's Chipspare и Intel ' ы Single Device Data Correction (SDDC).

Память DRAM может обеспечить повышенную защиту от программных ошибок , полагаясь на коды исправления ошибок. Такая память с коррекцией ошибок , известная как память с ECC или EDAC , особенно желательна для приложений с высокой отказоустойчивостью, таких как серверы, а также для приложений дальнего космоса из-за повышенного излучения . Некоторые системы также « очищают » память, периодически считывая все адреса и записывая исправленные версии, если это необходимо для удаления программных ошибок.

Чередование позволяет распределить эффект одного космического луча, потенциально нарушая несколько физически соседних битов в нескольких словах, связывая соседние биты с разными словами. До тех пор, пока нарушение единичного события (SEU) не превышает пороговое значение ошибки (например, одиночная ошибка) в любом конкретном слове между доступами, оно может быть исправлено (например, с помощью однобитового кода исправления ошибок) и эффективно безошибочная система памяти может поддерживаться. [15]

Контроллеры памяти с исправлением ошибок традиционно используют коды Хэмминга , хотя некоторые используют тройную модульную избыточность (TMR). Последнее предпочтительнее, потому что его оборудование быстрее, чем у схемы исправления ошибок Хэмминга. [15] Космические спутниковые системы часто используют TMR, [16] [17] [18], хотя спутниковая RAM обычно использует коррекцию ошибок Хэмминга. [19]

Многие ранние реализации корректируемых ошибок памяти ECC маскируют, действуя «так, как будто» ошибки никогда не возникали, и сообщают только о неисправимых ошибках. Современные реализации регистрируют как исправимые ошибки (CE), так и неисправимые ошибки (UE). Некоторые люди заблаговременно заменяют модули памяти с высоким уровнем ошибок, чтобы снизить вероятность возникновения неисправимых ошибок. [20]

Многие системы памяти ECC используют «внешнюю» схему EDAC между процессором и памятью. Некоторые системы с памятью ECC используют как внутренние, так и внешние системы EDAC; внешняя система EDAC должна быть разработана таким образом, чтобы исправлять определенные ошибки, которые внутренняя система EDAC не может исправить. [13] Современные настольные и серверные ЦП интегрируют схему EDAC в ЦП [21] еще до перехода к интегрированным в ЦП контроллерам памяти, которые связаны с архитектурой NUMA . Интеграция с ЦП обеспечивает систему EDAC без штрафных санкций во время безошибочной работы.

По состоянию на 2009 год наиболее распространенные коды исправления ошибок используют коды Хэмминга или Сяо, которые обеспечивают исправление однобитовых ошибок и обнаружение двухбитовых ошибок (SEC-DED). Для защиты памяти были предложены другие коды с коррекцией ошибок - коды с двухбитовой коррекцией ошибок и трехбитовые коды с обнаружением ошибок (DEC-TED), коды с исправлением ошибок с одним полубайтом и коды с обнаружением ошибок с двумя полубайтами (SNC-DND), Reed– Коды исправления ошибок Соломона и т. Д. Однако на практике многобитовая коррекция обычно реализуется путем чередования нескольких кодов SEC-DED. [22] [23]

Ранние исследования пытались минимизировать накладные расходы на площадь и задержку в схемах ECC. Хэмминг впервые продемонстрировал, что коды SEC-DED возможны с одной конкретной проверочной матрицей. Сяо показал, что альтернативная матрица со столбцами с нечетным весом обеспечивает возможность SEC-DED с меньшей площадью аппаратного обеспечения и более короткой задержкой, чем традиционные коды Хэмминга SEC-DED. Более поздние исследования также пытаются минимизировать мощность в дополнение к минимизации площади и задержки. [24] [25] [26]

Кэш [ править ]

Многие процессоры используют коррекции ошибок кодов в кэше на чипе , в том числе Intel Itanium и Xeon [27] процессоров, AMD Athlon, Opteron, все Zen - [28] и Zen + -На [29] процессоры ( EPYC , EPYC Embedded , Ryzen и Ryzen Threadripper ) и DEC Alpha 21264. [22] [30]

По состоянию на 2006 год EDC / ECC и ECC / ECC являются двумя наиболее распространенными методами защиты от ошибок кэш-памяти, используемыми в коммерческих микропроцессорах. Метод EDC / ECC использует код обнаружения ошибок (EDC) в кэше уровня 1. При обнаружении ошибки данные восстанавливаются из кэша 2-го уровня с защитой ECC. В методе ECC / ECC используется кэш уровня 1 с защитой ECC и кэш уровня 2 с защитой ECC. [31] Процессоры, использующие технологию EDC / ECC, всегда осуществляют сквозную запись всех ХРАНИЛИЩ в кэш уровня 2, так что при обнаружении ошибки во время чтения из кэша данных уровня 1 копия этих данных может быть восстановлена ​​из кэш 2-го уровня.

Зарегистрированная память [ править ]

Два модуля RDIMM DDR4 -2133 ECC 1,2 В объемом 8 ГБ

Зарегистрированная или буферизованная память - это не то же самое, что ECC; технологии выполняют разные функции. Обычно память, используемая на серверах, регистрируется, чтобы позволить использовать многие модули памяти без электрических проблем, и ECC для целостности данных. Память, используемая в настольных компьютерах, не предназначена для экономии. Однако доступна небуферизованная (незарегистрированная) память ECC [32], и некоторые несерверные материнские платы поддерживают функции ECC таких модулей при использовании с ЦП, поддерживающим ECC. [33] Зарегистрированная память не работает надежно на материнских платах без схемы буферизации, и наоборот.

Преимущества и недостатки [ править ]

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

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

Поддержка ECC варьируется от производителей материнских плат, поэтому память с ECC может просто не распознаваться материнской платой, несовместимой с ECC. Большинство материнских плат и процессоров для менее важных приложений не предназначены для поддержки ECC, поэтому их цены могут быть ниже. Некоторые платы и процессоры с поддержкой ECC могут поддерживать небуферизованную (незарегистрированную) ECC, но также будут работать с памятью без ECC; микропрограмма системы включает функцию ECC, если установлена ​​память ECC.

ECC может снизить производительность памяти примерно на 2–3 процента в некоторых системах, в зависимости от приложения и реализации, из-за дополнительного времени, необходимого контроллерам памяти ECC для выполнения проверки ошибок. [34] Однако современные системы интегрируют тестирование ECC в ЦП, не создавая дополнительной задержки при доступе к памяти, пока не обнаруживаются ошибки. [21] [35] [36]

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

Примечания [ править ]

  1. ^ a b Большая часть памяти ECC использует код SECDED .
  2. ^ В то время как 72-битное слово с 64 битами данных и 8 проверочными битами является обычным явлением, ECC также используется с меньшими и большими размерами.

Ссылки [ править ]

  1. ^ Вернер Фишер. "RAM выявлена" . admin-magazine.com . Проверено 20 октября 2014 года .
  2. ^ Расстройство События на уровне земли, Евгений Норманда, член IEEE, Boeing Defense & Space Group, Seattle, WA 98124-2499
  3. ^ a b « Обзор методов моделирования и повышения надежности вычислительных систем », IEEE TPDS, 2015
  4. ^ Гэри М. Свифт и Стивен М. Гертин. «Наблюдения в полете за многобитовой ошибкой в ​​DRAM». Лаборатория реактивного движения
  5. ^ a b Borucki, «Сравнение ускоренных коэффициентов мягких ошибок DRAM, измеренных на уровне компонентов и систем», 46-й ежегодный международный симпозиум по физике надежности, Феникс, 2008 г., стр. 482–487
  6. ^ a b c d Шредер, Бьянка; Пиньейро, Эдуардо; Вебер, Вольф-Дитрих (2009). Ошибки DRAM в дикой природе: крупномасштабное полевое исследование (PDF) . СИГМЕТРИКА / Производительность . ACM. ISBN  978-1-60558-511-6. Краткое содержание - ZDNet .
  7. ^ «Измерение программных ошибок памяти в производственных системах» . Архивировано из оригинала на 2017-02-14 . Проверено 27 июня 2011 .
  8. ^ Ли, Хуанг; Шен, Чу (2010). « » Реалистичная оценка аппаратных ошибок памяти и программное обеспечение система Восприимчивость». Usenix Ежегодной техническая конференция 2010" (PDF) .
  9. ^ Yoongu Ким; Росс Дейли; Джереми Ким; Крис Фоллин; Джи Хе Ли; Донхёк Ли; Крис Вилкерсон; Конрад Лай; Онур Мутлу (24.06.2014). «Изменение битов в памяти без доступа к ним: экспериментальное исследование ошибок нарушения памяти DRAM» (PDF) . ece.cmu.edu . IEEE . Проверено 10 марта 2015 .
  10. ^ Дэн Гудин (2015-03-10). «Передовой хакерский метод дает статус суперпользователя, используя слабые места DRAM» . Ars Technica . Проверено 10 марта 2015 .
  11. ^ "CDC 6600" . Microsoft Research . Проверено 23 ноября 2011 .
  12. ^ «Проверка четности» . Pcguide.com. 2001-04-17 . Проверено 23 ноября 2011 .
  13. ^ a b А. Х. Джонстон. "Эффекты космической радиации в расширенных флэш-воспоминаниях". Архивировано 4 марта 2016 г. в Wayback Machine . Программа НАСА по электронным деталям и упаковке (NEPP). 2001 г.
  14. ^ «ECC DRAM - Интеллектуальная память» . Intelligentmemory.com . Проверено 23 декабря 2014 .
  15. ^ a b «Использование StrongArm SA-1110 в бортовом компьютере наноспутника» . Космический центр Цинхуа, Университет Цинхуа, Пекин. Архивировано из оригинала на 2011-10-02 . Проверено 16 февраля 2009 .
  16. ^ «Инженеры Actel используют трехмодульное резервирование в новых ПЛИС Rad-Hard» . Военная и аэрокосмическая электроника. Архивировано из оригинала на 2012-07-14 . Проверено 16 февраля 2009 .
  17. ^ "Упрочнение SEU программируемых вентильных матриц (FPGA) для космических приложений и определения характеристик устройств" . Klabs.org. 2010-02-03. Архивировано из оригинала на 2011-11-25 . Проверено 23 ноября 2011 .
  18. ^ «ПЛИС в космосе» . Techfocusmedia.net . Проверено 23 ноября 2011 .[ постоянная мертвая ссылка ]
  19. ^ "Коммерческие технологии микроэлектроники для приложений в спутниковой радиационной среде" . Radhome.gsfc.nasa.gov . Проверено 23 ноября 2011 .
  20. ^ Дуг Томпсон, Мауро Карвалью Чехаб. "EDAC - обнаружение и исправление ошибок". Архивировано 5 сентября 2009 г. на Wayback Machine . 2005 - 2009. «Цель модуля ядра 'edac' - обнаруживать и сообщать об ошибках, возникающих в компьютерной системе, работающей под Linux».
  21. ^ a b «Руководство по проектированию программного обеспечения системного контроллера AMD-762 ™ / BIOS, стр. 179» (PDF) .
  22. ^ а б До Хён Юн; Мэттан Эрез. «ECC с отображением памяти: недорогая защита от ошибок для кешей последнего уровня» . 2009. с. 3
  23. ^ Даниэле Росси; Никола Тимончини; Майкл Спика; Сесилия Метра. «Анализ кода с исправлением ошибок для обеспечения высокой надежности и производительности кэш-памяти». Архивировано 3 февраля 2015 г. на Wayback Machine .
  24. ^ Шалини Гош; Сугато Басу; и Нур А. Туба. «Выбор кодов исправления ошибок для минимизации энергопотребления в схемах проверки памяти». Архивировано 03 февраля 2015 г. на Wayback Machine . п. 2 и стр. 4.
  25. ^ Крис Вилкерсон; Алаа Р. Аламельдин; Зешан Чишти; Вэй Ву; Динеш Сомасекхар; Ши-лен Лу. «Снижение мощности кэш-памяти с помощью недорогих многобитовых кодов с исправлением ошибок» . DOI : 10.1145 / 1816038.1815973 .
  26. ^ МОЙ Сяо. «Класс оптимальных кодов SEC-DED с минимальным нечетным весом» . 1970 г.
  27. ^ Корпорация Intel. «Семейство процессоров Intel Xeon E7: надежность, доступность и удобство обслуживания» . 2011. с. 12.
  28. ^ "Микроархитектура AMD Zen - Иерархия памяти" . WikiChip . Проверено 15 октября 2018 года .
  29. ^ «Микроархитектура AMD Zen + - Иерархия памяти» . WikiChip . Проверено 15 октября 2018 года .
  30. ^ Jangwoo Kim; Никос Хардавеллас; Кен Май; Бабак Фальсафи; Джеймс С. Хоу. «Многобитовые кэши, устойчивые к ошибкам, использующие двумерное кодирование ошибок» . 2007. с. 2.
  31. ^ Натан Н. Сэдлер и Дэниел Дж. Сорин. «Выбор схемы защиты от ошибок для кэша данных L1 микропроцессора» . 2006. с. 1.
  32. ^ "Типичный модуль ОЗУ без буферизации ECC: Crucial CT25672BA1067" .
  33. ^ Спецификация настольной материнской платы, которая поддерживает небуферизованную оперативную память как с ECC, так и без ECC, с совместимыми процессорами
  34. ^ "Обсуждение ECC на pcguide" . Pcguide.com. 2001-04-17 . Проверено 23 ноября 2011 .
  35. Тест платформы AMD-762 / Athlon с ECC и без него. Архивировано 15 июня 2013 г. на Wayback Machine.
  36. ^ «ECCploit: память ECC уязвима для атак Rowhammer в конце концов» . Группа системной и сетевой безопасности в VU Amsterdam . Проверено 22 ноября 2018 .

Внешние ссылки [ править ]

  • SoftECC: система проверки целостности программной памяти
  • Настраиваемая программная библиотека обнаружения и исправления ошибок DRAM для HPC
  • Обнаружение и исправление скрытых искажений данных для крупномасштабных высокопроизводительных вычислений
  • Однобитовые ошибки: взгляд поставщика модуля памяти на причину, влияние и обнаружение
  • Руководство по настройке памяти для процессоров Intel Xeon E3 - 1200 семейства продуктов
  • Линус Торвальдс о важности ОЗУ с ECC, называет "плохую политику" Intel в отношении ECC