Память проверяют не потому, что она часто выходит из строя, а потому, что её отказ маскируется под что угодно другое. Повреждённый бит в оперативной памяти приводит к падению случайного приложения, к ошибке распаковки архива, к синему экрану с разным кодом при каждом появлении. Пока не исключена память, искать причину в драйверах и операционной системе бессмысленно.
Что именно ищет тест
Отказ микросхемы памяти редко выглядит как полностью мёртвая ячейка. Гораздо чаще это ячейка, которая держит заряд чуть хуже соседних, или ячейка, состояние которой меняется под влиянием записи в соседнюю строку, или ошибка на шине, возникающая при определённой комбинации переключающихся линий. Все три случая зависят от данных: ошибка проявляется только на конкретном сочетании нулей и единиц и конкретной последовательности обращений.
Отсюда устройство тестов. Простейший шаблон — записать во всю память одно значение и прочитать обратно. Он ловит только грубые отказы. Шаблон «шагающая единица» проверяет каждую линию данных по отдельности. Инверсные шаблоны, где соседние ячейки получают противоположные значения, нагружают взаимное влияние строк. Отдельная группа тестов проверяет адресацию: в каждую ячейку записывается её собственный адрес, и при чтении сразу видно, если запись ушла не туда — типичный признак проблем с адресными линиями или неверно подобранных задержек.
Есть и тесты, работающие не с шаблоном, а с вычислением: блок памяти заполняется результатом длинного расчёта, который затем повторяется и сверяется. Такие проверки хорошо ловят нестабильность на границе режима, потому что дают одновременную нагрузку на процессор, контроллер и модули.
Сколько на это уходит времени
Ответ зависит от объёма и от того, что именно проверяется. Полный проход по всем шаблонам для типичной настольной конфигурации занимает несколько часов — время растёт примерно линейно с объёмом памяти, потому что каждый шаблон обходит весь массив целиком, а шаблонов больше десятка. На больших серверных объёмах речь идёт о десятках часов.
Короткий прогон в пятнадцать минут не доказывает ничего. Он способен обнаружить только явный дефект, который и без теста виден по невозможности загрузиться. Ошибки, возникающие на границе стабильности, проявляются вероятностно: чем дольше идёт нагрузка, тем выше шанс попасть в неудачное сочетание температуры, данных и таймингов. Модули прогреваются постепенно, и часть отказов появляется только после того, как микросхемы вышли на рабочую температуру, то есть через десятки минут после старта.
Разумный минимум — один полный проход всех шаблонов. Для проверки после смены режима или разгона — несколько проходов подряд, желательно ночью, чтобы не тратить рабочее время. Правило простое: отсутствие ошибок за короткий тест ничего не значит, а появление хотя бы одной ошибки за любое время — уже результат, продолжать не нужно.
Чем тестировать и почему загрузочный тест лучше
Проверка из-под работающей операционной системы имеет принципиальное ограничение: часть памяти занята самой системой, и протестировать её нельзя. Ошибка может сидеть именно в этой области. Кроме того, система в фоне занимается своими делами, что смазывает картину и мешает связать сбой с конкретным адресом.
Загрузочный тест — отдельная небольшая программа, стартующая до операционной системы, — свободен от этого ограничения и получает почти весь массив. Встроенное средство проверки памяти есть в самой Windows, оно перезагружает машину и работает до входа в систему. Существуют и отдельные загрузочные образы, которые записывают на флеш-накопитель. Для многопроцессорных и серверных конфигураций важна поддержка нескольких потоков — иначе прогон растянется непозволительно.
Ещё один источник данных — сама система. Если конфигурация построена на модулях с коррекцией ошибок, контроллер фиксирует исправленные единичные ошибки и записывает их в системный журнал. Рост числа исправленных ошибок на одном и том же модуле — это ранний сигнал деградации задолго до того, как появится неисправимая ошибка. Подробнее механизм разобран в разделе о памяти с коррекцией ошибок.
Что делать с найденными ошибками
Первое — не спешить признавать модуль браком. Ошибки в тесте означают, что связка «модуль плюс контроллер плюс текущий режим» нестабильна, а не что микросхема мертва. Порядок локализации такой.
Сбросить настройки платы к базовым, отключить профиль ускорения и прогнать тест на номинальной частоте стандарта. Если ошибки исчезли — проблема в режиме, а не в железе: либо профиль не тянет контроллер, либо не хватает напряжения, либо мешает число модулей на канал.
Если ошибки остались, оставить один модуль и проверить его отдельно, затем повторить с каждым по очереди. Это удваивает или учетверяет время, зато даёт однозначный ответ. Полезно менять и слоты: если ошибки следуют за модулем — виноват модуль, если остаются в одном слоте при разных модулях — проблема в слоте, разводке или контактах сокета процессора.
Отдельная проверка перед всем этим — механическая. Модуль, вставленный не до конца, окисленные контакты, погнутая ножка в сокете дают ту же картину, что и дефект микросхемы. Переустановка планок с чистыми руками и до отчётливого щелчка защёлок закрывает заметную долю случаев. Практические правила установки и заполнения слотов собраны в разделе про оперативную память.
Итоговая последовательность: механика, базовый режим, полный прогон, локализация по модулям и слотам. Она занимает вечер и ночь, но даёт достоверный ответ вместо месяцев борьбы с плавающими сбоями.