Как улучшить производительность Tx в драйвере USB-устройства?

StackOverflow https://stackoverflow.com/questions/633572

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top