Все просто и обыденно.В июне я собрал себе новый компьютер
на Celeron 448 (4x112) и посыпались ошибки. Если кто помнит, лето 1998г.
выдалось жаркое. Мучался долго ( и напряжением и хороший радиатор....),
система заработала достаточно надежно .... почти ....
В среднем происходил 1 сбой в день. Главный вопрос остался открытым:
--- Кто виноват - процессор или память?? Да и ошибки типа '1 сбой в
сутки' вылечить КРАЙНЕ трудно ! А я хотел точно знать причину.
Конечно, можно поставить 266MHz и проблема уйдет ..... только не
за этим UpGrade затевался.
Т.о., намучившись окончательно, решил погонять память (на процессоре
все разумные действия уже были произведены). А вот тут и началось самое
интересное ..... Программ, тестирующих память много ... очень много ...
и ... нет!!
1. Мало кто может проверять ВСЮ память.
2. Все они написаны в эпоху XT и работают КРАЙНЕ медленно.
Единственное, что как-то подошло - RAMEXAM.
Полный тест занимает 10 часов, а при выключенной cache 2 level - 25
часов (что говорит об 'отличной' оптимизации кода).
На время выполнения теста памяти вообще не должно оказывать влияния наличие
или отсутствие cache 2 level, да и размер cache 1 level не особенно
важен. Теоретически, если отключить cache 1 level, скорость доступа к
памяти не должна упасть .... вот только сами команды процессора будут
выполняться медленнее.
Чтож ... пришлось писать свое.
Есть и вторая, более серьезная, причина - при работе DRAM (SDRAM)
нагревается. Одно время у меня стоял MR BIOS и
находясь в SETUP MR BIOS случайно дотронулся до SIMM.
Они были ОЧЕНЬ горячие. Оказывается, эти ребята на фоне еще и память
тестировали. Вывод - при прокачке данных память греется и даже очень
сильно. А ведь это 'нормальный' режим для 3D action games.
И если программа 'медленно' тестирует, то ошибок может не найти.
Да и chipset подогреется, не зря-же на нем стоит радиатор ( ASUS P2B ).
Описание работы.
Проверка памяти состоит из трех фаз:
1. Запись всей памяти фиксированной или переменной последовательностью.
2. 'Быстрое' чтение с помощью MMX комманд.
3. Чтение и проверка.
Фаза 1 выполняется 1 раз, а фазы 2 и 3 несколько раз. Фаза 2 работает
очень быстро и служит для разогревания chip'ов памяти. Проверка считанной
информации на правильность не производится (значительное снижение скорости).
Шаблон, которым прописывается RAM, состоит из четырех 8-и байтовых слов:
A,B,A,B. Где B = инверсия A.
При таком построении шаблона по шине данных по всем битам просходит постоянная
смена уровня 0/1/0/1 ..., что повышает вероятность обнаружения ошибки и
увеличивает нагрев как RAM так и chipset.
Шаблон может быть как фиксированный, тогда вся RAM прописывается неизменными
числами A,B,A,B; так и переменным. В этом случае шаблон формируется по
правилу: A,B,A,B,A+const,B-const,A+const,B-const,A+2const...где const
смещение между последующими записями шаблона.
В данной реализации const = -7, при этом достигается компромис между расстоянием
записей по адресам и уменьшением кол-ва переходов 1/0/1/0 по шине
данных.
Режим с постоянным шаблоном лучше подходит для нагрева RAM, но с переменными
- позволяет определить адресные ошибки. По опыту применения - на более
чем 100 тыс. ошибок не было ни одной ошибки по адресу.
Впрочем, на безбрежном море типов ошибок ... - попробуйте и постоянный
и переменный шаблон.
В версии 1.2 сделана оптимизация теста под интерфейс DDR.
Посмотреть эффективность можно в логе.
Принцип выбора шаблонов.
Если-бы знать реальное расположение битов по модулю памяти, возможно
было-бы написать оптимизированный алгоритм формирования шаблонов ....
Но, к сожелению, даже на одной плате ASUS P2B в разных слотах биты
перемешаны.
Т.о., в программе применяется псевдо-случайный выбор шаблонов.Причем,
каждый нечетный шаблон есть инверсия четного (на четном шаблоне в этом
бите был переход 1/0, а в нечетном шаблоне 0/1 .....).
Практика показала, что у разных шаблонов ВЕСЬМА различная вероятность
вызвать ошибку.
Внешний вид.
Описание ключей.
-f ( fast ) - используется при пробном запуске.
-d ( default ) - 50 циклов при 2х операции чтения.
-s ( slow ) - 200 циклов при 5х операций чтения.
-l ( long ) - 2000 циклов при 5х операций чтения.
-v ( very long ).- 4000 циклов при 25х операций чтения.
-1 - 1х операции чтения - для предварительного запуска (не рек-ся).
-2 - 2х операции чтения - применять для медленных машин.
-5 - 5х операции чтения - баланс между качеством проверки и скоростью переборки разных шаблонов.
-0 - 50х операции чтения - ну очень долго и старательно - эмулирует программную область RAM. Для запуска на ночь.
Ключи -1...-0 указываются после выбора кол-ва циклов проверки.
-p - включение переменных шаблонов. По умолчанию - фикс. шаблоны.
-b - пищать при обнаружении ошибки (не стоит).
-e - не печатать ошибки на экран/файл - не свсегда нужно знать ГДЕ, важнее бывает - СКОЛЬКО ( пример - изменил настройку в BIOS - как повлияло? )
-m - добавить фазу быстрого чтения с использования MMX комманд.
>>ERRORS.TXT - отправить ошибки в файл ... мне кажется, что иногда полезно.
-h - помощь.
Ограничения.
a. Область DOS ( ниже 1Mb ) не тестируется, т.к. если память сбоит, то равномерно по всему об'ему модуля.
b. Есть проблемы с MMX ... об'ем кода сильно возрастет, а эффективность весьма спорна.
Идея состояла написать МАЛЕНЬКУЮ программу, чтобы точно поместилась в cache 1 level.
Так что ... по 'MMX read' есть ограничения:
1. 'MMX read' греет только первый модуль памяти.
2. Если включена cache 2 level, то 'MMX read' в основном мучает cache.
- лучше отлючить ... хотя ... cache то-же полезно проверить.
3. При включенной cache 2 level 'MMX read benchmark' показывает доступ к cache, лучше выключить.
Аппаратура тестирования и результаты.
- ASUS P2B, Celeron 266 ( 448 = 4 * 112 )
- SDRAM - 2 * 32Mb = 64Mb - Fujitsu, chips 81117822E-100FN
- Время до появления ошибок (время разогрева) ~3 минут.
- benchmark: 202Mb/720Mb/320Mb (см. таблицу)
- то-же с CAS Latency = 3 - 192Mb/695Mb/316Mb - сбоев НЕТ!
|
процессор |
K5-75 |
P75 |
P208 |
K6-200 |
K6-208 |
Celeron448 |
| Write |
35 |
62 |
105 |
80 |
87 |
202 |
| MMX read |
- |
- |
167/256* |
163/227* |
167/253* |
720 |
| Read |
63 |
47 |
88 |
93 |
94 |
320 |
* - cache 2 level = disable/enable
* - первое значение более реально, второе - скорость cache 2 level.
Такие сильные различия могут означать только одно - socket 7
отправился на кладбище .... (ну а если к нему еще и AGP прикрутить то
совсем ...)
- Если заменить шаблон вида A,B,A,B на A,A,A,A то вероятность
обнаружения ошибки уменьшиться более чем в 100 раз (27040/250),
что подтверждает правильность правила формирования шаблона.
- При нагреве до +38С mainboard (+58С ядра CPU) на стандартном тесте
27070 ошибок по ВСЕЙ памяти.
- Операция записи не порождает ошибок, все ошибки по чтению,
поэтому значительно эффективнее применять большой коэф-т повтора
операции чтения.
- У меня ошибки возникали на 26,35,44... шагу.
Вывод - надо запускать тест не меньше чем на 200 циклов.
- Время выполнения теста: 'default' ~ 36 сек, 'slow' ~ 4 мин,
'long' - 40 мин , 'very long' - 6 час.
Добавление фазы MMX чтения увеличивает время процентов на 25-30.
- Вероятность возникновения ошибки с фиксированным шаблоном
на 10% выше, чем с переменным.
Что, где, ...???
Эта редакция TestMem обладает тем замечательным свойством, что работает почти на
любом компьютере, если он не слишком древний, конечно.
Короче, если Вы хотите сгрузить TestMem1 , всегда пожалуйста,
но, я попросил бы Вас вначале прочитать этот документ. Поверьте, он очень
Вам поможет!