|
|
 |
Ответов
|
Oct 23 2007, 16:00
|
Участник

Группа: Свой
Сообщений: 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 циклов - пауза. А проц в это время ждёт чего-то...
|
|
|
|
|
Oct 24 2007, 05:23
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

|
Цитата(qqqqqq @ Oct 23 2007, 22:00)  Получается время от 20 до 100 мс. 40 мс в среднем. Все правильно, так и будет при таком использовании.
|
|
|
|
|
Oct 24 2007, 07:03
|
Участник

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

|
Цитата(Седой @ Oct 24 2007, 11:23)  Все правильно, так и будет при таком использовании. Непонятно, что мешает драйверу при свободной шине отправить запрос на чтение сразу при получении этого запроса от приложения? Зачем ждать 40мс?
|
|
|
|
|
Oct 24 2007, 08:33
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

|
Цитата(qqqqqq @ Oct 24 2007, 13:03)  Непонятно, что мешает драйверу при свободной шине отправить запрос на чтение сразу при получении этого запроса от приложения? По CyUSB ничего сказать не могу, нет исходников. Попробуйте EzUsb. Цитата Зачем ждать 40мс? Это вы спросите у Microsoft и Cypress. PS. Какую версию SuiteUSB используете?
|
|
|
|
|
Oct 24 2007, 09:01
|
Участник

Группа: Свой
Сообщений: 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...
|
|
|
|
|
Oct 26 2007, 09:45
|
Участник

Группа: Свой
Сообщений: 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 мс, как и измерилось приложением. По итогам данного измерения можно резюмировать, что основную задержку даёт микрософтовский диспетчер ввода-вывода... Осталось его как-то обойти и латентность уменьшится ещё в несколько раз. до полмиллисекунды.
|
|
|
|
|
Oct 26 2007, 09:56
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

|
Цитата(qqqqqq @ Oct 26 2007, 15:45)  Осталось его как-то обойти и латентность уменьшится ещё в несколько раз. до полмиллисекунды. Для EzUsb можно только через использование раздельных потоков чтения и записи, запуская чтение раньше записи.
Сообщение отредактировал Седой - Oct 26 2007, 09:56
|
|
|
|
|
Oct 26 2007, 14:10
|
Участник

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

|
Цитата(Седой @ Oct 26 2007, 15:56)  Для EzUsb можно только через использование раздельных потоков чтения и записи, запуская чтение раньше записи. Проверил ваше утверждение. Результат отрицательный. Время от 20 до 60мс. Вот лог: 0.00001145 IRP_MJ_DEVICE_CONTROL 0.00002458 enter Ezusb_Read_Write() 0.00003716 enter Ezusb_CallUSBD 0.00004973 Calling USB Driver Stack 0.00013410 return from IoCallDriver USBD 103 0.00014499 Wait for single object 0.00033300 Wait for single object, returned 0 0.00034557 URB status = 0 status = 0 irp status 0 0.00035703 exit Ezusb_CallUSBD (0) 0.00036876 Successfully transfered 0xa bytes 0.02320407 Wait for single object, returned 0 0.02321692 URB status = 0 status = 0 irp status 0 0.02322837 exit Ezusb_CallUSBD (0) 0.02324066 Successfully transfered 0xa bytes 0.02806977 IRP_MJ_DEVICE_CONTROL 0.02808374 enter Ezusb_Read_Write() 0.02809603 enter Ezusb_CallUSBD 0.02810888 Calling USB Driver Stack 0.02820191 return from IoCallDriver USBD 103 0.02821308 Wait for single object
|
|
|
|
|
Oct 26 2007, 15:43
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

|
Цитата(qqqqqq @ Oct 26 2007, 20:10)  Проверил ваше утверждение. Результат отрицательный. Время от 20 до 60мс. Вот лог: Судя по логу, Вы что-то не так сделали.
|
|
|
|
|
Oct 26 2007, 17:44
|
Участник

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

|
Цитата(Седой @ Oct 26 2007, 21:43)  Судя по логу, Вы что-то не так сделали. Возможно.. Вы говорили, что надо запускать чтение раньше записи и делать это в отдельном потоке. Так я и сделал. И по логу видно, что я сделал именно так. Цитата(Седой @ Oct 26 2007, 21:43)  Судя по логу, Вы что-то не так сделали. Прошу прощения. Поставил sleep(0) в цикл ожидания готовности приёма и всё стало гораздо лучше. Среднее время отклика = 0.9 мс. Спасибо. Я наверно, и с CYUSB-драйвером погорячился, когда его обругал... надо будет ещё раз попробовать когда-нибудь...
|
|
|
|
Сообщений в этой теме
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            Седой Цитата(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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|