Ubuntu – Why is the USB data transfer so slow

usb

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.

Best Answer

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.

Related Question