Программа проверки памяти TestMem V
[ · Скачать удаленно () ]12.11.2019, 13:01

Зачем нужна эта программа.

Ну, я думаю, вы знаете о чем программа, всё-же 5 версия. На данный момент с тестами памяти не плохо, а совсем плохо. Не хотел бы говорить про 'все' тесты, но большенство не догадываются о существенных изменениях в аппаратуре. И основной 'вред' вовсе не от памяти, она-то мало эвалюционизировала, а именно от процессора и контроллера памяти (в меньшей степени). Процессоры стали быстрее, их стало много и они стали странными. :) Например, раньше память 'сидела' на одном контроллере, с которым общался процессор. Сейчас память может висеть на разных процессорах и, как следствие, иметь разное 'расстояние' от конкретного процессорного ядра до конкретного модуля DIMM. Кроме того, возрос объем кешей в процессоре, что может сказываться на тестировании. Например, в TM4 использовался размер тестового блока 512К. На момент написания программы это было оптимумом, но сейчас данный блок тихо умещается в L2 и тест работает совсем не так, как задумывалось. Скажется этот неприятный момент на качестве обнаружения сбоев в памяти? НесомненноЮ и самым отвратительным образом. Увы. Другие программы могут оперировать блоком доступа, который сейчас крайне неразумен и вызывает больше проблем, чем мифической выгоды. Устаревает всё. Увы, сея участь постигла и MemTest86. Весьма неплохой и эффективный, сейчас он тихо деградировал до 'просто тест'. Причина таже - тестовые модули давно не менялись, а аппаратура не стоит на месте.
Впрочем, если хитите почитать страшилку по проблемам тестирования -
пожалуйста :)

Что нового.

Добавлена полная поддержка 16 тестов и возможность загружать другие файлы конфигураций тестирования. К сожалению, полный и незаметный перезапуск программы очень сложен, поэтому придется воспользоваться "ручным" запуском. После установки нового файла настроек программа закрывается.

Внешний вид.

TestMem 5

В окне программы, слева, выводится тип и наименование процессора, его частота, количество ядер и поддерживаемые режими SSE.
В правой части указывается состояние системной памяти - сколько есть в наличии и сколько занято программой.
В середине слева показывается ход тестирования, при обнаружении сбоя ячейки 0-5 меняют цвет на красный и количество сбоев выполнения тестов выводится в разделе 'состояние' в середине справа.

Небольшое описание.

Это программа построена по несколько другому принципу, чем все предыдущие. А именно - она настраиваемая. Причем, ее можно настроить пользователем под те условия, которые ему покажутся лучшими. В программе есть понятие 'тестовый модуль' и 'тест'. Модуль вызывается для выполнения тестирования, но он может (и должен) конфигурироваться по разному. Формально говоря, тесты в S&M представляют собой один и тот-же модуль, но с разными настройками - вы видели, что эффективность тестов существенно различается? ... причем для разной памяти (разных производителей) этот эффект может быть различен. Ну а если эффективность меняется, то из этого логичный вывод - подстройкой параметров можно ее (эффективность то бишь) поднять. Трудно считать оптимальной программу, которая написана 5 лет назад. :) Итак, тест = тестовый модуль + индивидуальные настройки. Второй момент - количество тестовых тредов. С точки зрения современных процессоров, кол-во потоков тестирования должно быть больше одного, что позволит проще (точнее чаще) общаться процессорам с 'своей' памятью. Особенно сие касается К10-11-12 с его распределенной шиной. Программа поддерживает разное (скажем мягко) кол-во нитей тестирования. По опыту S&M могу сказать - самый быстрый режим для одного процесса, но мне многократно сообщали, что включение множественного режима, хоть и приводит к небольшому снижению скорости, но повышает эффективность работы алгоритма. Ну ... хоть скорость работы это почти синоним качества (ибо медленный алгоритм не найдет ошибок), но с практикой спорить глупо.
На данный момент планируются (и поддерживаются) следующие параметры тестов:
- размер блока. Чем меньше, тем эффективнее алгоритм. Но, если блок влезет в кешь, то алгоритм провалится.
- метод обхода блока. Линейный или прыгающий. Первый имеет высокую скорость, второй - интенсивнее загружает связку контроллер-DIMM и приводит к бОльшему нагреву памяти. (гм, не зря же четвертый тест в S&M так нагревал память).
- принцип генерации шаблонов. Постоянный, переменный и случайный.

Тестовые модули.
Пока их всего два, но это временно.
1. Тест 0, а именно и только на нем работает этот модуль - проверка стабильности данных. Идея тут в том, что вся память расписывается неким не_постоянным шаблоном, потом выполняется тестирование и проверяется сохранность этих данных.
Тест сильно снижает скорость тестирования.
2. SimpleTest - хоть и называется простым, но это скорее сарказм. Поддерживаются все настройки (размер-метод-шаблон), но не слишком эффективно оптимизирован из-за повышенной универсальности. Однако, потери из-за неоптимальности программной реализации не столь велики и нивелируются при включении многопотокового тестирования - несколько процессоров забивают канал ввода-вывода памяти на 100%. :) Впрочем, если что-то можно будет упростить,то скорость возрастет.
Особенность: программа состоит из двух частей - запускающей программы и DLL с тестовыми модулями. Распаковывать всё и с сохранением каталогов.

Написал две функции: MirrorMove и MirrorMove128.
Суть в том, что тестовый блок выворачивается на изнанку. При этом идут на встречу два процесса чтения и записи. Если контроллер памяти пытается умничать и адаптироваться к режиму доступа, то от такой порнографии его бошку должно снести - два равных по силе процесса в + и в - адресации никогда не бывает. Сами функции только перетрясают блок, но не тестируют сохранность данных. Для проверки используется тест 0. Поэтому, если хотите использовать эти функции, то не выключайте тест 0.

MirrorMove
- зеркально отображает блок тестирования. При четном кол-ве отражений конечное состояние блока не меняется (если нет сбоев). Сам блок может разбиваться на несколько субблоков и 'зеркалироваться' [i]одновременно[/i]. Это порождает большие проблемы у контроллера (и самой памяти) - чаще приходится перегружать страницы SDRAM.
Настроечным является только Test Block Size и Parameter, который может принимать значения 1,2,3,4 - это количество субблоков в блоке.
Все остальные настройки (а это режим генерации шаблона) игнорируются.

MirrorMove128
- аналогично MirrorMove, но работает несколько иначе - операции производятся страницей 128 байт(см. ниже), между доступом делается дополнительное смещение. Т.е. перемещение (зеркалирование) делается полосами за несколько проходов - вначале четные полосы, потом нечетные (для 2х полос). Кроме бОльшей загрузки контроллера памяти это действо вызывает интенсивную перезагрузку страницы в SDRAM, что повышает вероятность сбоя в ней. (ну и нагрев, конечно)
Настроечным является только Test Block Size и Parameter, который может принимать значения от 0 и больше. Сам Parameter означает, на сколько надо [i]дополнительно[/i] сместиться в страницах по 128 байт. Т.е. 0 будет означать линейный доступ (почти как в MirrorMove), 1 - пропускать страницу и прыгать 'через раз', 2 - пропускать 2 страницы (256 байт) ....
Соответственно, Parameter задает кол-во дополнительных полос (проходов) для заполнения всего блока. Если судить по времени выполнения перемещения, то, для Core2 (наверно, и других процессоров с старым режимом интерливинга) часло 510 вызывает наибольшие проблемы. А значит, оно потенциально интересно для тестирования. Для других процессоров и систем хорошо бы проверить числа в степени двойки за вычитом 2. Это '-2' заставляет выбирать не одну, а две страницы SDRAM, что и вызывает увеличение времени. Т.е., для оптимизации хорошо-бы проверить ряд 128-2=126, 256-2, 512-2, 1024-2, 2048-2.

По поводу доступа в 128 байт - это сделано специально. Как правило, блок передачи данных по шине 64 байта, что соответствует строке кеша, но в Core2 (и выше) эта строка спарена и ее размерность 128 байт. Если читать по 64 байта, то скорость загрузки упадет. Кроме того, в новых процессорах (AMD K10,K11...; Intel Core i*) интерливинг не строчный, а блоковый и блок доступа 64 байта. Т.о. при доступе в 128 байт считываются оба DIMM.
Дальнейшее увеличение с 128 до 256 байт пока не актуально ... но сделать можно. Будет MirrorMove256 :)

В TM5 версии 0.5 изменена размерность представления блока тест тестирования. Раньше это было в байтах, теперь в мегабайтах. Аргумент в том, что маленькие блоки замечательно закешируются в L2/L3 и тестироваться не будут. Смысл? Смысла нет, а удобство страдает, вот и изменил.
Т.к. в современных процессорах кеш больше 4Mb (или порядка того), то числа 0-3 не интересны и они интерпретируются специальным образом. А именно - как степень разбиения окна.
Тестирование выполняется в окне 1Gb (это число можно изменить) и тестовый блок должен уместится в нем. Можно указать размер тестового блока в абсолютном значении Mb, а можно как часть окна. Вот числа 0-3 и задают эту 'часть'.
0 = всё окно
1 = 1/2 окна
2 = 1/3 окна
3 = 1/4 окна
Наверно, для функций MirrorMove* лучше укзывать 0 и отдавать всё окно.

Настройка.

После запуска программы в каталоге bin появился файл MT.cfg, он и является файлом настройки тестов.
Enable=1 - 1=включено, 0 = выключено
Time=100 - врермя тестирования, 100%
Function=SimpleTest - название функции
DLL Name=bin\MT0.dll - название dll
Pattern Mode=1 - тип шаблона. 0 = постоянный, 1 = переменный, 2 = случайный
Pattern Param0=0x1E5F - используется для генерации шаблона; Для режима 2 служит множителем
Pattern Param1=0x45357354 - аналогично. Для режима 2 добавляется к шаблону.
Parameter=0 - принцип перемещения по адресам.
Test Block Size=4194304 - размер блока, в байтах

Для генерации шаблона в режиме 2 используется простая формула получения RND = Значение * Param0 + Param1

Parameter - способ перехода к следующему блоку. 0 = линейный (последовательный) обход. Другие значения - только по своему DIMM. Само число - на сколько смещаться.
Идея в том, что вначале проверяется один DIMM, потом второй (и третий, для вариантов типа Core i7).
Блок доступа, т.е. число байт, снимаемых с одного DIMM за раз 64 байта. Соответственно, поставив Parameter = 1 проверка будет идти по каждому блоку выбранного DIMM. Если "2" - то через один .....
Кстати, тут важен раздел настройки аппаратуры. Думаю, почти у всех память стоит в парных слотах и режим DUAL работает. Значит надо сделать одно - переключить режим Intreliving. 0 для старых процессоров (без встроенного контроллера памяти) и 1 для новых.
У менеджера памяти в Windows 7 есть одна особенность - как только у Windows возмешь память, так она сразу начинает высвапливать еще и еще. Обычно, достаточно подождать несколько циклов и этот процесс успокоится. Если мешает, то можно отключить этот 'мягкий' режим запрашивания памяти.
Если поставить: Capable=0x0 , то занятая память будет сразу защелкиваться.

Источник: http://testmem.tz.ru/testmem5.htm
 
Категория: Работа с оперативной памятью | Добавил: Professional3016
Просмотров: 428 | Загрузок: 163 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]