ECC-память (англ. error-correcting code memory, память с коррекцией ошибок) — тип компьютерной памяти, которая автоматически распознаёт и исправляет спонтанно возникшие изменения (ошибки) битов памяти. Память, не поддерживающая коррекции ошибок, обозначается non-ECC.

DIMM для ECC-памяти обычно содержит девять чипов памяти на каждой стороне, на один больше, чем для обычной памяти[1]

Как правило, память с коррекцией ошибок может исправлять изменения одного бита в одном машинном слове. Это значит, что при чтении одного машинного слова из памяти будет прочтено то же значение, что было до этого записано, даже если в промежутке между записью и чтением один бит был случайно изменён (например, под действием космических лучей). Обычная память, как правило, не способна определить, была ли ошибка, хотя некоторые виды памяти с контролем чётности способны определить, что произошла ошибка, но не способны её исправить.

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

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

На практике широко применяется DDR* SDRAM ECC-память для серверов с кодом класса SECDED (исправление одиночных и детектирование двойных ошибок). На модулях памяти на каждые 8 микросхем добавляется ещё по одной микросхеме, которая хранит ECC-коды размером 8 бит на каждые 64 бита основной памяти[2].

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

Описание проблемы править

Электромагнитные помехи внутри компьютерной системы способны спонтанно поменять состояние ячейки компьютерной памяти. Самой частой причиной такого изменения являются нейтроны из космических лучей[3]. Поэтому частота ошибок в компьютерных системах возрастает при увеличении высоты. Так, поток нейтронов в 3,5 раза больше на высоте 1,5 км и в 300 раз больше на высоте 10-12 км (типичной высоте полёта пассажирских самолётов), чем на уровне моря[4]. Поэтому системы, работающие на большой высоте, требуют большей защиты.

Например, на космическом аппарате Кассини-Гюйгенс установлены два идентичных устройства записи, каждое из которых содержит 2,5 гигабита памяти. На протяжении первых 2,5 лет полёта регистрировалось примерно постоянное количество ошибок каждый день: примерно 280 ошибок в день. Однако в течение одного дня (6 ноября 1997 года) число ошибок возросло в четыре раза. Считается, что это произошло из-за геомагнитной бури[5] (также протонная буря[en]), которая была зафиксирована спутником GOES 9[6].

Существуют опасения, что тенденция к уменьшению физических размеров модулей памяти приведёт к увеличению частоты возникновения ошибок из-за того, что частицы меньших энергий будут способны изменить бит[4]. С другой стороны, компактные размеры памяти уменьшают вероятность попадания частиц в неё. Кроме того, переход на такие технологии, как кремний на изоляторе, может сделать память более устойчивой[7].

Исследование, проведённое на большом количестве серверов Google, показало, что количество ошибок может составлять от 25 000 до 70 000 за миллиард рабочих часов (англ. device hours) на мегабит (то есть 2,5-7,0 × 10−11 ошибок / бит·час)[8].

Технология править

Одним из решений проблемы является контроль чётности — использование дополнительного бита, который записывает чётность остальных битов. Такой подход позволяет обнаруживать ошибки, но не позволяет исправлять их, поэтому при обнаружении ошибки можно лишь прервать выполнение программы.

Более надёжным является подход, при котором используются коды с коррекцией ошибок. Самым часто используемым кодом с коррекцией ошибок является код Хэмминга. Большинство видов памяти с коррекцией ошибок, используемых в современных компьютерах, может исправлять ошибку одного бита в одном 64-битном машинном слове и определить, но не исправить, ошибку в двух битах в одном 64-битном слове[9].

Наиболее эффективный подход к исправлению ошибок зависит от вида ожидаемых ошибок. Часто предполагается, что изменения различных битов происходят независимо — в таком случае вероятность двух ошибок в одном слове пренебрежимо мала. Однако это предположение не выполняется для современных компьютеров. Технология коррекции ошибок Chipkill[en] (IBM) позволяет исправлять несколько ошибок, в том числе и при порче целого чипа памяти. Другие технологии коррекции памяти, которые не предполагают независимости ошибок в разных битах, включают Extended ECC[en] (Sun Microsystems), Chipspare[en] (Hewlett-Packard) и SDDC[en] (Intel).

Многие старые системы сообщали лишь о тех из обнаруженных ошибок, которые невозможно было исправить, и не сообщали об исправленных. Современные системы записывают как исправимые ошибки (CE, англ. correctable errors), так и неисправимые (UE, англ. uncorrectable errors). Это позволяет вовремя заменить испорченную память: несмотря на то, что большое количество исправленных ошибок при отсутствии неисправимых ошибок не влияет на корректность работы памяти, это может свидетельствовать о том, что для данного модуля памяти вероятность появления неисправимых ошибок в будущем возрастёт[10].

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

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

Для проверки сумм часто требуется один дополнительный такт контроллера памяти. Дополнительная логика, реализующая подсчет, проверку ECC и исправление ошибок, требует логических ресурсов и времени на свою работу либо в самом контроллере памяти, либо в интерфейсе между CPU и контроллером памяти[11]. Поэтому память с коррекцией ошибок работает на 2-3 % медленнее, чем обычная память, в зависимости от приложений[12].

См. также править

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

  1. Werner Fischer. RAM Revealed. admin-magazine.com. Дата обращения: 20 октября 2014. Архивировано 20 октября 2014 года.
  2. Архивированная копия. Дата обращения: 20 ноября 2016. Архивировано из оригинала 18 апреля 2016 года.
  3. Single Event Upset at Ground Level, Eugene Normand, Member, IEEE, Boeing Defense & Space Group, Seattle, WA 98124-2499
  4. 1 2 «A Survey of Techniques for Modeling and Improving Reliability of Computing Systems», IEEE TPDS, 2015
  5. Кузнецов В. В. Солнечно-земная физика (курс лекций для студентов физиков). Лекция 7. Солнечная активность. // Солнечные бури. Горно-Алтайский государственный университет. 2012. Дата обращения: 9 января 2018. Архивировано 18 сентября 2017 года.
  6. Gary M. Swift and Steven M. Guertin. "In-Flight Observations of Multiple-Bit Upset in DRAMs". Jet Propulsion Laboratory. Дата обращения: 17 апреля 2016. Архивировано из оригинала 3 февраля 2015 года.
  7. Borucki, "Comparison of Accelerated DRAM Soft Error Rates Measured at Component and System Level", 46th Annual International Reliability Physics Symposium, Phoenix, 2008, pp. 482–487
  8. Schroeder, Bianca; Pinheiro, Eduardo; Weber, Wolf-Dietrich. DRAM Errors in the Wild: A Large-Scale Field Study (неопр.) // SIGMETRICS/Performance. — ACM, 2009. — ISBN 978-1-60558-511-6. Архивировано 10 марта 2015 года.
  9. Using StrongArm SA-1110 in the On-Board Computer of Nanosatellite. Tsinghua Space Center, Tsinghua University, Beijing. Дата обращения: 16 февраля 2009. Архивировано 2 октября 2011 года.
  10. Doug Thompson, Mauro Carvalho Chehab. «EDAC — Error Detection And Correction» Архивировано 5 сентября 2009 года.. 2005—2009. «The 'edac' kernel module goal is to detect and report errors that occur within the computer system running under linux.»
  11. AMD-762™ System Controller Software/BIOS Design Guide, p. 179. AMD (2002). Дата обращения: 21 ноября 2016. Архивировано 21 ноября 2016 года. «The additional logic to support the ECC function is costly in both silicon real estate and system timing. In the ECC modes that support data correction, one additional system clock must be used to generate the corrected data … AMD Athlon processor checks for its own errors»
  12. Discussion of ECC on pcguide. Pcguide.com (17 апреля 2001). Дата обращения: 23 ноября 2011. Архивировано 18 ноября 2011 года.

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