Тест памяти для PC-совместимых компьютеров
AleGr MEMTEST
WWW-страница программы MEMTEST.
Программа MEMTEST предназначена для проверки оперативной памяти PC-совместимых компьютеров на основе процессора 386 и выше. Программа написана с учетом особенностей организации системной шины, кэша и памяти процессоров класса 80486, Pentium и Pentium Pro.
Максимальный объем тестируемой памяти составляет 3 Гбайт.
Программа MEMTEST может быть запущена только из-под "голого" DOSа, то есть в отсутствие каких-либо менеджеров памяти (HIMEM.SYS, EMM386.EXE). Для получения такого сеанса DOS необходимо во время загрузки Windows 95 (когда загрузчик написал "Starting Windows 95...") нажать Shift+F5. При использовании Windows 98 требуется во время загрузки системы держать нажатой клавишу Ctrl (непосредственно перед окончанием инициализации BIOS, например, когда выведен список детектированных устройств). Windows 98 покажет стартовое меню, после чего нажмите Shift+F5.
Отключать внешний/внутренний кэш, в отличие от старых тестовых программ (таких, как CheckIt), не требуется. Тестовые последовательности, используемые программой, рассчитаны на пакетные (burst) пересылки между памятью, внешним кэшем и процессором, которые происходят в работе на реальных задачах. При выключенном кэше пакетные пересылки не будут протестированы.
Командная строка для запуска программы имеет следующий формат:
MEMTEST <размер памяти> <начало тестируемой области> /ключи программы
Размер памяти и начало тестируемой области задаются в мегабайтах. Указывать их необязательно - по умолчанию тестируется вся доступная память до 512 МБ. Если ваш компьютер имеет больше 512 мегабайт памяти, то размер нужно указать. Программа тестирует только реально присутствующую память, поэтому если указано больше, то вреда не будет.
Программа не может тестировать меньше 8 мегабайт.
MEMTEST понимает следующие ключи:
/row <size> - задает размер (в килобайтах) строки матрицы памяти микросхем, установленных в вашем компьютере. Допускается значение, являющееся степенью двойки, от 4 до 64. По умолчанию перебираются все возможные размеры от 4 до 64 килобайт. Указывать этот параметр следует только тогда, когда вы точно знаете размер строки. Если указанное значение не соответствует реальному, то ошибки не будет, просто программа не сможет хорошо протестировать помехи на усилителях считывания разрядных линий.
/delay <time1> <time2> - задержка между записью и чтением, в секундах. На каждом втором проходе после записи в память вставляется задержка <time1>, по умолчанию 1 секунда. На 63 и 64 проходе из 64 значение увеличивается до <time2>, по умолчанию 60 секунд. Благодаря такой задержке можно проверить, насколько надежно работает регенерация динамической памяти;
/speed - программа измерит тактовую частоту процессора и скорость чтения/записи кэша второго уровня и самой памяти, а также скорость записи в режиме write allocate - через кэш;
/readtwice - выполняет сравнение данных дважды;
/writethru - запрещает кэширование записи (writeback);
/nocache - запрещает кэширование. Обычно не следует указывать этот ключ.
/preheat - перед записью каждого тестового образца в память программа читает содержимое памяти, используя специальную последовательность обращений, при которой микросхемы памяти потребляют наибольшую мощность. Это делается для того, чтобы испытать память на повышенной температуре.
После запуска программа MEMTEST переводит процессор в защищенный 32-битный режим, поэтому возврат в DOS из нее невозможен. Остановить тестирование можно только перезагрузкой - либо нажатием Ctrl+Alt+Del, либо нажатием кнопки Reset, либо выключив и через несколько секунд включив питание компьютера (рекомендуется только для систем без кнопки Reset).
Если в ходе тестирования обнаружено много ошибок, программа останавливает вывод на. экран, чтобы сообщения об ошибках не были потеряны. Для продолжения теста неободимо нажать Enter.
В ходе работы программа печатает номер тестового прохода. Полный цикл тестирования составляет 64 прохода. Время выполнения зависит от процессора и объема памяти, однако надо учитывать, что каждый второй проход включает 36 секунд задержки, а два последних прохода из 64 - 36 минут.
Выполняемые тесты
Сначала выполняется цикл записи/чтения псевдослучайных данных. Псевдослучайные данные представляют собой последовательность образцов "все единицы"/"все нули", чередующиеся по псевдослучайной последовательности. Этот тест служит для проверки адресации.
Следующим тестом является тест на чередование бегущей единицы и бегущего нуля. Такая тестовая последовательность заменяет также тесты "все нули", "все единицы" и позволяет проверить работу системной шины в условиях максимальной помехи. Записывается последовательность 64-битных слов следующего вида:
0111111111111111 0111111111111111 0111111111111111
0111111111111111
1000000000000000 1000000000000000 1000000000000000 1000000000000000
0111111111111111 0111111111111111 0111111111111111 0111111111111111
1000000000000000 1000000000000000 1000000000000000 1000000000000000
После того, как вся проверяемая память прописана тестовым образцом, она читается в направлении увеличения адреса и сравнивается с эталоном. По мере чтения память прописывается инверсным значением тестового образца. После того, как вся память прочитана и прописана новым образцом, она читается в направлении уменьшения адреса и опять сравнивается с новым образцом. При этом она прописывается следующим образцом, сдвинутым вправо на один бит:
1011111111111111 1011111111111111 1011111111111111
1011111111111111
0100000000000000 0100000000000000 0100000000000000 0100000000000000
1011111111111111 1011111111111111 1011111111111111 1011111111111111
0100000000000000 0100000000000000 0100000000000000 0100000000000000
Такие циклы выполняются для всех позиций бит (всего 16). При проверке систем, построенных на основе процессоров с 32-разрядной шиной (i80386, i80486), используются 32-битовые тестовые образцы.
Затем выполняются тесты "все нули"/"все единицы", с инвертированием по строкам матрицы памяти. Они учитывают особенности организации динамической памяти.
Для создания максимальной помехи на разрядных линиях тестовый образец инвертируется через каждые от 4 до 64 килобайта (интервал изменяется на каждом тестовом проходе), а чтение данных выполняется с чередованием строк - 32 байта из одной строки, 32 байта из другой строки. Образцы вида "все нули" и "все единицы" создают максимальную помеху на соседних разрядных линиях.
После выполнения каждого прохода код программы перемещается на новое место в физической памяти, позволяя проверить память, где она была записана.
На каждом втором проходе программа делает задержку порядка 1 секунды между записью данных и их чтением. Во время задержки какие-либо обращения к памяти отсутствуют, потому что вся выборка команд производится из кэша первого уровня. Это позволяет проверить надежность регенерации динамической памяти при отсутствии обращений. Во время выполнения 2 тестовых проходов из 64 задержка увеличивается до 60 секунд. Эта задержка может быть задана в командной строке при запуске теста.
Для проверки передач "внешний кэш-процессор", часть тестовых проходов выполняется с предвыборкой из памяти во внешний кэш. Без предвыборки передача идет из памяти прямо в процессор. Для проверки передачи "внешний кэш-память", часть тестовых проходов выполняется с предвыборкой памяти во внешний кэш во время записи, что предотвращает непосредственную запись данных из процессора в память. Для проверки пакетных передач "процессор-память" и "процессор-внешний кэш", часть тестовых проходов выполняется с предвыборкой памяти во внутренний кэш при записи.
Особенности организации динамической памяти
Как известно, память DRAM организована в виде матрицы. Младшие разряды физического адреса соответствуют адресам столбцов, старшие разряды - адреса строк. Размер строки в пересчете на физический адрес может составлять от 4 до 64 килобайт1. При каждом обращении к памяти происходит полное чтение одной строки матрицы, выбор конкретного бита строки определяется младшими разрядами адреса. Когда ячейкя динамической памяти считывается, информация в ней разрушается, поэтому усилители считывания записывают прочитанную информацию обратно. Каждый столбец матрицы памяти имеет две разрядных линии - одна подсоединяется к считываемой ячейке памяти, другая - к опорной ячейке, которая заряжена до половинного напряжения. Половина строк матрицы подсоединена к одной линии, половина к другой, и соответственно имеется два (или более) набора опорных ячеек.
Для правильного считывания важно, чтобы перед циклом чтения потенциалы разрядной и опорной линии были одинаковы, так как из-за того, что емкость разрядной линии намного больше емкости запоминающего конденсатора, величина считываемого сигнала составляет лишь десятки милливольт. Для выравнивания потенциалов должно быть выдержано определенное время между циклами (precharge).
1. Полный цикл регенерации составляет 1024-4096 строк, емкость одного банка на 16-мегабитных микросхемах составляет 16 мегабайт
История изменений
1.03 (28 марта 1999). Исправлена ошибка в измерении времени в V1.02, вызванная переходом на MSVC 5.0. Добавлена опция /preheat для повышения нагрева памяти.
1.02 (25 февраля 1999). Исправлено определение процессоров i386 и i486. Исправлена проблема, вызывавшая узод на перезагрузку систем с системными платами производства Intel (Phoenix BIOS). Добавлена опция командной строки /nocheck, запрещающая прерывание по проверке машины (machine check interrupt) на процессорах Pentium и Pentium-II.
1.01 (22 января 1998). Изменен способ выработки сброса процессора для перезагрузки. Теперь вместо перевода процессора в shutwodn (не работало на Pentium Pro/FX440) используется сброс с помощью контроллера клавиатуры. Добавлено выключение двигателя флоппи-диска перед переходом в защищенный режим, чтобы в случае загрузки программы с дискеты мотор дисковода не оставался во включенном состоянии на все время теста.
1.0 (30 декабря 1997). Исходная версия.
Вы можете послать E-Mail.
Последнее изменение 04 Апрель 1999