|
||||
|
Программа для визуального представления производительности системной памяти.
Зачем нужна эта программа Что нового Внешний вид Небольшое описание Что, где, ...?? |
||||||||||||||||||||||||||||||||||
Зачем нужна эта программа.
В начальной версии строятся два графика: Что нового.
пока ничего, будет(?). Небольшое описание.
Выбор режима доступа из normal,MMX,SSE выбирается автоматически
по доступности этого набора команд в процессоре и максимальной производительности.
Для измерения cache 1 level, скорости памяти по чтению и скорости по записи, выбирается
свой, оптимальный режим. Если при refresh этот тип меняется, то означает практически
равную производительность режимов. Что, где, ...???
Программа сгенерирована в 3х версиях: с 32-байтным блоком, с 64-байтным блоком и
с 128-байтным блоком
Позже выпущу совмещенную версию(вряд-ли). Если Вы сомневаетесь в честности программы, я могу представить
исходники программы. Вы можете делать с ними что
угодно при одном обязательном условии - никакие идеи и алгоритмы не могут
быть использованы в не-freeware программах! WARNING! email на hotmail практически не работает!
- производительность системы кеширования
- зависимость скорости чтения и записи системной памяти от режима достуап по адресам
Хотелось бы сделать:
- график скорости D-cache(есть)
- график скорости I-cache
- производительность памяти при 4,32,64,128-байтном доступе
- график memory latency для разного --.--.--.-- доступа
- вычисление блока передачи данных по memory latency
- прочее, пока трудно сформулировать.
В начальной версии, программа имеет 3 окна:
- производительность cache 1, 2 level и внешней памяти.
Особая точность в этом числе не важна - его значение используется для вычисления
времени выполнения тестов с применением команды RDTSC.
Внизу окна выводится:
- выбранный метод доступ к памяти из:
- normal - доступ через обычные команды чтения и записи
- MMX - доступ через MMX расширение
- SSE - доступ через SSE расширение.
Для расширения SSE2 используются
те же команды, что в SSE и уточнение режима SSE или SSE2 не требуется.
- скорость чтения из cache 1 level
- скорость чтения из cache 2 level
- скорость чтения из системной памяти
Также на этом окне есть кнопка Refresh, позволяющая перезапустить тест на этом окне.
На втором окне выводится скорость чтения и записи
для разного 'прыжка' по адресам. Например, позиция 1Kb означает, что следующий доступ смещен от
текущего на 1Kb в сторону большего адреса и его скорость равна соответствующим позициям графиков. Значения с
отрицательными числами соответствуют смещению нового адреса в сторону уменьшения адресов.
Цифра 0 обозначает прямое последовательное потоковое чтение (и запись). Отдельные всплески, кроме зоны около 0,
означают случайную синхронизацию в связке CPU-...-RAM, что и вызывает всплеск производительности.
На третьем окне приведена лицензия и ссылки на mail и эту страницу. Вряд-ли
стоит приводить ее внешний вид, ничего интересного там нет.
В программе предусмотрены специальные меры предотвращения искажения результатов из-за
загруженности операционной системы. К примеру, если отсутствуют тяжелые задачи или
DOS-окна, то программа выполняется много быстрее, чем при их наличии. Я не стал
делать этот механизм очень 'упорным', иначе на загруженном компьютере результата
придется ждать очень долго. Соответственно, опция "High priority" не очень и
нужна. При включении этой опции задача имеет действительно HIGH priority
и даже мышка не будет перемещаться. Ничего страшного, компьютер не сломается.
Противодействие задержкам операционной системы достаточно эффективно и особого
смысла ставить эту опцию нет. Впрочем, если Вы считаете нужным - пожалуйста.
Кодга уже сделал начальную версию понял, что обязательно надо выводить данные
как для 32-байтного, так и для 64-байтного блока тестирования. Накладные расходы
для переделки превысили все разумные рамки и .... проще сделать новую редакцию
заново. Т.о., сейчас есть 2 одинаковые версии - для 32 и 64 блока.
Основная причина - дл процессоров до Pentium3 включительно размер блока
обмена с внешней памятью равнялся 32 байта, а в Athlon и Pentium4 это число
было увеличено.
Еще одна очень важная вещь - в программе нет никаких компенсаций!
Сколько реально выполняется тест, столько и выводится на график и в результат.
В программе учитывается только один параметр - время выполнения команды RDTSC,
по которой запрашивается системный счетчик процессора. RDTSC показывает количество
тиков процессора (величина обратная частоте процессора) и позволяет измерять время
предельно точно.
Сейчас поясню причину появления этой задержки...
Обычная проверка времени производится как-то так:
rdtsc
тестирование
rdtsc
По двум значениям системного счетчика можно точно измерить время, но
сами операции RDTSC занимают какое-то время! Положим, что процессор выдает
значение своего счетчика на самый конец операции RDTSC, тогда время выполнения
всей второй команды RDTSC попадет в общее время. Т.о., чтоб получить
реальное время, затраченное на тестирование, надо из приведенного значения
вычесть время на одну операцию RDTSC, что и делается в программе.
Как подтверждение сказанного, на Pentium2/3 время выполнения команды
RDTSC очень велико и без учета этого фактора кривая производительности
cache на первом окне будет загнута вниз. Если посмотреть на график моей программы
- горизонтальная линия.
Resume: в программе нет никаких поправок! Возможно, что применены не самые
оптимальные режимы доступа .... над этим буду работать.
Прошу сразу учесть, что она написана на ассемблере.