Gast
#2702437
Hallo, Erstmal kurz zu meinem Aufbau, ich hab ein USB Device (EFM32 Microcontroller mit integriertem Full-Speed USB Controller). Dieses Device sendet einfach nur Daten so schnell es kann (while-Schleife um die Sende-Funktion). Verwendet wird ein Bulk-Transfer welcher theoretisch 1,24MByte/s erreichen könnte (laut USB Spec). Für einen ersten Test der tatsächlich erreichbaren Netto-Datenrate, habe ich mir ein kleines C# Programm geschrieben welches einen Virtuellen COM-Port öffnen kann und die Datenrate der eingehenden Daten ermittelt. Damit kam ich auf ca. 1,2MByte/s, also ziemlich nah am theoretischen Maximum. Nun wollte ich das Ganze mittels libusb unter Java testen. Dafür kommt die LibusbJava (ein Javawrapper umd die libusb-1.0 unter Java verwenden zu können) zum Einsatz und als Treiber die libusb-1.0 für Windows ( http://libusb.org/wiki/windows_backend# ). Auch hier hab ich mir wieder nur ein kleines Programm geschrieben welches nur der Geschwindigkeitsmessung dient, jedoch ist Geschwindigkeit sehr stark von der Buffergröße abhängig, welche ich dir Bulktranfer-Funktion übergebe. Es werden immer 10MByte empfangen, unabhängig von Buffergröße. Umgebung ist ein Dual-Core PC mit Windows 7 64bit.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
Bei einer Bufferlenght von 102400 Byte komme ich auf 0,95MByte/s bei 10240 sind es noch 0.87MByte/s bei 1024 sind es 0.48MByte/s bei 64 Byte sogar nur 0,03MByte/s Da ein USB-Transfer auf 64Byte Paketen beruht (bei Full-Speed USB + Bulk Tranfer), sollte die Datenrate doch relativ konstant sein solang die Buffergröße ein vielfaches von 64Byte ist. Mit Schwankungen von 100% hätte ich gerechnet, aber die Schankungen von weit über 1000% haben mich doch etwas schockiert. Habt ihr ähnliche Erfahrungen gemacht? Ich kann mir nicht so ganz vorstellen das die Libusb Implementierung derart ineffizient ist, wo könnte eurer Meinung nach das Problem liegen? Grüße Chris