Pregunta

Desarrollé un controlador de dispositivo para un dispositivo USB 1.1 en Windows 2000 y posterior con Windows Driver Model (WDM).

Mi problema es el rendimiento de Tx bastante malo cuando utilizo transferencias masivas de 64 bytes. Dependiendo del controlador de host USB utilizado, el rendimiento máximo de paquetes es de 1000 paquetes (UHCI) o 2000 paquetes (OHCI) por segundo. Desarrollé un controlador similar en Linux Kernel 2.6 con alrededor de 5000 paquetes por segundo.

El controlador de Linux usa hasta 10 transferencias masivas asíncronas mientras que el controlador de Windows usa 1 transferencia masiva síncrona. Entonces, comparar esto deja en claro que el rendimiento es muy malo, pero ya lo intenté con transferencias masivas asíncronas sin éxito (sin aumento de rendimiento).

¿Alguien tiene algunos consejos y trucos para mejorar el rendimiento en Windows?

¿Fue útil?

Solución

Ahora he logrado acelerar el envío a unos 6.6k mensajes / s. La solución fue bastante simple, acabo de implementar el mismo mecanismo que en el controlador de Linux.

Así que ahora estoy programando hasta 20 URB a la vez, en lo que debería decir, funcionó.

Otros consejos

¿Qué tipo de rendimiento está obteniendo? USB 1.1 está limitado a aproximadamente 1.5 Mbit / s

Puede ser una limitación con la que tendrá que vivir, lo único que nunca debe hacer es privar al sistema de recursos. He visto tantas implementaciones de controladores pobres donde el controlador está acaparando los recursos del sistema en un completo fracaso para aumentar su propio rendimiento.

Supongo que está utilizando las llamadas API incorrectas, ¿ha mirado las muestras de USB en el Win32 DDK?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top