GlasgowEmbedded / glasgow

Scots Army Knife for electronics
BSD Zero Clause License
1.89k stars 172 forks source link

Find a way to enable RAW_IO WinUSB policy when running on Windows #481

Open whitequark opened 10 months ago

whitequark commented 10 months ago

References:

This is likely significantly limiting our latency numbers on Windows.

Being able to do this depends on progress in both libusb1 and python-libusb1, so this will likely take a while.

isabelburgos commented 2 months ago

I'm not sure why, but I found that Windows USB performance is better with the libusb-win32 driver instead of the stock WinUSB driver. I installed the libusb-win32 driver with Zadig.

With WinUSB:

I: glasgow.cli: running handler for applet 'benchmark'
I: glasgow.applet.internal.benchmark: running benchmark mode source for 8.000 MiB
E: glasgow.applet.internal.benchmark: mode source failed!
I: glasgow.applet.internal.benchmark: running benchmark mode sink for 8.000 MiB
I: glasgow.applet.internal.benchmark: mode sink: 25.59 MiB/s (204.71 Mb/s)
I: glasgow.applet.internal.benchmark: running benchmark mode loopback for 8.000 MiB
I: glasgow.applet.internal.benchmark: mode loopback: 33.04 MiB/s (264.30 Mb/s)
I: glasgow.applet.internal.benchmark: running benchmark mode latency for 8.000 MiB
I: glasgow.applet.internal.benchmark: mode latency: mean: 458.82 us stddev: 103.68 us worst: 4375.20 us

With libusb-win32:

I: glasgow.cli: running handler for applet "benchmark'
I: glasgow.applet.internal.benchmark: running benchmark mode source for 8.000 MiB
I: glasgow.applet.internal.benchmark: mode source: 42.49 MiB/s (339.91 Mb/s)
I: glasgow.applet.internal.benchmark: running benchmark mode sink for 8.000 MiB
I: glasgow.applet.internal.benchmark: mode sink: 42.49 MiB/s (339.90 Mb/s)
I: glasgow.applet.internal.benchmark: running benchmark mode loopback for 8.000 MiB
I: glasgow.applet.internal.benchmark: mode loopback: 44.33 MiB/s (354.62 Mb/s)
I: glasgow.applet.internal.benchmark: running benchmark mode latency for 8.000 MiB
I: glasgow.applet.internal.benchmark: mode latency: mean: 438.91 us stddev: 106.88 us worst: 3135.40 us

This was on Windows 11. Specifics about this system: