Как улучшить производительность Tx в драйвере USB-устройства? - PullRequest
0 голосов
/ 11 марта 2009

Я разработал драйвер устройства для устройства USB 1.1 в Windows 2000 и более поздних версиях с моделью драйвера Windows (WDM).

Моя проблема - довольно низкая производительность передачи при использовании 64-байтовых массовых передач. В зависимости от используемого хост-контроллера USB максимальная пропускная способность составляет 1000 пакетов (UHCI) или 2000 пакетов (OHCI) в секунду. Я разработал аналогичный драйвер для Linux Kernel 2.6 с округлением около 5000 пакетов в секунду.

Драйвер Linux использует до 10 асинхронных массовых передач, в то время как драйвер Windows использует 1 синхронную массовую передачу. Таким образом, сравнение показывает, что производительность плохая, но я уже пытался использовать асинхронные массовые передачи, но безуспешно (без увеличения производительности).

Есть ли у кого-нибудь советы и рекомендации по повышению производительности в Windows?

Ответы [ 2 ]

1 голос
/ 17 апреля 2009

Теперь мне удалось ускорить отправку до 6,6 тыс. Сообщений в секунду. Решение было довольно простым, я только что реализовал тот же механизм, что и в драйвере Linux.

Так что теперь я планирую до 20 URB одновременно, что я должен сказать, это сработало.

0 голосов
/ 11 марта 2009

Какую пропускную способность вы получаете? USB 1.1 ограничен до 1,5 Мбит / с

Это может быть ограничением, с которым вам придется жить, единственное, что вы никогда не должны делать, это лишать систему ресурсов. Я видел очень много плохих реализаций драйверов, когда драйвер перегружает системные ресурсы, полностью не увеличивая свою производительность.

Я предполагаю, что вы используете неправильные вызовы API, вы смотрели примеры USB в Win32 DDK?

...