Ручная настройка памяти отличается от подхода «поднимаем число, пока грузится» тем, что параметры меняются по одному, в определённой последовательности и с проверкой после каждого шага. Порядок здесь не формальность: параметры связаны между собой, и смена одного меняет допустимый диапазон для остальных. Если менять их вперемешку, при первом же отказе будет непонятно, какая правка его вызвала.

Базовая точка

Начинают не с чистого листа, а с профиля, записанного производителем в сам модуль. Профиль включается одним пунктом в настройках платы и задаёт частоту, основные тайминги и напряжения разом. Прежде чем что-то менять, этот режим проверяют на стабильность — он и станет точкой отсчёта, к которой возвращаются при неудаче.

Второй подготовительный шаг — выписать то, что плата подставила автоматически. Кроме четырёх привычных чисел контроллер выставляет несколько десятков вторичных и третичных задержек, режим работы контроллера, напряжения на нескольких шинах. Значения видны в разделе настройки памяти; их снимок избавляет от ситуации, когда после сброса не удаётся вернуться к рабочему состоянию.

Третий шаг — сохранить работающий набор настроек в профиль платы, если такая возможность есть, и запомнить, как выполняется аппаратный сброс: перемычкой, кнопкой или снятием батарейки. Он понадобится.

Порядок изменения параметров

Первым идёт частота вместе с режимом работы контроллера. У большинства платформ контроллер до определённого порога работает синхронно с памятью, а выше переходит на деление частоты. Переход через эту границу даёт скачок пропускной способности и одновременный скачок задержки вверх, поэтому сначала определяют, где порог, и решают, по какую сторону от него строить режим. Внутри синхронного диапазона частоту повышают ступенями, оставляя тайминги ослабленными.

Вторым идут напряжения. Их несколько: питание самих микросхем, питание интерфейса, питание контроллера памяти в процессоре и сопутствующие шины. Прибавка делается минимальными шагами и всегда с оглядкой на тепло — напряжение контроллера греет процессор, напряжение модулей греет чипы и преобразователь на планке. Если прибавка не даёт результата, её откатывают: причина отказа может быть в отражениях на шине, а не в нехватке амплитуды, и там напряжение не помогает.

Третьими идут основные тайминги — задержка выдачи данных после команды на столбец, задержка между активацией строки и командой, минимальное время удержания строки открытой и пауза перед следующей активацией в том же банке. Их поджимают по одному, начиная с тех, что дают наибольший эффект на конкретной нагрузке.

Четвёртым — параметры регенерации: длительность цикла восстановления и интервал между циклами. Эта пара после основных таймингов даёт самый заметный вклад в задержку, потому что регенерация блокирует банк и её частота напрямую влияет на доступность массива. Здесь же появляется температурная зависимость: чем горячее модули, тем меньше запас, поэтому именно эти значения чаще всего оказываются виновниками отказов «через час работы».

Пятыми — вторичные и третичные задержки. Отдача от них убывающая, а количество комбинаций велико, поэтому этот этап имеет смысл только когда всё предыдущее уже устоялось.

Почему по одному параметру за раз

Смысл последовательности в том, чтобы каждый отказ был атрибутируемым. Изменили одно значение, прогнали проверку, записали результат. Если система не стартовала — вернули предыдущее и зафиксировали границу. Такая работа медленная, зато на выходе получается карта пределов, а не случайно найденная комбинация, о которой неизвестно, какой её элемент держится на волоске.

Полезно вести журнал: параметр, значение, результат, время прохождения теста. Через несколько десятков итераций память подводит.

Проверка стабильности

Главная особенность ошибок памяти — они тихие. Отказ не обязан приводить к синему экрану: сбитый бит может уйти в файл на диске, в архив, в базу, и обнаружится это спустя недели. Поэтому проверка режима строится не на «система не падает», а на тестах, которые пишут известные шаблоны и сверяют прочитанное.

Проверять надо долго и в разных условиях. Короткий прогон на холодной машине не значит ничего: часть ошибок появляется только после прогрева модулей и контроллера. Реалистичный сценарий — длительный прогон профильного теста памяти плюс отдельно комбинированная нагрузка, где процессор и память работают вместе, при закрытом корпусе и нормальной комнатной температуре.

Отдельно стоит учитывать встроенную коррекцию внутри микросхем, появившуюся в новых поколениях. Она исправляет часть одиночных ошибок прямо в кристалле и наружу их не показывает. Режим на грани может проходить тесты именно потому, что коррекция маскирует сбои, — а запас при этом уже израсходован. Признак такого состояния — падение производительности без явных ошибок: исправление стоит времени. Полноценный контроль с сообщением об ошибках существует только в модулях с внешней коррекцией, о которых речь в разделе про память с коррекцией ошибок.

Что делать, когда система не стартует

Отказ загрузки — штатная часть процесса. Платы обычно выполняют несколько попыток инициализации, после чего сами откатываются на безопасный режим; если этого не произошло, применяют аппаратный сброс. Индикатор состояния или код на дисплее платы покажет, на каком этапе застряла процедура — остановка на стадии инициализации памяти читается однозначно.

Долгая пауза с чёрным экраном при первом старте нового режима — не отказ, а тренировка: контроллер подбирает задержки для каждой линии и каждого ранга. При четырёх занятых слотах она занимает заметно больше времени.

Где остановиться

Разумная граница — там, где прибавка перестаёт окупать риск. Каждая следующая ступень требует больше напряжения, даёт меньше выигрыша и сужает температурный запас. Режим, стабильно проходящий длительные проверки с некоторым отступом от найденного предела, полезнее рекордного, который держится ровно до жаркого дня. Общие сведения о характеристиках модулей и их взаимосвязи — в разделе про оперативную память.