USB I/O performance

On Sat, Aug 29, 2009 at 11:52:48PM -0430, Patrick O'Callaghan wrote:
> Just a quick note to call people's attention to
>http://marc-abramowitz.com/archives/2007/02/17/getting-good-performance-out-of-usb-hard-drives-in-linux/. This is a couple of years old but it worked like a charm for me.
>> Briefly, there's a kernel parameter
> called /sys/block/sd[a,b,...]/device/max_sectors (for USB drives sda,
> sdb etc.). This specifies the maximum size of a disk I/O operation for
> USB storage devices in units of 512 bytes, the default value being 240,
> i.e. 120KB (see http://www.linux-usb.org/FAQ.html#i5). The max_sectors
> value can be changed doing "echo N > ..." as root, and can have a
> dramatic effect on write performance for USB devices such as pendrives.
>> I tested this by writing over 2GB to a fresh VFAT filesystem on a 4GB
> Kingston Data Traveller pendrive plugged into a USB2 port with the EHCI
> driver (as indicated by dmesg). With the default setting, this took
> nearly 90 minutes including a final sync to flush the buffers. Using a
> max_sectors value of 1024 -- the highest the system would accept -- the
> time was reduced to under 16 minutes, a better than 5 times speedup.
> YMMV of course, as different brands of pendrive can have very different
> performance characteristics.
>> Note that the value resets to the default when you unplug the drive, so
> you need to set it manually each time. I don't know if there's a way to
> do this automatically, or change the default value permanently.
>> Sorry of everyone already knew this, but I found it so useful I just had
> to share it :-)
No, I didn't know it!
I was just playing with it on F12 on my eeepc 901, using a 1 gig Memorex stick.
On that hardware I cannot use any value > 1024, or I get:
bash: echo: write error: Invalid argument.
but copying a 640 meg file takes abouty 4:20 (4 mins, 20 sec) with the
default setting of 240 and about 40 seconds with it set to 1024. Nice
speedup.
With an 8 gig Sandisk Cruzer I get the same error when trying to use a
value > 1024, so it's not caused by the USB stick, but by some limitation
in the system (despite what it says in the USB FAQ referenced above about
there being no kernel limit.)
--
---- Fred Smith -- fredex at fcshome.stoneham.ma.us -----------------------------
The eyes of the Lord are everywhere,
keeping watch on the wicked and the good.
----------------------------- Proverbs 15:3 (niv) -----------------------------