FAQ по модулям памяти
Страница 6.



Что такое "контроль четности" и "модули с контролем четности"?

Контроль четности - довольно старый метод проверки сохраняемых в памяти данных на отсутствие ошибок. Вкратце метод заключается в том, что при записи данных в память для некоторого количества (как правило, 8) бит данных вычисляется контрольная сумма (т.е. двоичная сумма значений всех бит, от которой потом отбрасываются старшие разряды), которая сохраняется вместе с данными в виде бита четности. При считывании данных контрольная сумма вычисляется еще раз и сравнивается с битом четности. Если они совпадают, то данные считаются истинными, в противном случае генерируется сообщение об ошибке четности, которое приводит к остановке компьютера.

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

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

  • По оценкам специалистов, среднее время между сбоями доброкачественной памяти (статистически от сбоев не застрахован никто) сопоставимо с временем жизни компьютера. В этой ситуации платить за дополнительные чипы четности (стоимость которых составляет десятки процентов стоимости основной памяти) кажется расточительством.
  • Малозначительный сбой (скажем, в видеокадре) ведет за собой полную остановку системы и возможную потерю ценной информации (что особенно обидно в многозадачной среде).
  • Как ни грустно, к потере информации может привести ошибка в бите четности.
  • Метод никак не застрахован от двойных ошибок (одновременное изменение значений двух бит не влияет на контрольную сумму).
  • Логические операции над данными могут, вообще говоря, потребовать лишних тактов ожидания.
В результате, примерно в 1994 году стал происходить постепенный отход от использования "простой" схемы контроля четности. Подавляющее большинство настольных систем отказалось от контроля четности вообще, а в серверах стали применять более прогрессивный с точки зрения сохранности данных метод ECC (см. вопрос). Для апгрейда старых систем, требовавших память с контролем четности, на рынке появилась "логическая четность" (см. вопрос). В настоящее время схема обычного контроля четности практически не применяется.

(Справедливости ради надо отметить, что по поводу "отмены" контроля четности существует и еще одна точка зрения. Вкратце она сводится к тому, что единственным реальным мотивом отказа от четности стал всплеск конкурентной борьбы на рынке компьютеров, когда никто из производителей уже не мог позволить себе тратить деньги там, где этого не делали его конкуренты. Результат же - захват рынка производителями низкокачественной (что не поддается идентификации пользователем) памяти, как следствие - огромное количество потерь из-за сбоев и падение доверия к операционным системам и программам.)

Модули с контролем четности, таким образом - это модули, в которых помимо основной шины предусмотрены дополнительные биты четности (по большому счету достаточно и одного бита на всю шину, однако чаще их бывает больше). Если оставить в стороне нестандартные модули, а также ECC, то фактически они существовали только в форм-факторе SIMM (подробности - в соответствующем вопросе).

Что такое "ECC" и "модули ECC"?

ECC обычно расшифровывается как Error Checking and Correction, существуют и другие версии, но смысл заключается в том, что речь идет о схеме обнаружения И ИСПРАВЛЕНИЯ ошибок в памяти. За счет чего удается добиться таких потрясающих результатов? Идея, лежащая в основе метода, довольно проста - пусть каждый бит основной памяти входит БОЛЕЕ ЧЕМ В ОДНУ контрольную сумму. Это потребует увеличения числа контрольных бит (напомним - стандартный метод контроля четности реально не требует более 1 контрольного бита на всю шину), но даст возможность восстанавливать позицию (а, следовательно, и значение) сбойного бита по позициям несошедшихся контрольных сумм. Предполагается, что контроллер памяти самостоятельно восстанавливает это значение, не прерывая работу всей системы (хотя разумно при этом генерировать системное сообщение об исправленной ошибке, чтобы владелец системы, если такие сообщения повторяются, мог принять меры по замене памяти, не дожидаясь более значительных сбоев).

Попробуем пояснить на простейшем примере. Представим себе шину из 6 (почему бы и нет?) бит (1-6), имеющую дополнительно 4 контрольных бита S1-S4, причем в этих битах хранятся следующие контрольные суммы:

  • S1 - 1, 2, 3
  • S2 - 1, 4, 5
  • S3 - 2, 4, 6
  • S4 - 3, 5, 6
Предположим, что в одном из основных бит произошла ошибка, и посмотрим, ошибку в каких контрольных суммах это вызовет:
  • 1 - S1, S2
  • 2 - S1, S3
  • 3 - S1, S4
  • 4 - S2, S3
  • 5 - S2, S4
  • 6 - S3, S4
То есть по номерам сбойных контрольных сумм сбойный бит определяется однозначно! Для построения данной схемы использовалась картинка, на которой основные биты располагаются над главной диагональю квадратной матрицы со стороной, равной числу контрольных сумм, и каждый бит входит в контрольные суммы с номером соответствующей строки и столбца этой матрицы. Нетрудно видеть, что такая схема позволяет с помощью n контрольных сумм "проконтролировать" до n(n-1)/2 основных бит. 4 контрольные суммы на 6 бит, конечно, выглядят очень щедро, но при увеличении ширины основной шины требуемое количество контрольных бит растет всего лишь как (примерно) квадратный корень из нее, так что при достаточно широких шинах потребность в контрольных битах относительно низка.

Отметим сразу, что нарисованная схема нежизнеспособна по ряду причин. Предположим, что простой сбой в контрольном бите система может проигнорировать (так как в этом случае не сойдется лишь одна контрольная сумма). Но рассмотрим, например, двойную ошибку - скажем, одновременно в битах 1 и 2. Легко видеть, что результатом будет расхождение в контрольных суммах S2 и S3, что будет проинтерпретировано как ошибка в бите 4. Аналогично неверную интерпретацию вызовет ошибка в любых двух битах, неважно, основных или контрольных. В действительности большинство схем ECC обеспечивает как минимум обнаружение двойной ошибки (с последующей остановкой системы). Автор не может привести никакую реализованную в действительности схему ECC, но склонен полагать, что уже из приведенного примера видно, что никаких чудес здесь нет, причем реализовать "истинный" ECC можно примерно на том же количестве "лишних" бит (порядка квадратного корня из удвоенной ширины шины). Можно, например, подумать о схеме, в которой основные биты не записываются вообще - только набор сумм (слово "контрольных" тут не очень подходит), из которых при чтении и восстанавливаются основные биты (а за счет избыточности - детектируются ошибки). Реально ECC реализовывалось практически только на 64-битной шине памяти (даже на машинах с 32-битной основной шиной), причем ранние реализации требовали до 16 контрольных бит, современные же схемы обходятся восемью.

Модуль ECC - несколько менее однозначное, чем модуль с четностью, понятие, что произошло в силу ряда исторических причин, основной из которых было в свое время отсутствие стандарта на контроллеры ECC, а, стало быть, и на модули, в них применяющиеся. Ознакомьтесь с двумя отдельными вопросами, посвященными ECC SIMM и ECC DIMM.

 
« Предыдущая статья   Следующая статья »