реклама на сайте
подробности

 
 
> Время отклика USB-устройства....
qqqqqq
сообщение Oct 16 2007, 10:26
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 17-01-06
Пользователь №: 13 277



Померял время между отправкой одного bulk-пакета и приёмом другого. Получил в среднем 40мс.
Что-то не этого я ожидал от HS USB.
Длина пакетов была 10 байт. Драйвер CYUSB, микросхема CY7C68001, на выходе которой стоит CPLD, разворачивающая приходящий пакет, инвертируя его, в синхронном режиме на скорости 48МГц 8бит.

Как бы сократить это время раз этак в 40тысяч?...
Похоже, где-то я действую неправильно...
В интернете ничего на данную тему найти не смог, кроме упоминаний, что "USB response time is unacceptably slow". Неужели этого и добивались разработчики данной шины?
Даже не верится...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
oran-be
сообщение Oct 20 2007, 11:09
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621



Чего то как то совсем непонятно.... У шины время кадра на полной скорости 1 мС, а на высокой микрокадр - 0.125 мс. В течении этого времени в самом худшем случае ( это тот случай, если имеется простейший планировщик пакетов - один запрос в кадре) мы буим иметь задержки 2 мСек и 0.25 мСек соответственно. Хотя я еще ни разу не видел простых планировщиков пакетов. На полной скорости шина умудряется в течении 1 мсек пропустить 64 булк пакета туда и обратно при условии, что функция не тормозит с ответом и она на шине единственная. Вопрос заключается в том, каким образом измерялось время реакции. Если через GUI, то можно получить время реакции и больше.
Вообще при таких скоростях самая большая проблема - это грамотная организация потока записи в драйвер и вычитывания из него.

Сообщение отредактировал oran-be - Oct 20 2007, 11:11
Go to the top of the page
 
+Quote Post
qqqqqq
сообщение Oct 23 2007, 16:00
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 17-01-06
Пользователь №: 13 277



Цитата(oran-be @ Oct 20 2007, 17:09) *
Чего то как то совсем непонятно.... У шины время кадра на полной скорости 1 мС, а на высокой микрокадр - 0.125 мс. В течении этого времени в самом худшем случае ( это тот случай, если имеется простейший планировщик пакетов - один запрос в кадре) мы буим иметь задержки 2 мСек и 0.25 мСек соответственно. Хотя я еще ни разу не видел простых планировщиков пакетов. На полной скорости шина умудряется в течении 1 мсек пропустить 64 булк пакета туда и обратно при условии, что функция не тормозит с ответом и она на шине единственная. Вопрос заключается в том, каким образом измерялось время реакции. Если через GUI, то можно получить время реакции и больше.
Вообще при таких скоростях самая большая проблема - это грамотная организация потока записи в драйвер и вычитывания из него.


1. Консольное приложение считывает тек. время (QueryPerformanceCounter),
2. отправляет драйверу CYUSB.SYS запрос на транзакцию по OUT-ендпоинту,
3. драйвер некоторое время думает, потом возвращает управление приложению,
4. приложение отправляет драйверу второй запрос уже по IN-ендпоинту,
5. драйвер опять думает, на этот раз гораздо дольше и снова возвращает управление, после чего принятый пакет появляется в буфере.
6. Приложение второй раз считывает время и считает разницу.

Получается время от 20 до 100 мс. 40 мс в среднем.

Для LPT-порта такой фокус выполняется около 2 мкс, только, естественно, драйвера там нет, а есть команды процессора IN и OUT.

Так что GUI тут ни при чём.


Цитата(blackfin @ Oct 20 2007, 21:13) *
Так то оно так, но USB Root-Hub скорей всего подключен через шину PCI,
так что для него тоже имеет значение установки BIOS'а.
Попробуйте уменьшить в BIOS'е PCI_Latency_Timer, скажем, до восьми.
По умолчанию, PCI_Latency_Timer обычно равен 32, а это при частоте PCI шины 33 МГц
дает задержку на доступ к шине равную 32*30 нс = 0.96 мкс.
Поскольку для обслуживания прерывания требуется несколько обращений к шине PCI,
это может приводить к задержке в несколько мкс.


Попробовал... Похоже или виндоз при загрузке её переопределяет всегда как 32, или это число вообще ни на что не влияет. Всегда примерно 1мкс...

Забавно выглядит на анализаторе: два-три цикла шины - обмен, 30 циклов - пауза. А проц в это время ждёт чего-то...
Go to the top of the page
 
+Quote Post
Седой
сообщение Oct 24 2007, 05:23
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(qqqqqq @ Oct 23 2007, 22:00) *
Получается время от 20 до 100 мс. 40 мс в среднем.


Все правильно, так и будет при таком использовании.
Go to the top of the page
 
+Quote Post
qqqqqq
сообщение Oct 24 2007, 07:03
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 17-01-06
Пользователь №: 13 277



Цитата(Седой @ Oct 24 2007, 11:23) *
Все правильно, так и будет при таком использовании.


Непонятно, что мешает драйверу при свободной шине отправить запрос на чтение сразу при получении этого запроса от приложения? Зачем ждать 40мс?
Go to the top of the page
 
+Quote Post
Седой
сообщение Oct 24 2007, 08:33
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(qqqqqq @ Oct 24 2007, 13:03) *
Непонятно, что мешает драйверу при свободной шине отправить запрос на чтение сразу при получении этого запроса от приложения?


По CyUSB ничего сказать не могу, нет исходников.
Попробуйте EzUsb.

Цитата
Зачем ждать 40мс?

Это вы спросите у Microsoft и Cypress.

PS. Какую версию SuiteUSB используете?
Go to the top of the page
 
+Quote Post
qqqqqq
сообщение Oct 24 2007, 09:01
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 17-01-06
Пользователь №: 13 277



Цитата(Седой @ Oct 24 2007, 14:33) *
PS. Какую версию SuiteUSB используете?


Версия драйвера CYUSB 1.07.0000.0, но пробовал и с более старыми - результат такой же.
Команда IOCTL_ADAPT_SEND_NON_EP0_TRANSFER
директовую команду не пробовал, но кажется, результат не изменится...

Попробую EZUSB...
Go to the top of the page
 
+Quote Post
qqqqqq
сообщение Oct 26 2007, 09:45
Сообщение #8


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 17-01-06
Пользователь №: 13 277



Цитата(qqqqqq @ Oct 24 2007, 15:01) *
Попробую EZUSB...


попробовал EZUSB. сразу получилось около 1.9 мс, но иногда (достаточно редко) бывает и до 4мс.
Т.е. по латентности этот драйвер шустрее CYUSB в десятки раз..
Этот результат получен при включенном отладочном протоколировании.
Вот протокол драйвера:
0.00001090 IRP_MJ_DEVICE_CONTROL
0.00002403 enter Ezusb_Read_Write()
0.00003632 enter Ezusb_CallUSBD
0.00004889 Calling USB Driver Stack
тут ок. 70 мкс передаём запрос на запись шинному драйверу
0.00012599 return from IoCallDriver USBD 103
0.00013689 Wait for single object
тут 140 мкс ждём, когда шинный драйвер обработает запрос
0.00027797 Wait for single object, returned 0
0.00029026 URB status = 0 status = 0 irp status 0
0.00030143 exit Ezusb_CallUSBD (0)
0.00031373 Successfully transfered 0xa bytes
тут где-то 650мкс мы пребывали в диспетчере ВВ (в приложении между двумя DeviceIOControlами находятся с десяток ассемблерных команд (PUSH в основном)) И это при прямом методе (METHOD_IN_DIRECT, METHOD_OUT_DIRECT) общения с драйвером.
0.00095990 IRP_MJ_DEVICE_CONTROL
0.00097191 enter Ezusb_Read_Write()
0.00098281 enter Ezusb_CallUSBD
0.00099482 Calling USB Driver Stack
ок. 90 мкс передаём запрос на чтение шинному драйверу
0.00108338 return from IoCallDriver USBD 103
0.00109427 Wait for single object
180 мкс ждём, когда шинный драйвер обработает запрос
0.00127390 Wait for single object, returned 0
0.00128620 URB status = 0 status = 0 irp status 0
0.00129709 exit Ezusb_CallUSBD (0)
0.00130855 Successfully transfered 0xa bytes

и где-то 170 мкс находимся в драйвере EZUSB (в основном выдаём отладочные сообщения)
Плюс в лог не вошло время входа в первую функцию и выхода из второй - ещё 650 мкс в дисп. ВВ.
Итого получается 1.95 мс, как и измерилось приложением.

По итогам данного измерения можно резюмировать, что основную задержку даёт микрософтовский диспетчер ввода-вывода...
Осталось его как-то обойти и латентность уменьшится ещё в несколько раз. до полмиллисекунды.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- qqqqqq   Время отклика USB-устройства....   Oct 16 2007, 10:26
- - VDG   Цитата(qqqqqq @ Oct 16 2007, 14:26) Неуже...   Oct 16 2007, 12:51
- - Oldring   Цитата(qqqqqq @ Oct 16 2007, 14:26) Помер...   Oct 16 2007, 13:10
|- - qqqqqq   Цитата(Oldring @ Oct 16 2007, 19:10) По м...   Oct 16 2007, 14:08
|- - Oldring   Цитата(qqqqqq @ Oct 16 2007, 18:08) Менят...   Oct 16 2007, 14:14
||- - qqqqqq   Цитата(Oldring @ Oct 16 2007, 20:14) inte...   Oct 16 2007, 14:32
|- - blackfin   Цитата(qqqqqq @ Oct 16 2007, 18:08) Специ...   Oct 20 2007, 15:13
- - qqqqqq   Возникло у меня тут предположение одно.... Если п...   Oct 17 2007, 15:22
|- - Oldring   Цитата(oran-be @ Oct 20 2007, 15:09)...   Oct 20 2007, 17:34
||- - Седой   Цитата(Oldring @ Oct 20 2007, 23:34) Вопр...   Oct 21 2007, 10:59
||- - Oldring   Цитата(Седой @ Oct 21 2007, 14:59) Давайт...   Oct 22 2007, 06:25
||- - Седой   Цитата(Oldring @ Oct 22 2007, 12:25) И ка...   Oct 23 2007, 12:50
||- - Oldring   Цитата(Седой @ Oct 23 2007, 16:50) Я уже ...   Oct 23 2007, 13:32
||- - Седой   Цитата(Oldring @ Oct 23 2007, 19:32) До с...   Oct 23 2007, 13:48
||- - Oldring   Цитата(Седой @ Oct 23 2007, 17:48) Если в...   Oct 23 2007, 14:20
||- - Седой   Цитата(Oldring @ Oct 23 2007, 20:20) помо...   Oct 23 2007, 15:10
|- - Седой   Цитата(qqqqqq @ Oct 26 2007, 15:45) Остал...   Oct 26 2007, 09:56
|- - qqqqqq   Цитата(Седой @ Oct 26 2007, 15:56) Для Ez...   Oct 26 2007, 14:10
|- - Седой   Цитата(qqqqqq @ Oct 26 2007, 20:10) Прове...   Oct 26 2007, 15:43
|- - qqqqqq   Цитата(Седой @ Oct 26 2007, 21:43) Судя п...   Oct 26 2007, 17:44
|- - aaarrr   Цитата(qqqqqq @ Oct 26 2007, 21:44) Я нав...   Oct 26 2007, 17:51
|- - Седой   Цитата(aaarrr @ Oct 26 2007, 23:51) Да, в...   Oct 27 2007, 04:31
- - Седой   ЦитатаВообще при таких скоростях самая большая про...   Oct 20 2007, 14:19
- - AndreyS   Добрый день. После прочтения топика, хочется вст...   Oct 29 2007, 19:53
- - Седой   ЦитатаПо поводу EzUSB, натолкнулись на то что деба...   Oct 30 2007, 10:10
- - qqqqqq   Цитата(AndreyS @ Oct 30 2007, 00:53) Юзае...   Oct 31 2007, 20:51
- - Седой   Цитата(qqqqqq @ Nov 1 2007, 01:51) И ещё ...   Nov 1 2007, 15:11
- - AndreyS   ЦитатаПытаюсь пока обходиться одним абортом - дабы...   Nov 1 2007, 20:09
|- - Седой   Цитата(AndreyS @ Nov 2 2007, 01:09) А как...   Nov 2 2007, 06:59
|- - Oldring   Цитата(AndreyS @ Nov 1 2007, 23:09) PS. А...   Nov 2 2007, 11:46
|- - AndreyS   Цитата(Oldring @ Nov 2 2007, 15:46) ...   Nov 4 2007, 19:14
|- - Oldring   Цитата(AndreyS @ Nov 4 2007, 22:14) Катас...   Nov 4 2007, 20:26
|- - Седой   Цитата(AndreyS @ Nov 5 2007, 00:14) Спаси...   Nov 5 2007, 10:06
- - qqqqqq   Цитата(Седой @ Nov 1 2007, 20:11) IO-мана...   Nov 4 2007, 19:41


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 23:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01535 секунд с 7
ELECTRONIX ©2004-2016