On Tue, Jul 23, 2013 at 10:34:06PM +0000, Stoddard, Nate (GE Healthcare) wrote: > > -----Original Message----- > > From: Greg KH [mailto:gre...@linuxfoundation.org] > > Sent: Tuesday, July 23, 2013 10:27 AM > > To: Stoddard, Nate (GE Healthcare) > > Cc: linux-usb@vger.kernel.org > > Subject: Re: EHCI driver breaks at 6 endpoints > > > > On Tue, Jul 23, 2013 at 01:33:25PM +0000, Stoddard, Nate (GE Healthcare) > > wrote: > > > Hello, > > > > > > We are attempting to create a system that will support 8 full speed > > > USB devices each sending a 64-byte transfer every 1ms via interrupt > > > endpoints. When we connect 5 full speed USB devices our USB host use > > > 24% of the CPU, but when we connect a 6th device, the CPU goes to > > > 100%. Has anyone else seen this type of CPU jump or know what could > > > be causing it? > > > > > > Devices CPU Total Throughput > > > 1 7% 64 KB/s > > > 2 11% 128 KB/s > > > 3 15% 192 KB/s > > > 4 19% 256 KB/s > > > 5 24% 320 KB/s > > > 6 99% (should be 384 KB/s, but the iMX535 misses > > > sending > > IN tokens in some SOF periods) > > > > > > We are using a Freescale iMX535 board running at 800 MHz as the USB > > > host. One of the iMX535 EHCI root controllers is connected to a high > > > speed USB hub which has two ports each connected to another high speed > > > USB hub (giving us 8 ports for USB devices). Each hub has multi-TT > > > support. The iMX535 is running Linux 2.6.35, and our test application > > > uses libUSB asynchronous I/O (v1.0.16). The libUSB callback function > > > do not process the data; rather the function only resubmits the > > > transfer. > > > > As you are using an old, obsolete, and unsupported-by-the-community > > kernel version, I am going to have to point you to the vendor that provided > > you with this kernel (that you are paying for), and ask that you get support > > from them, as there's really nothing we can do for you here. > > > > And that hardware is not the "best". What happens if you plug the same > > number of devices into a "real" EHCI host controller (i.e. a PCI one on a > > PC)? > > The EHCI driver should handle this just fine, odds are the issues are down > > in > > the iMX535 driver, or possibly, the silicon for that chip as I don't think > > it was > > designed to support that many devices (read the data sheet for specifics, > > but > > I thought I saw that years ago...) > > > > We cannot easily run 3.10.2 on our iMX535; however, we did run similar > testing on an Ubuntu x86 PC running at 1.2 GHz (1 core no hyperthreading). > We connected 7 full speed USB devices to two USB 2.0 high speed hubs to the > USB 2.0 ports on the PC. Each USB device was sending an interrupt IN > endpoint every 1ms. Here are the results with the latest kernel versions: > Linux 3.2 CPU = 37% > Linux 3.5 CPU = 37% (for most runs, but some were 99%) > Linux 3.8 CPU = 8 % > Linux 3.10 CPU = 8 % > > Any ideas what would have changed between 3.5 and 3.8?
About 30,000 patches :) > Is there an easy way to find out if there were major changes to the > EHCI driver between 3.5 and 3.8? I started to look at the git logs; > is there an alternative? 'git log drivers/usb/host/' will narrow stuff down a lot, assuming that it is only an EHCI fix. That large of a speedup might be other things. will > Also, if we connect the hubs to the USB 3.0 ports on the PC, in all > the versions listed above, the CPU is 8%. Is this because of the XHCI > driver is used on USB 3.0 ports? Yes, a different driver is being used, as you say. Good luck, greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html