Domanda

Ho sviluppato un driver di dispositivo per un dispositivo USB 1.1 su Windows 2000 e versioni successive con Windows Driver Model (WDM).

Il mio problema sono le prestazioni Tx piuttosto scadenti quando si utilizzano trasferimenti in blocco a 64 byte. A seconda del controller host USB utilizzato, il throughput massimo dei pacchetti è di 1000 pacchetti (UHCI) o 2000 pacchetti (OHCI) al secondo. Ho sviluppato un driver simile su Linux Kernel 2.6 con circa 5000 pacchetti al secondo.

Il driver Linux utilizza fino a 10 trasferimenti bulk asincroni mentre il driver Windows utilizza 1 trasferimento bulk sincrono. Quindi confrontarlo rende chiaro mentre le prestazioni sono così pessime, ma ho già provato anche con trasferimenti di massa asincroni senza successo (nessun aumento delle prestazioni).

Qualcuno ha alcuni suggerimenti e trucchi su come migliorare le prestazioni su Windows?

È stato utile?

Soluzione

Ora sono riuscito a velocizzare l'invio a circa 6,6k messaggi / s. La soluzione era piuttosto semplice, ho appena implementato lo stesso meccanismo del driver Linux.

Quindi ora sto programmando fino a 20 URB alla volta, a cosa dovrei dire, ha funzionato.

Altri suggerimenti

Che tipo di throughput stai ottenendo? USB 1.1 è limitato a circa 1,5 Mbit / s

Potrebbe essere una limitazione con cui dovrai convivere, l'unica cosa che non devi mai fare è far morire di fame il sistema per le risorse. Ho visto così tante cattive implementazioni di driver in cui il driver sta eseguendo il hogging delle risorse di sistema in totale fallimento per aumentare le proprie prestazioni.

Suppongo che tu stia utilizzando le chiamate API errate, hai esaminato gli esempi USB nel DDK Win32?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top