Вопрос: Имеет ли memtest86 + тестовую память, которая используется для запуска?


Одним из распространенных сценариев отказа сервера является неправильная DRAM, иногда даже при использовании памяти ECC.

memtest86+ является одним из самых полезных инструментов для диагностики проблем с DRAM. Когда он загружается в начале памяти, мне было интересно, если memtest86+ проверяет часть памяти, которая memtest86+загружается в.

Является ли выделенная память memtest86+настолько мала, что это не имеет значения, или возможно, что memtest86+ может пропустить дефект в DRAM, потому что он не может проверить места памяти, в которых он находится?


62
2018-01-21 07:45


Источник


Хотя этот вопрос имеет отношение к серверу, он также подходит для обычного ПК, поэтому я проголосовал за перенос этого вопроса на Суперпользователь где он может охватить больше людей. - Cristian Ciupitu


Ответы:


Очевидно, memtest86 + не может протестировать область памяти, в которой в настоящее время содержится исполняемый код memtest86 + (но если в этом регионе есть ошибки памяти, очень вероятно, что сам тест потерпит крах). Тем не менее, memtest86 + может переместить свой собственный код на другой адрес во время выполнения, и, используя этот трюк, он может протестировать всю память, которую он может использовать с помощью прошивки (BIOS) - просто не все сразу.

Это перемещение кода описано в README.background внутри архива исходного кода memtest86 + (файл немного устаревший), например, он утверждает, что адреса, используемые для memtest86 +, являются 0x2000 и 0x200000, но низкий адрес, как определено в источнике, на самом деле 0x10000, а высокий адрес - 0x2000000 или 0x300000 в зависимости от объема памяти в аппарате).

Но даже при этом трюке перемещения memtest86 + не может протестировать всю память по следующим причинам:

  • Обычно прошивка (BIOS) резервирует некоторые области RAM для собственного использования (например, таблицы ACPI). В то время как к этим областям ОЗУ могут обращаться ЦП, запись чего-либо в них может привести к непредсказуемому поведению.

  • Некоторая часть ОЗУ используется для Режим управления системой и даже не доступен из ЦП вне привилегированного SMM-кода.

  • Диапазон адресов RAM от 640 К до 1 М недоступен из-за особенностей оригинальной компоновки памяти ПК (часть этой ОЗУ может использоваться как тень для BIOS ROM и для SMM, другие части могут быть полностью недоступны).


78
2018-01-21 11:59



Интересно, я пропустил его возможности перемещения. Очевидно, что SMM и подобные пользователи находятся вне пределов досягаемости (кроме конкретной поддержки BIOS). - shodanshok
Эти отображаемые регионы обычно исключают DRAM, поскольку рассматривается что-то еще «от модуля»? ROM и периферийных устройств. - mckenzm
если у вас несколько модулей ram, выполните второе испытание после их замены ... - JFL
Возможно ли, что память потерпит неудачу в правильном ключе, чтобы memtest неправильно сообщал об успехе из-за того, что его инструкции были перезаписаны? Вернее, сколько недостатков требуется? - John Dvorak
@JanDvorak: Теоретически это возможно, конечно. На практике я бы сказал, что это немного более вероятно, чем ударить головой по клавиатуре и случайным образом набирать шекспировский сонет. - Ilmari Karonen


Нет, memtest не может проверить свою собственную память. Однако он настолько мал (только несколько KB), что это практически не имеет значения. РЕДАКТИРОВАТЬ: это утверждение неверно, поскольку, как указано в выбранном ответе, memtest может динамически перемещаться для тестирования все адресная память пользователя.

-

Теоретически, современный процессор во время загрузки может конфигурировать часть своего кеша в качестве программируемой памяти, из очень маленьких программ (как memtest) может быть запущен без касаясь DRAM.

Тем не менее, это специфичная для модели функция (которая требует поддержки BIOS), и я не думаю, что memtest использует ее.


5
2018-01-21 10:02



Спасибо за ваш ответ. memtest также тестирует кеш процессора. Так что если memtest будет загружен в этот кеш, тогда эта часть кеша не может быть протестирована, что более проблематично, потому что оно намного меньше, чем память? - Robin
Besed on Документация memtest86 оно делает не проверьте кеш процессора, по крайней мере, прямо. Более того, современные процессоры имеют отдельные инструкции и кеш данных (I $ и D $). Исполняемый код загружается в кеш команд и не может быть напрямую изменен / перезаписан - shodanshok
memtest86 + определенно проверяет кеширование данных ЦП, но это не имеет значения для этого вопроса. Еще раз спасибо за ваш ответ. - Robin
Вы в этом уверены? Я думал, что он скопировал себя где-то еще, проверяя память, в которой он обычно живет. Вот почему каждый тест имеет медленную часть (большую часть памяти) и очень быструю часть (крошечный бит, где хранится его код / ​​данные). - Peter Cordes
@DmitryGrigoryev: Ах ладно .. так что я узнал что-то еще :-) Круто спасибо! - Robin