ECC-память в сервере: зачем нужна и как проверить
ECC-память хранит дополнительный контрольный код к каждым 64 битам данных. Это позволяет исправить однобитовую ошибку на лету и обнаружить двухбитовую, остановив машину вместо тихой порчи данных. На обычной памяти такая ошибка просто меняет значение в оперативной памяти, и никто об этом не узнает — пока не развалится база.
- Схема SECDED: одиночная ошибка исправляется, двойная — обнаруживается и приводит к аварийной остановке.
- Исправленные ошибки называются CE (correctable), неисправимые — UE (uncorrectable). Считает их подсистема EDAC.
- Без ECC повреждение бита выглядит как случайный сбой приложения, который невозможно воспроизвести.
- Во всех конфигурациях выделенных серверов ZevsHost стоит DDR4 ECC: от 16 до 64 GB.
- ECC работает только связкой: модуль, чипсет и процессор должны её поддерживать одновременно.
Как это работает
К 64 битам полезных данных модуль добавляет 8 бит контрольного кода — отсюда 72-битная шина и девятый чип на планке. Контроллер памяти при каждом чтении пересчитывает код и сравнивает с сохранённым. Расхождение в одном бите он исправляет прозрачно для приложения и увеличивает счётчик CE.
Ошибка в двух битах исправлению не поддаётся. Контроллер сообщает о UE, и ядро останавливает систему: лучше падение с понятной записью в журнале, чем запись испорченного значения в файл базы. Поддержку должен давать и процессор — у серверных линеек она есть, см. выбор процессора для сервера.
Типы модулей
| Тип | Коррекция | Где применяется | Особенность |
|---|---|---|---|
| UDIMM non-ECC | Нет | Настольные ПК, ноутбуки | Ошибка остаётся незамеченной |
| UDIMM ECC | SECDED | Односокетные серверы начального уровня | Ограничение по объёму на канал |
| RDIMM (registered) | SECDED | Серверы Xeon E5, Scalable, EPYC | Буфер адреса, больше модулей на канал |
| LRDIMM | SECDED | Конфигурации от 256 GB | Буферизация данных, выше задержки |
Смешивать регистровые и небуферизованные модули в одной машине нельзя: платформа просто не стартует. Объём на канал тоже ограничен, поэтому апгрейд планируют по документации на материнскую плату, а не по свободным слотам.
Что ломается без коррекции
- База данных. Испорченный байт попадает на диск вместе со страницей InnoDB; проверка целостности обнаружит его через недели.
- Бэкапы. Архив собирается из данных в памяти, и битый бит переезжает в резервную копию, откуда вы потом восстанавливаетесь.
- Гипервизор. Одна ошибка в странице памяти хоста валит гостевую машину, и отладка уходит в поиск несуществующего бага в приложении.
- Шифрование. Повреждение блока при работе с ключом делает расшифровку невозможной без резервной копии ключа.
Как проверить ECC на живом сервере
Наличие ECC-планок ещё не означает, что коррекция включена. Проверяйте три вещи: тип памяти, активность EDAC и счётчики ошибок.
# Тип, объём и частота установленных модулей
dmidecode -t memory | grep -E 'Size|Type:|Speed|Locator'
# Загружены ли драйверы EDAC (Debian/Ubuntu и RHEL одинаково)
lsmod | grep -i edac
# Счётчики исправленных и неисправимых ошибок по контроллерам
grep . /sys/devices/system/edac/mc/mc*/ce_count
grep . /sys/devices/system/edac/mc/mc*/ue_count
# Сводка по модулям через rasdaemon, с сохранением в файл
ras-mc-ctl --error-count > /root/ecc-$(date +%F).txt 2>&1
В Debian и Ubuntu утилита ставится пакетом rasdaemon, в RHEL-семействе — rasdaemon из базового репозитория. Если dmidecode показывает тип без слова ECC, коррекции нет независимо от того, что написано в описании тарифа: это первое, что стоит проверить при приёмке выделенного сервера.
Растущий счётчик CE — это не «всё в порядке, ошибки исправляются». Одиночные исправленные ошибки означают деградацию конкретной планки. За CE обычно приходит UE, а UE на продуктивной машине — это внеплановая остановка посреди рабочего дня.
Снимайте ce_count раз в сутки и сравнивайте с прошлым значением. Рост на десятки единиц за сутки на одном модуле — повод запросить замену планки, а не ждать аварии. Как завести эти счётчики в мониторинг вместе с температурой и состоянием дисков, описано в статье про мониторинг железа сервера.
Когда нужен memtest, а когда EDAC
EDAC показывает ошибки на работающей системе и указывает на конкретный модуль по номеру слота. Он не нагружает память специально и видит только то, что произошло при обычной работе.
Полный проход memtest86+ нагружает все адреса шаблонами и ловит дефекты, которые в рабочем профиле не проявляются. Его запускают при приёмке машины и после замены модулей; процедура разобрана в статье про проверку оперативной памяти сервера.
ECC в конфигурациях ZevsHost
Память DDR4 с коррекцией установлена во всех выделенных серверах: 16 GB в тарифах Start (от $49 в месяц в Германии), 32 GB в Pro и 64 GB в Dedicated Enterprise US за $149. Отдельной опции «память без ECC подешевле» в линейке нет — на сервере это экономия, которая окупается ровно один раз, до первой порчи данных. Конфигурации перечислены на странице аренды выделенных серверов.
Коротко
- ECC исправляет однобитовые ошибки и останавливает систему на двухбитовых, не давая испорченным данным дойти до диска.
- Проверка занимает минуту:
dmidecode -t memory, загруженный EDAC и счётчикиce_count. - Растущий CE — сигнал к замене модуля, а не признак нормальной работы.
- Регистровые и небуферизованные модули не смешиваются; объём на канал ограничен платформой.
- Во всех серверах ZevsHost стоит DDR4 ECC объёмом от 16 до 64 GB.