Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

In the hard drive controller card market - the higher-end (LSI, 3Ware) cards have their own on-board CPU and RAM, and take care of interacting with the hard drive, only notifying the system's CPU after the data has been transferred completely.

Is there a card that provides equivalent functionality for USB peripherals? (So that multi-gigabyte data transfers to a USB-connected device would have negligible CPU overhead, as with the above-mentioned SAS/SATA cards?

I'm aware that a cheap card can support DMA. And that 1394 cards can support DMA. I'm inquiring about the existence a card that fully implements the protocol, manages the bus, and transfers the data itself, only handing off data blocks to the host OS when they're fully off the wire.

share|improve this question
2  
cough FireWire. –  Ignacio Vazquez-Abrams Feb 28 '12 at 15:31
    
@IgnacioVazquez-Abrams - I know your response was a joke. But there's apparently not even any 1394 cards that fully offload transfers the way the SAS / high-end SATA cards do. –  Jon Bailey Feb 28 '12 at 15:36
    
@JonBailey Many FireWire cards do support DMA (it was famously a way to hack Windows XP for a while). Most of the newer cards do not in order to make the cards/chips cheaper (as nobody uses firewire and it's slowly dying off). –  Chris S Feb 28 '12 at 15:51
    
@ChrisS Yes, this is true. Do you even know of a 1394 card that offloads transfers the way the HDD cards do? –  Jon Bailey Feb 28 '12 at 15:57
    
There's only one way to offload memory transfers in a modern PC, DMA. It seems like you're hunting for something specific, but not saying what that is. It also sounds like you're barking up the wrong tree. If you want external block storage with all the benefits of a RAID HBA, use eSATA or SAS and actually get a high end HBA. –  Chris S Feb 28 '12 at 16:10
show 1 more comment

1 Answer 1

Basically any USB controller with DMA will offload bulk data transfers to the on-chip DMA controller instead of doing CPU PIO. From what I've seen most controllers do not have DMA, it's difficult to find.

share|improve this answer
    
Thanks! Do you know of any? Is there a single example? :-) –  Jon Bailey Feb 28 '12 at 15:32
    
(And more to the point, are there any that only do the DMA transfer after taking a full block / unit of data off the bus) –  Jon Bailey Feb 28 '12 at 15:58
    
Every EHCI controller must have DMA. The control structures are all maintained by the host in its own memory and the USB controller reads them and fills them in (or writes them and frees them), notifying the host when transfers are complete so the host can post more host memory for subsequent data. EHCI is fundamentally built around DMA with the host's memory being used for all transfers. Most USB controllers are EHCI, I believe. –  David Schwartz Feb 28 '12 at 16:25
    
@David The EHCI and XHCI controllers in my HP 8560p laptop do not have DMA. I can confirm that it chews up ~10% of my CPU to transfer at 40-50MBps. –  Chris S Feb 28 '12 at 16:47
1  
I don't see how that's possible. Without DMA, how does the controller even read the iTDs, much less read or write to and from the schedule. They're all 100% contained in the host's memory. (I don't doubt that it may take 10% of your CPU to transfer at 40-50MBps, but that's not due to a lack of DMA.) See section 1.2.1 of the specification, particularly the 'Schedule Interface Space' part. All data is kept in the host's memory, there's no other mechanism. –  David Schwartz Feb 28 '12 at 16:57
show 4 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.