Как улучшить производительность Tx в драйвере USB-устройства?
-
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?