USB I/O performance

fred smith fredex at fcshome.stoneham.ma.us
Sun Aug 30 18:40:09 UTC 2009


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) -----------------------------




More information about the fedora-list mailing list