Question

J'ai développé un pilote de périphérique pour un périphérique USB 1.1 sous Windows 2000 et versions ultérieures avec le modèle de pilote Windows (WDM).

Mon problème est la très mauvaise performance de Tx lors de l’utilisation de transferts en masse de 64 octets. En fonction du contrôleur hôte USB utilisé, le débit maximum de paquets est de 1 000 paquets (UHCI) ou de 2 000 paquets (OHCI) par seconde. J'ai développé un pilote similaire sur Linux Kernel 2.6 avec environ 5 000 paquets par seconde.

Le pilote Linux utilise jusqu'à 10 transferts en masse asynchrones, tandis que le pilote Windows utilise 1 transfert en masse synchrone. En comparant cela, on voit clairement que la performance est si mauvaise, mais j’ai déjà essayé également avec des transferts en bloc asynchrones sans succès (pas de gain de performance).

Quelqu'un a-t-il des astuces pour améliorer les performances sous Windows?

Était-ce utile?

La solution

Je parviens maintenant à accélérer l'envoi à environ 6,6k messages / s. La solution était assez simple, je viens de mettre en œuvre le même mécanisme que dans le pilote Linux.

Alors maintenant, je programme jusqu'à 20 URB en même temps, à quoi devrais-je dire, cela a fonctionné.

Autres conseils

Quel type de débit obtenez-vous? USB 1.1 est limité à environ 1,5 Mbit / s

C’est peut-être une limitation avec laquelle vous devrez vivre, l’une des choses que vous ne devez jamais faire est de priver le système de ressources. J'ai vu tellement d'implémentations de pilotes médiocres, où le pilote accumule les ressources système sans pouvoir augmenter ses propres performances.

Je suppose que vous utilisez les mauvais appels d'API. Avez-vous consulté les exemples USB dans le DDK Win32?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top