ECC-память: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м откат правок 82.117.240.127 (обс.) к версии Ping08Bot
мНет описания правки
Строка 7: Строка 7:
'''ECC-память''' ({{lang-en|error-correcting code memory}}, память с коррекцией ошибок) — тип [[Компьютерная память|компьютерной памяти]], которая автоматически распознаёт и исправляет спонтанно возникшие изменения (ошибки) [[бит]]ов памяти.
'''ECC-память''' ({{lang-en|error-correcting code memory}}, память с коррекцией ошибок) — тип [[Компьютерная память|компьютерной памяти]], которая автоматически распознаёт и исправляет спонтанно возникшие изменения (ошибки) [[бит]]ов памяти.


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


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


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


На практике широко применяется DDR* SDRAM ECC-память для серверов с кодом класса SECDED (исправление одиночных и детектирование двойных ошибок). На [[DIMM|модулях памяти]] на каждые 8 микросхем добавляется ещё по одной микросхеме, которая хранит [[ECC]]-коды размером 8 бит на каждые 64 бита основной памяти<ref>http://www.ece.umd.edu/courses/enee759h.S2003/lectures/Lecture13.pdf#page=12</ref>.
На практике широко применяется DDR* SDRAM ECC-память для серверов с кодом класса SECDED (исправление одиночных и детектирование двойных ошибок). На [[DIMM|модулях памяти]] на каждые 8 микросхем добавляется ещё по одной микросхеме, которая хранит [[ECC]]-коды размером 8 бит на каждые 64 бита основной памяти<ref>http://www.ece.umd.edu/courses/enee759h.S2003/lectures/Lecture13.pdf#page=12</ref>.
Строка 18: Строка 18:


== Описание проблемы ==
== Описание проблемы ==
[[Электромагнитные помехи]] внутри компьютерной системы способны спонтанно поменять состояние [[DRAM|компьютерной памяти]]. Самой частой причиной такого изменения являются [[нейтрон]]ы из [[космические лучи|космических лучей]]<ref name="Boeing1" />. Поэтому частота ошибок в компьютерных системах возрастает при увеличении [[Высота над уровнем моря|высоты]]. Так, поток нейтронов в 3,5 раза больше на высоте 1,5 км и в 300 раз больше на высоте 10-12 км (типичной высоте полёта пассажирских самолётов), чем на уровне моря<ref name="ieee-tpds">«[http://dx.doi.org/10.1109/TPDS.2015.2426179 A Survey of Techniques for Modeling and Improving Reliability of Computing Systems]», IEEE TPDS, 2015</ref>. Поэтому системы, работающие на большой высоте, требуют большей защиты.
[[Электромагнитные помехи]] внутри компьютерной системы способны спонтанно поменять состояние ячейки [[DRAM|компьютерной памяти]]. Самой частой причиной такого изменения являются [[нейтрон]]ы из [[космические лучи|космических лучей]]<ref name="Boeing1" />. Поэтому частота ошибок в компьютерных системах возрастает при увеличении [[Высота над уровнем моря|высоты]]. Так, поток нейтронов в 3,5 раза больше на высоте 1,5 км и в 300 раз больше на высоте 10-12 км (типичной высоте полёта пассажирских самолётов), чем на уровне моря<ref name="ieee-tpds">«[http://dx.doi.org/10.1109/TPDS.2015.2426179 A Survey of Techniques for Modeling and Improving Reliability of Computing Systems]», IEEE TPDS, 2015</ref>. Поэтому системы, работающие на большой высоте, требуют большей защиты.


Например, на космическом аппарате ''[[Кассини-Гюйгенс]]'' установлены два идентичных устройства записи, каждое из которых содержит 2,5 гигабита памяти. На протяжении первых 2,5 лет полёта регистрировалось примерно постоянное количество ошибок каждый день: примерно 280 ошибок в день. Однако в течение одного дня (6 ноября 1997 года) число ошибок возросло в четыре раза. Считается, что это произошло из-за {{нп5|протонная буря|протонной бури||solar particle event}}, которая была зафиксирована спутником [[GOES]] 9<ref name="Auto7P-1" />.
Например, на космическом аппарате ''[[Кассини-Гюйгенс]]'' установлены два идентичных устройства записи, каждое из которых содержит 2,5 гигабита памяти. На протяжении первых 2,5 лет полёта регистрировалось примерно постоянное количество ошибок каждый день: примерно 280 ошибок в день. Однако в течение одного дня (6 ноября 1997 года) число ошибок возросло в четыре раза. Считается, что это произошло из-за {{нп5|протонная буря|протонной бури||solar particle event}}, которая была зафиксирована спутником [[GOES]] 9<ref name="Auto7P-1" />.


Существуют опасения, что тенденция к уменьшению физических размеров модулей памяти приведёт к увеличению частоты возникновения ошибок, из-за того, что частицы меньших энергий будут способны изменить бит<ref name="ieee-tpds" />. С другой стороны, компактные размеры памяти уменьшают вероятность попадания частиц в неё. Кроме того переход на такие технологии, как [[кремний на изоляторе]], могут сделать память более устойчивой<ref name="Borucki1" />.
Существуют опасения, что тенденция к уменьшению физических размеров модулей памяти приведёт к увеличению частоты возникновения ошибок из-за того, что частицы меньших энергий будут способны изменить бит<ref name="ieee-tpds" />. С другой стороны, компактные размеры памяти уменьшают вероятность попадания частиц в неё. Кроме того, переход на такие технологии, как [[кремний на изоляторе]], может сделать память более устойчивой<ref name="Borucki1" />.


Исследование, проведённое на большом количестве серверов [[Google (компания)|Google]] показало, что количество ошибок может быть в пределах от {{num|25 000}} до {{num|70 000}} ошибок за миллиард рабочих часов ({{lang-en|device hours}}) на мегабит (то есть 2,5-7,0 × 10<sup>−11</sup> ошибок / бит·час)<ref name="Schroeder1" />.
Исследование, проведённое на большом количестве серверов, [[Google (компания)|Google]] показало, что количество ошибок может быть в пределах от {{num|25 000}} до {{num|70 000}} ошибок за миллиард рабочих часов ({{lang-en|device hours}}) на мегабит (то есть 2,5-7,0 × 10<sup>−11</sup> ошибок / бит·час)<ref name="Schroeder1" />.


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


Более надёжным является подход при котором используется коды с [[Прямая коррекция ошибок|коррекцией ошибок]]. Самым часто используемым кодом с коррекцией ошибок, является [[код Хэмминга]].
Более надёжным является подход, при котором используется коды с [[Прямая коррекция ошибок|коррекцией ошибок]]. Самым часто используемым кодом с коррекцией ошибок, является [[код Хэмминга]].
Большинство памяти с коррекцией ошибок, используемых в современных компьютерах <!--(mostly medium- to high-end workstation and server-class)--> могут исправлять ошибку одного бита в одном 64-битном машинном слове <!-- can detect and correct errors of a single bit per 64-bit «word» (the unit of [[Шина (компьютер)|bus]] transfer)-->и определить, но не исправить, ошибку в двух битах в одном 64-битном слове<ref name="apmcsta1" />.
Большинство памяти с коррекцией ошибок, используемых в современных компьютерах, <!--(mostly medium- to high-end workstation and server-class)--> могут исправлять ошибку одного бита в одном 64-битном машинном слове <!-- can detect and correct errors of a single bit per 64-bit «word» (the unit of [[Шина (компьютер)|bus]] transfer)-->и определить, но не исправить, ошибку в двух битах в одном 64-битном слове<ref name="apmcsta1" />.


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


Многие старые системы не сообщали об исправленных ошибках, сообщая только об обнаруженных ошибках, которые невозможно было исправить. Современные системы записывают как исправленные ошибки (CE, {{lang-en|correctable errors}}), так и неисправляемые ошибки (UE, {{lang-en|uncorrectable errors}}). Это позволяет вовремя заменить испорченную память: несмотря на то, что большое количество исправленных ошибок при отсутствии неисправляемых ошибок не влияет на корректность работы памяти, это может свидетельствовать о том, что для данного модуля памяти вероятность появления неисправляемых ошибок в будущем возрастёт<ref>
Многие старые системы не сообщали об исправленных ошибках, сообщая только об обнаруженных ошибках, которые невозможно было исправить. Современные системы записывают как исправленные ошибки (CE, {{lang-en|correctable errors}}), так и неисправляемые ошибки (UE, {{lang-en|uncorrectable errors}}). Это позволяет вовремя заменить испорченную память: несмотря на то, что большое количество исправленных ошибок при отсутствии неисправляемых ошибок не влияет на корректность работы памяти, это может свидетельствовать о том, что для данного модуля памяти вероятность появления неисправляемых ошибок в будущем возрастёт<ref>
Строка 45: Строка 45:
Память с коррекцией ошибок защищает от некорректной работы компьютерной системы в связи с порчей памяти и уменьшает вероятность фатального отказа системы. Однако такая память стоит дороже; [[материнская плата]], [[чипсет]] и [[процессор]], которые поддерживают память с коррекцией ошибок, тоже могут быть дороже, поэтому такая память используется в системах, в которых важна бесперебойная и корректная работа, таких как [[файловый сервер]], научных и финансовых приложениях.
Память с коррекцией ошибок защищает от некорректной работы компьютерной системы в связи с порчей памяти и уменьшает вероятность фатального отказа системы. Однако такая память стоит дороже; [[материнская плата]], [[чипсет]] и [[процессор]], которые поддерживают память с коррекцией ошибок, тоже могут быть дороже, поэтому такая память используется в системах, в которых важна бесперебойная и корректная работа, таких как [[файловый сервер]], научных и финансовых приложениях.


Память с коррекцией ошибок работает на 2-3 % медленнее (часто для проверки сумм требуется один дополнительный такт контроллера памяти), чем обычная память в зависимости от приложений<ref name="Auto7P-9" />. Дополнительная логика, реализующая подсчет, проверку ECC и исправление ошибок требует логических ресурсов и времени на свою работу либо в самом контроллере памяти, либо в интерфейсе между [[CPU]] и контроллером памяти<ref name="AMD-762">{{cite web|url=http://pdf.datasheetcatalog.com/datasheet/AdvancedMicroDevices/mXvrrr.pdf|title=AMD-762™ System Controller Software/BIOS Design Guide, p. 179|publisher=AMD|date=2002}} "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"</ref>.
Память с коррекцией ошибок работает на 2-3 % медленнее (часто для проверки сумм требуется один дополнительный такт контроллера памяти), чем обычная память, в зависимости от приложений<ref name="Auto7P-9" />. Дополнительная логика, реализующая подсчет, проверку ECC и исправление ошибок, требует логических ресурсов и времени на свою работу либо в самом контроллере памяти, либо в интерфейсе между [[CPU]] и контроллером памяти<ref name="AMD-762">{{cite web|url=http://pdf.datasheetcatalog.com/datasheet/AdvancedMicroDevices/mXvrrr.pdf|title=AMD-762™ System Controller Software/BIOS Design Guide, p. 179|publisher=AMD|date=2002}} "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"</ref>.


== См. также ==
== См. также ==

Версия от 08:00, 7 июня 2017

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

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

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

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

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

На практике широко применяется 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 года) число ошибок возросло в четыре раза. Считается, что это произошло из-за протонной бури[англ.], которая была зафиксирована спутником GOES 9[5].

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

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

Технология

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

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

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

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

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

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

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

См. также

Примечания

  1. Werner Fischer. RAM Revealed. admin-magazine.com. Дата обращения: 20 октября 2014.
  2. http://www.ece.umd.edu/courses/enee759h.S2003/lectures/Lecture13.pdf#page=12
  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. Gary M. Swift and Steven M. Guertin. "In-Flight Observations of Multiple-Bit Upset in DRAMs". Jet Propulsion Laboratory
  6. 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
  7. Schroeder, Bianca; Pinheiro, Eduardo; Weber, Wolf-Dietrich (2009). "DRAM Errors in the Wild: A Large-Scale Field Study" (PDF). SIGMETRICS/Performance. ACM. ISBN 978-1-60558-511-6. {{cite journal}}: Неизвестный параметр |laysource= игнорируется (справка); Неизвестный параметр |laysummary= игнорируется (справка)
  8. Using StrongArm SA-1110 in the On-Board Computer of Nanosatellite. Tsinghua Space Center, Tsinghua University, Beijing. Дата обращения: 16 февраля 2009.
  9. Doug Thompson, Mauro Carvalho Chehab. «EDAC — Error Detection And Correction». 2005—2009. «The 'edac' kernel module goal is to detect and report errors that occur within the computer system running under linux.»
  10. Discussion of ECC on pcguide. Pcguide.com (17 апреля 2001). Дата обращения: 23 ноября 2011.
  11. AMD-762™ System Controller Software/BIOS Design Guide, p. 179. AMD (2002). "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"

Ссылки