libusb performance on 8.1
    Hans Petter Selasky 
    hselasky at c2i.net
       
    Sat Jan 22 13:33:20 UTC 2011
    
    
  
On Thursday 20 January 2011 07:37:32 Daniel O'Connor wrote:
> [re-sent from the correct address]
> 
> Hi,
> I am building a USB interface to a radar data acquisition chassis based on
> the Cypress CY7C68013A.
> 
> While doing some speed testing I find that FreeBSD does ~4Mb/sec, but Linux
> does 17Mb/sec & OS X does 8-10Mb/sec.
Hi,
You need to change the way you buffer the data. FreeBSD does not queue more 
than 2 URB's at any time, and the turnaround time varies from 1ms to 125us due 
to hardware IRQ restrictions. Linux queues up all it can get, which leads to 
other kind of problems. The current internal buffer limit is 16Kbyte 8000 
times per second which gives a MAX of 128 MByte/second.
In general during hardware design:
1) Avoid short packets.
2) Make sure transfer buffers are matched between host and device.
From my experience it is very possible to reach +30Mbyte/second with LibUSB 
under FreeBSD 8.2+, given the buffering is optimal for the kernel.
Hint: The libusb20 API has features to transfer multi-short packets in a more 
optimised way, which are not exposed in the libusb10 API.
> 
> It is using libusb-1.0 with the async API in a threaded app. I spawn a
> thread which sites in the following loop:
> 
--HPS
    
    
More information about the freebsd-usb
mailing list