Один из распространенных сценариев сбоя сервера - плохой DRAM, иногда даже при использовании памяти ECC.
memtest86+
является одним из самых полезных инструментов для диагностики проблем DRAM. Поскольку он загружает себя в начале памяти, мне было интересно, memtest86+
проверяет ли часть памяти, которая memtest86+
загружается в.
Распределена ли память memtest86+
так мало, что это не имеет значения, или возможно, что она memtest86+
может пропустить дефект в DRAM, потому что она не может проверить места памяти, в которых она находится?
Ответы:
Очевидно, что memtest86 + не может проверить область памяти, которая в настоящее время содержит исполняемый код memtest86 + (но если в этой области есть ошибки памяти, весьма вероятно, что сам тест завершится сбоем). Тем не менее, memtest86 + может перемещать свой собственный код по другому адресу во время выполнения, и с помощью этого трюка он может проверить всю память, которую ему разрешено использовать для прошивки (BIOS), но не все сразу.
Это перемещение кода описано в файле README.background внутри архива исходного кода memtest86 + (файл немного устарел - например, в нем говорится, что адреса, используемые для кода memtest86 +, это 0x2000 и 0x200000, но низкий адрес, определенный в источнике, фактически 0x10000, а старший адрес - 0x2000000 или 0x300000 в зависимости от объема памяти в машине).
Но даже с этим трюком перестановки memtest86 + не может проверить всю память по следующим причинам:
Обычно микропрограмма (BIOS) резервирует некоторые области ОЗУ для собственного использования (например, таблицы ACPI). В то время как ЦП может получить доступ к этим областям ОЗУ, запись чего-либо в них может привести к непредсказуемому поведению.
Некоторая часть ОЗУ используется для режима управления системой и даже недоступна для ЦП вне привилегированного кода SMM.
Диапазон адресов ОЗУ от 640 КБ до 1 МБ недоступен из-за особенностей устаревшей структуры памяти ПК (часть этой ОЗУ может использоваться как тень для ПЗУ BIOS и для SMM, другие части могут быть полностью недоступны).
источник
Нет, memtest не может проверить свою память. Однако он настолько мал (всего несколько килобайт), что вряд ли имеет значение. РЕДАКТИРОВАТЬ: это утверждение неверно, поскольку, как указано в выбранном ответе, memtest может динамически перемещать себя для проверки всей адресуемой памяти пользователя.
-
Теоретически, современный процессор может во время загрузки сконфигурировать часть своего кэша как программируемую память, из очень маленьких программ (как memtest) можно запускать, не касаясь DRAM вообще.
Тем не менее, это особенность модели (которая требует поддержки BIOS), и я не думаю, что memtest использует ее.
источник
memtest
также тестирует кэш процессора. Итак, еслиmemtest
бы он был загружен в этот кеш, то эту часть кеша нельзя было бы протестировать, что более проблематично, потому что оно намного меньше памяти?