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 _______________________________________________ freebsd-usb@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-usb To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"