Aviv Greenberg wrote:




    >
    >  IOAT - its not a TCP offload engine. Intel's assumption is that the
    >  CPU is wasting a lot of cycles to copy data (from kernel to user and
    >  vv). IOAT is just a smart DMA engine that can move data (copy)
    >  without wasting the main CPU cycles. There are more details (cpu
    >  caching optimizationetc) but this is the basic idea.

    When Ira asked me about it before it didn't ring any bells with me but
    now that you describe it  I think I have a vague memory of Intel showing
    a research based on this at OLS 2005 where the conclusion was that it
    only benefits  certain kinds of traffic and not others since, for
    example, for traffic made from many small packets (typical VoIP traffic
    for example), the cost associated with the memory management trickery
    required to pin and unpin the socket buffers costs more then the cycles
    saved due to the offloaded copy...  thought I maybe gotten mixed with
    something else though.


If you have a link to this research please send it - it's interesting. I didn't see any real benchmark yet...

Talking about this:

http://www.linuxsymposium.org/2004/view_abstract.php?content_key=46

Very similar, but does not talking about IOT after all. In fact, I can kind of imagine Intel going to develop IOT after the results of that previous study and based on what they saw.


One thing tough, AFAIK IOAT does not require pinning socket pages. IOAT replaces the copy_to_user and copy_from_user calls with programming a DMA engine.

I don't know anything about IOAT but I would still guess that both in kernel socket buffer and the user space buffers to/from the data is copied have to be pinned for the duration of the DMA operation.


There was a discussion years ago to enable zero copy on regular sockets using COW (not related to IOAT). Dave Miller decided to drop this because "It costs more to lock down the user mappings than the gain you get from the zero-copy transfer. Also, the user almost always modifies the buffer right after the sendmsg() call so the gain is usually nil." see the full message here : http://readlist.com/lists/vger.kernel.org/linux-net/0/1208.html

I REALLY need to go read on the IOAT implementation before making any comment but... (can;t help myself) ....

I still fail to see how this is not an issue with IOAT - if you want to DMA into the user buffer, you better have that pinned and locked doe the duration of the DMA transfer.


Cheers,
Gilad

=================================================================
To unsubscribe, send mail to [EMAIL PROTECTED] with
the word "unsubscribe" in the message body, e.g., run the command
echo unsubscribe | mail [EMAIL PROTECTED]

Reply via email to