Бенчмарки I/O портов и записи в видеопамять

Поиск, обмен ссылками, вопросы по устаревшему программному обеспечению.
Ответить
Mickle
Newbie
Сообщения: 63
Зарегистрирован: 16.08.2015,00:07
Откуда: г. Рыбинск

Бенчмарки I/O портов и записи в видеопамять

Сообщение Mickle » 04.04.2018,23:34

Две крошечные консольные DOS-утилиты для оперативного контроля пропускной способности (кбайт/сек) портов ввода-вывода и видеопамяти. Написаны давно, около 20 лет назад. Использовал при изучении влияния wait-states, частот, делителей, буферов и т.п. 386+ материнских плат. Исходники на TP7 в архивах.

1) IOSpeed - скоростемер портов.
Строка запуска: IOSpeed.exe port [options]
port - шестнадцатиричный номер порта ввода-вывода, [options] - опциональные параметры.
Параметры: R - режим чтения, W - режим записи, 1 - чтение/запись байтами, 2 - словами, 4 - двойными словами (только на 80386).
Пример использования: IOSpeed.exe 378 RW12
По завершении выводится сводная таблица с результатами 5-ти итераций в каждом выбранном режиме.

Изображение Изображение

2) VIDSpeed - скоростемер видеопамяти на запись.
Строка запуска: VIDSpeed.exe [Mode]
[Mode] - шестнадцатиричный номер видеорежима.
Пример использования: VIDSpeed.exe 101
Краткое описание:
Программа предназначена для сравнительной оценки эффективности различных методов пересылки данных между основной памятью и памятью видеоадаптера. В качестве параметров командной строки задается номер видеорежима в шестнадцатиричной форме (можно задавать любой графический режим, в том числе VESA, но с сегментом видеопамяти A000:0). Далее, при успешной установке требуемого видеорежима выполняется последовательно 5 (4 - в случае отсутствия сопроцессора) пересылок 64000 байт данных из RAM в VRAM видеокарты следующим образом:
1. rep movsb (8 bit)
2. rep movsw (16 bit)
3. rep movsd (32 bit)
4. mov eax,[esi+xx] / mov [edi+xx],eax (32 bit x 256)
5. через FPU (2 x qword) 128 bit
Отсчет времени выполнения тестов проводится по второму каналу таймера с дополнением слева битом переполнения (динамический диапазон 0..131071 тиков, 1 тик 1/1193180 с, прерывания можно запрещать). Последний тест показывает возможные резервы видеосистемы, так как в нем используется 64-х битовые пересылки. Для более объективных результатов необходимо наличие быстрого математического сопроцессора (Pentium). По полученным результатам можно судить об особенностях цепочки: [ RAM -> BUS ->] CPU -> BUS -> VRAM и сделать некоторые выводы...


Изображение

wbcbz7
Advanced Member
Сообщения: 437
Зарегистрирован: 17.02.2014,12:24
Откуда: omsk || nsk

Сообщение wbcbz7 » 05.04.2018,20:09

спасибо за утилиты, особенно за IOSpeed (не припомню бенчей для портов ввода-вывода)
По поводу бенчей видеопамяти - я недавно писал VIDBENCH, он тестирует и VESA LFB-режимы + чтение/запись из/в видеопамять (правда только 8/16/32 бит, было лень впиливать FPU/MMX пересылки, плюс замеры идут через таймер RTC), надо как-нибудь сесть и доделать :)

Mickle
Newbie
Сообщения: 63
Зарегистрирован: 16.08.2015,00:07
Откуда: г. Рыбинск

Сообщение Mickle » 05.04.2018,21:50

Отличная программа VIDBENCH! Поддержка LFB может особенно пригодиться, к примеру, при настройке write combining / MTRR MSR на AMD K6-х.

Таймеры, особенно на ретрокомпьютерах - та ещё головная боль. TSC в допентиумную эру отсутствует. 2-й канал 8254 очень короткий, максимум 0,11 сек для DOS и 0,055 сек для Windows VDM/NTVDM виртуальных машин. RTC перепрограммировать на ускоренный счёт с прерываниями - дело потенциально опасное для BIOS функций. То же можно сказать и про нулевой канал 8254. В итоге лично я пришёл к выводу, что на 386+ (и даже 286+) компах всё же удобнее использовать нулевой системный канал таймера без перепрограммирования и перехвата прерывания, т.е. as is. Текущее время считывается квазиатомарно: сначала BIOS счётчик тиков, затем защёлкивается счётчик 8254 и после проверяется условие переполнения, которое может произойти из-за не атомарности операций чтения. В итоге получаем стабильный длинный счётчик с дискретой около 1 мкс и гарантией монотонности хоть на AT 286, хоть на пентиуме. Единственное, что может нарушить монотонность хода, это SMI. Включенная legacy поддержка мышей, клавиатур, USB накопителей гарантированно будет давать случайные отрицательные приращения текущего времени. На платформах Cyrix MediaGX/NS Geode с их VSA архитектурой добавится ещё куча неотключаемых SMI источников.

var
FPUStore: double;
const
i8254Time:double = 8.3809581278950972233047626470753e-7;

function GetSystemTime:double; code; {use i8254}
asm
xor eax,eax
mov ebx,dword [46Ch]
out 43h,al
mov edx,dword [46Ch]
in al,40h
mov ah,al
in al,40h
xchg al,ah
cmp ebx,edx
je @SkipCorrection
or ax,ax
js @SkipCorrection
mov edx,ebx
@SkipCorrection:
not ax
mov word [FPUStore],ax
mov dword [FPUStore+2],edx
mov word [FPUStore+6],0
fild qword [FPUStore]
fmul qword [i8254Time]
ret
end;

Ekb
Advanced Member
Сообщения: 2606
Зарегистрирован: 15.06.2014,11:31

Вклад в сообщество

Сообщение Ekb » 12.04.2018,13:38

IOSpeed
VIDSpeed
- обе программы требуют сопроцессора (

Mickle
Newbie
Сообщения: 63
Зарегистрирован: 16.08.2015,00:07
Откуда: г. Рыбинск

Сообщение Mickle » 15.04.2018,22:14

Виноват. Привык, что во всех моих ПК, начиная с СМ 1810, были сопроцессоры.
Перекомпилировал и перезалил в шапку. Протестировать пока не на чем.

Ekb
Advanced Member
Сообщения: 2606
Зарегистрирован: 15.06.2014,11:31

Вклад в сообщество

Сообщение Ekb » 15.04.2018,23:20

Хорошо, позже проверю сопроцессор :)

COM-порт - я не особо разобрался, какие-то нолики. (может кабель нужно подключить "сам в себя" ?)

VID - работает только с эмулятором 386 :) .. а так, зависает (проц 286, синий экран и завис). Получится ли убрать 32-битные инструкции? Или это необходимо для подсчета DWORD ?

Mickle
Newbie
Сообщения: 63
Зарегистрирован: 16.08.2015,00:07
Откуда: г. Рыбинск

Сообщение Mickle » 15.04.2018,23:39

IOSpeed измеряет скорость чтения/записи в пространстве портов ввода-вывода, но не передачи через интерфейсы. COM, LPT и пр. здесь не при чём :frown:
Как только запущу 286, проги переделаю под него.

Ответить