Why is my USB data transfer so slow?

Whenever I do any kind of file transfer using USB, whether to a USB stick, or with my Android phone, or anything else, it is ridiculously slow.

enter image description here

It says 59.8 KB/sec, which would be an awesome speed if this were 1991 and I was using a modem to dial up to my local BBS. Surely USB technology is better than that...? 37 seconds to move less data than the equivelent of 1 MP3 file?

Also, regardless of what it says about speed and time, the reality is much, much slower. I routinely see it say something like "37 seconds left" and have to wait for minutes. Sometimes, if I want to move large amounts of files, it can say it will take 8 hours or more.

Is this normal? My computer may not be the most awesome on the market, and about a year old, but it's an i5 with 4GB RAM and modern components, so surely this isn't the hardware's fault.

What can I do to get better USB data transfer performance?

Also, I did look at this question, but my newbie eyes don't see anything that look like an actual solution, just a lot of discussion about what transfer rates could or should be.


Update: As requested in the comments, I've generated a whole bunch of output from the command line, and put it on Ubuntu Pastebin. Please see it here.

I've also posted the output from lsusb -t with my Android phone connected (which is the device I am most concerned about getting reasonable speeds with).


Update 2: As requested in the comments, I removed everything except the mouse and keyboard, and then only attached one extra device at a time for testing. Here is some output from dd:

My Sony video camera:

$ dd if=/dev/zero of=/media/disk/testfile bs=128k count=800 conv=fdatasync
800+0 records in
800+0 records out
104857600 bytes (105 MB) copied, 6.00824 s, 17.5 MB/s

My Android phone:

$ dd if=/dev/zero of=/media/C3AD-13DC/testfile bs=128k count=800 conv=fdatasync
800+0 records in
800+0 records out
104857600 bytes (105 MB) copied, 52.357 s, 2.0 MB/s

The camera performed much better than usual, and while the phone wasn't as bad as it has been (about twice as fast as I've ever seen), it's still significantly slower than the camera.


Solution 1:

After all the diagnostics Dave, this certainly looks like a problem being caused by your hub(s) -- first of all, the USB 1.1 external hub you're using, and possibly one of the internal chips on your motherboard used to provide physical USB ports.

  • 17.5 Mbytes/sec to your Sony Video Camera's flash memory is close to the practical throughput limits of USB 2.0; the 2.0 Mbytes/sec with your Android phone may just be because its flash doesn't support faster writes.
  • Your motherboard is a Foxconn P55MX, as this clue from dmesg on line 1308 of your paste tells us: DMI: ThirdWave Corporation Prime Series/P55MX Series, BIOS 080015 09/15/2009
  • The Intel P55 chipset contains two USB 2.0 controllers (or root hubs), providing up to 8 and 6 ports respectively:
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/8p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
    
  • One big problem is this external hub to which you have your mouse/keyboard/tablet connected; it looks like a USB 1.1 hub (or a poorly designed USB 2.0 hub). Connecting the 1.1 hub forces that root hub to downgrade all its ports to USB 1.1 speeds. A USB 2.0 hub contains translators which prevent this behavior:
            |__ Port 4: Dev 8, If 0, Class=hub, Driver=hub/4p, 12M
  • The btusb is just a Bluetooth dongle you plugged in.

Anyway, it appears the intermittent problem is caused when something forces the root hub to downgrade all ports to USB 1.0/USB 1.1 speeds -- 60 kbytes/sec is close to real-world USB 1.0 speeds IIRC!

Now, replacing your external hub with a proper USB 2.0 one should fix these problems; if not, something may be wrong with the actual Intel chip on the motherboard or its connection to the physical ports, and you may have to have it replaced under warranty.

Solution 2:

Something very strange has happened. I booted to a live CD to see if the USB speeds were different. With the Live CD, it was much faster. Something around 4MB/s. I thought this was evidence that there was a configuration problem in my regular install. However, I rebooted back to my installed system, tried a test transfer one more time to be sure, but the speed is now exactly the same as it was with the Live CD. Could something have changed by using the LiveCD? That seems unlikely, but I tested before the Live CD, and it was definitely slower before... so this is very odd.

Judging by this, you are clearly suffering from either A) faulty hardware or B) a faulty USB driver

If you have other similar USB ports that work well on your system, then it is very likely just faulty hardware with that single port.