On Sat, 23 Sep 2006, Frederick Shotton wrote: > Using the libusb library to bypass all software layers, I issue READ_10 > commands for 8KB blocks. Sequential access gives me 7.8 MB/sec and random > access gives me 3.1 MB/sec. I use libusb with usb-storage.c found here: > http://svn.navi.cx/misc/trunk/grumpydisk/usb-storage.c
Okay. You've bypassed all the software layers, so what you're seeing is the performance limit of the hardware. Not much we can do to improve that. > In the last async test that showed a 25% increase, I think the test was > ending up using the disk cache so the performance went up a little. Maybe this was true for the Windows results also? By the way, using the disk cache should give a tremendous performance improvement. Much more than 25%. > I tried looking at timing information from usbmon and comparing it to timing > information under Windows using sniffusb but the info is inaccurate due to > logging overhead. I did not notice much except maybe under Linux bulk read > packets are sometimes split into 2 4KB ones and in Windows are 8KB in size. Nonsense. The maximum size for high-speed bulk data packets is 512 bytes. That's part of the USB specification. Maybe you're thinking of URBs instead of packets? usbmon reports information about URBs, not about packets, and so does sniffusb. > Linux sends the READ_10 command and then 2 bulk out packets, No, Linux doesn't send any bulk-out packets after the CBW for a READ command. > and then > receives 2 bulk in packets of 4KB. Windows sends the READ_10 command and > then 1 bulk out packet, receives 1 bulk in packet of 8KB, and then sends out > a bulk out packet, and receives another bulk in packet of a small size. Your description is completely wrong. In terms of URBs this is what actually happens: usb-storage sends the 31-byte bulk-out CBW URB. Then it submits either a single 8 KB bulk-in data URB or else two 4 KB bulk-in data URBs, depending on whether or not your 8 KB buffer is located in physically continguous memory pages. Those URBs show up on the bus as 16 back-to-back 512-byte IN data packets, regardless. Then usb-storage requests a 13-byte bulk-in CSW URB. Of course, when you use libusb to bypass usb-storage then the memory pages _will_ be contiguous, so Linux will always use a single 8 KB data URB. Alan Stern ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Linux-usb-users@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-users