ECC-память (Error-Correcting Code, память с коррекцией ошибок) — тип серверной RAM, оснащённой дополнительными чипами памяти для хранения контрольных кодов. При записи данных вычисляется контрольная сумма по алгоритму Хэмминга и сохраняется вместе с данными. При чтении контрольная сумма пересчитывается: однобитовая ошибка исправляется автоматически, двухбитовая — обнаруживается и вызывает аппаратное прерывание. Без ECC ошибки в RAM приводят к повреждению данных или BSOD («синему экрану»), с ECC — корректируются прозрачно.
Как работает
Стандартная ECC-память добавляет 1 чип к каждым 8 основным чипам модуля: 72-битная шина данных вместо 64-битной. Дополнительные 8 бит хранят код Хэмминга. Алгоритм Хэмминга (7,4) исправляет 1 ошибку и обнаруживает 2 ошибки в каждом 64-битном слове. Частота возникновения спонтанных ошибок в памяти (soft errors) — около 1 ошибки на 1 ГБ памяти за 1 000 часов работы по данным исследований Google и Microsoft.
ECC требует поддержки как модулем памяти, так и контроллером памяти CPU. Серверные Intel Xeon и AMD EPYC поддерживают ECC, потребительские Intel Core i/K — нет (исключение — Threadripper Pro). Использование non-ECC памяти в сервере с активной базой данных — прямой риск повреждения данных без уведомления.
Существуют два типа ECC: UDIMM с ECC (Unbuffered ECC DIMM) — для рабочих станций и небольших серверов, и RDIMM (Registered DIMM) с ECC — для enterprise-серверов с большим числом слотов. RDIMM добавляет регистровый буфер, снижающий электрическую нагрузку на контроллер памяти и позволяющий использовать больше модулей.
История
Коды исправления ошибок разработаны Ричардом Хэммингом (Bell Labs) в 1950 году — алгоритм Хэмминга (7,4) стал базой для ECC. В памяти ECC начали применяться в мейнфреймах IBM в 1960–1970-х годах. В PC-сервера ECC пришла с платформами Pentium Pro (1995) и AMD Opteron (2003). Исследование Google 2009 года показало, что soft errors в серверах — не редкость: у 8% DIMM за год возникает хотя бы одна ошибка. Это окончательно закрепило ECC как обязательный стандарт для production-серверов.
ECC vs non-ECC для хостинга
| Параметр | ECC | Non-ECC |
|---|---|---|
| Исправление ошибок | Да (1-бит автоматически) | Нет |
| Цена модуля | На 10–20% дороже | Дешевле |
| Применение | Серверы, рабочие станции | Потребительские ПК |
| Надёжность данных | Высокая | Риск тихого повреждения |
На что обращать внимание
Качественный хостинг всегда использует ECC-память. Это особенно важно для баз данных (PostgreSQL, MySQL): ошибка в RAM при записи транзакции без ECC приведёт к тихому повреждению данных. При выборе VPS-хостинга спрашивайте про ECC — ответственные провайдеры прямо указывают это в спецификациях серверов.
История ECC-памяти
ECC-память появилась в 1980-х годах в мейнфреймах IBM. В серверный сегмент x86 ECC внедрилась в 1990-х с появлением Intel Pentium Pro. Алгоритм SECDED (Single Error Correct, Double Error Detect) стал стандартом: исправляет 1-битовые ошибки, обнаруживает 2-битовые. Код Хэмминга (разработан Ричардом Хэммингом в 1950 году) лёг в основу алгоритма. Современные серверные RAM-модули формата RDIMM и LRDIMM поставляются исключительно с ECC.
Типичные ошибки
Основная ошибка — считать ECC необязательным для VPS-серверов. Космические лучи и электрические наводки вызывают примерно 1 ошибку на 8 ГБ в год в типичных условиях ЦОД. Без ECC эта ошибка приведёт к повреждению данных или случайному сбою процессов. Для PostgreSQL и финансовых систем non-ECC память неприемлема.