Ошибка памяти не обязана приводить к синему экрану
Когда оперативная память работает нестабильно, первым делом вспоминают зависания, перезагрузки и ошибки приложений. Это самый заметный сценарий, но с точки зрения сохранности данных он не самый неприятный. Отдельный бит может изменить состояние без немедленного падения программы. Если поврежденное значение используется в вычислении или записывается на накопитель, ошибка способна уйти дальше по цепочке.
DRAM хранит информацию в виде электрического заряда в огромном количестве ячеек. Контроллер постоянно читает, записывает и обновляет эти данные. Физическая ячейка не является абсолютно надежным хранилищем. Ошибки вызывают дефекты самого чипа, проблемы с сигналом, деградация оборудования, пограничные режимы напряжения и частоты, нарушение таймингов и другие аппаратные причины.
Существует популярное объяснение, согласно которому случайные инверсии битов в основном вызываются космическим излучением. Такая причина физически возможна, но сводить к ней все ошибки памяти нельзя. В известном полевом исследовании Google, охватившем миллионы DIMM-дней серверной эксплуатации, исследователи обнаружили, что значительная часть наблюдавшихся отказов имела устойчивый аппаратный характер. Более свежая работа 2024 года на двух HPC-системах также не обнаружила статистически значимого влияния космических лучей на зарегистрированные ошибки DRAM.
Для владельца компьютера причина конкретной ошибки обычно вторична. Значение имеет другое: без дополнительного контроля система может получить неверные данные и не понять, что с ними что-то произошло.
Как ECC обнаруживает испорченный бит
ECC расшифровывается как Error Correction Code. Вместе с полезными данными система хранит дополнительные контрольные биты. При записи контроллер памяти рассчитывает код для исходного блока данных, а при чтении выполняет расчет снова и сравнивает результат.
Типичная системная ECC-память использует схемы класса SEC-DED: Single Error Correction, Double Error Detection. Такая схема способна исправить одиночную ошибку в защищаемом кодовом слове и обнаружить определенные двойные ошибки. Конкретная реализация зависит от платформы, поэтому формулировку SEC-DED нельзя автоматически переносить на любой существующий механизм ECC.
При корректируемой ошибке система получает правильные данные вместо поврежденных. Сам факт коррекции при этом может быть зарегистрирован аппаратурой и операционной системой. Это важное отличие от ситуации, когда неисправность остается полностью невидимой.
Если корректируемые ошибки начинают регулярно повторяться на одной странице памяти или одном DIMM, это уже диагностический сигнал. Серверная инфраструктура использует такую статистику для профилактической замены модулей. Windows также имеет механизм Predictive Failure Analysis для ECC-памяти: WHEA может отслеживать повторяющиеся исправленные ошибки и пытаться вывести проблемную страницу физической памяти из использования.

DDR5 действительно содержит ECC, но это другой ECC
Путаница стала особенно заметной после выхода DDR5. В характеристики обычных потребительских модулей начали попадать слова On-Die ECC. Отсюда возникло логичное на первый взгляд заключение: раз ECC встроена в DDR5, покупать отдельную ECC-память больше не требуется.
Это неверно.
On-Die ECC находится внутри самих микросхем DRAM. Micron описывает схему DDR5 следующим образом: на каждые 128 бит данных внутри чипа используются 8 дополнительных битов кода. При чтении микросхема способна исправить одиночную ошибку внутри своего массива до передачи данных наружу. Подробная схема приведена в документации Micron по новым возможностям DDR5.
Задача механизма связана в том числе с ростом плотности DRAM. По мере уменьшения физических элементов массива становится сложнее сохранять требуемую надежность каждой отдельной ячейки. Внутренняя коррекция позволяет чипу самостоятельно компенсировать часть ошибок.
Но защищаемая область заканчивается внутри микросхемы. Обычная DDR5 с On-Die ECC не создает сквозной контроль данных между контроллером памяти процессора и модулем. Ошибка может возникнуть уже после внутренней проверки, например на другом участке тракта передачи.
Поэтому производители памяти прямо разделяют эти понятия. Обычный DDR5 UDIMM остается non-ECC UDIMM, даже если каждая микросхема на нем содержит On-Die ECC.
Почему внутренний ECC нельзя считать полноценной защитой данных
Разница лучше видна, если проследить путь одного блока данных. Процессор передает информацию контроллеру памяти, далее сигнал проходит через физический интерфейс, контакты процессора и платы, дорожки материнской платы, разъем DIMM, дорожки самого модуля и только затем попадает внутрь DRAM.
On-Die ECC контролирует внутренний массив конкретной микросхемы. Если ошибка появилась на участке до нее или после нее, встроенный механизм чипа не обеспечивает эквивалентную системной ECC защиту всего пути.
Side-band ECC работает на другом уровне. Контроллер памяти формирует дополнительную информацию для пользовательских данных, а ECC-модуль имеет необходимую дополнительную ширину для ее хранения и передачи. При чтении контроллер получает данные вместе с контрольным кодом и может определить нарушение целостности.
Именно поэтому в серверных DDR5 одновременно присутствуют оба механизма. On-Die ECC защищает внутреннюю работу DRAM, системная ECC контролирует более широкий тракт. Они дополняют друг друга.
Производитель памяти ATP в своем техническом разборе DDR5 формулирует различие еще жестче: On-Die ECC улучшает надежность отдельного кристалла, тогда как DIMM-wide ECC предназначена для сквозной целостности данных. Техническое описание двух механизмов доступно в материале ATP о DDR5 ECC.
Почему на DDR5 ECC стало сложнее смотреть по количеству микросхем
У старой памяти существовал бытовой способ отличать многие ECC UDIMM: на модуле часто было девять микросхем вместо восьми, потому что дополнительный чип хранил контрольные биты. Иногда этот признак работает и сейчас, но для современной DDR5 он уже слишком груб.
DDR5 изменила архитектуру модулей и разделила обычную 64-битную ширину на два независимых 32-битных подканала. У серверных RDIMM для ECC добавляются дополнительные биты на каждый подканал. Конкретное количество корпусов DRAM зависит от организации чипов, рангов, емкости и конструкции модуля.
Гораздо надежнее смотреть обозначение производителя и полную спецификацию. В описании должны прямо присутствовать ECC UDIMM, ECC SODIMM, RDIMM или другой соответствующий тип. Надпись On-Die ECC в перечне возможностей DDR5 ничего не говорит о наличии системной коррекции.

ECC и RDIMM тоже не являются одним и тем же
Еще одна распространенная путаница: ECC-память часто называют серверной, а серверную память автоматически называют Registered. Эти свойства связаны, но обозначают разные вещи.
ECC говорит о коррекции ошибок. Registered относится к электрической архитектуре модуля. RDIMM содержит регистр, который уменьшает электрическую нагрузку на контроллер памяти и помогает платформе работать с большим количеством микросхем и модулей. Это особенно важно в многоканальных серверных системах с большим объемом RAM.
Существуют ECC UDIMM без регистра. Именно такие модули интересны владельцам части рабочих станций, небольших серверов, NAS и некоторых обычных настольных платформ. По конструкции они ближе к привычной настольной памяти.
С DDR5 различие стало еще очевиднее физически. Kingston указывает, что DDR5 UDIMM и DDR5 RDIMM имеют разные положения ключа в разъеме. RDIMM нельзя установить в обычный слот, рассчитанный на UDIMM. Подробное описание форм-факторов и внутренней архитектуры есть в обзоре стандарта DDR5 от Kingston.
Поэтому покупка дешевого серверного RDIMM с вторичного рынка для обычной платы AM5 не является способом недорого получить ECC. Платформа должна поддерживать именно соответствующий тип модулей.

