USBデバイスドライバーの送信パフォーマンスを改善するにはどうすればよいですか?
-
10-07-2019 - |
質問
Windows Driver Model(WDM)を使用して、Windows 2000以降でUSB 1.1デバイス用のデバイスドライバーを開発しました。
私の問題は、64バイトのバルク転送を使用する場合の送信パフォーマンスがかなり悪いことです。使用されるUSBホストコントローラーに応じて、最大パケットスループットは1秒あたり1000パケット(UHCI)または2000パケット(OHCI)のいずれかです。 Linux Kernel 2.6で、1秒あたり約5000パケットのラウンドで同様のドライバーを開発しました。
Linuxドライバーは最大10の非同期バルク転送を使用し、Windowsドライバーは1つの同期バルク転送を使用します。したがって、これを比較するとパフォーマンスが非常に悪い間は明らかになりますが、非同期バルク転送でも成功せずに試しました(パフォーマンスは向上しません)。
Windowsのパフォーマンスを向上させるためのヒントやコツはありますか?
解決
今では、約6.6kメッセージ/秒の送信を高速化するために管理しました。ソリューションは非常にシンプルで、Linuxドライバーと同じメカニズムを実装しました。
だから今、私は一度に最大20個のURBをスケジュールしています。
他のヒント
どのようなスループットが得られますか? USB 1.1は約1.5 Mbit / sに制限されています
それはあなたが一緒に暮らさなければならないという制限かもしれません、あなたが決してしてはならない一つのことは、資源のためにシステムを飢えさせることです。ドライバーが完全に失敗してシステムリソースを大量に消費し、パフォーマンスを向上させている、貧弱なドライバーの実装を数多く見てきました。
間違ったAPI呼び出しを使用していると思いますが、Win32 DDKのUSBサンプルを見たことがありますか?