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.