complement to sendfile()?

Julian Elischer julian at elischer.org
Thu Jul 20 18:21:58 UTC 2006


Jack Vogel wrote:

> We, myself and Prafulla Deuskar at Intel LAD, have a driver and stack
> changes that support Intel's new I/OAT DMA hardware. This is a
> DMA engine in the chipset. 


shades of the old PC with the built in DMA on hte motherboard....
:-)

> There is potential to use the hardware
> in a number of ways, what we have right now is a receive-side
> async dma assist from tcp_input() to soreceive(). The engine
> copies from the mbufs direct to user buffers asynchronously,
> and only requires the client process to be woken when its
> buffers are full. The stack changes to support this are relatively
> small, mainly we need to pin user buffers and provide a pointer
> down to the stack in order to process them, and of course the
> core driver for the engine.
>
> Similar work was done for Linux and is in the 2.6.18 kernel.
>
> We see as much as a 20% improvement in CPU utilization
> when doing a sustained iperf test.
>
> We are hoping to get this code into CURRENT soon if there
> is interest.
>
> Cheers,
>
> Jack
>
>
>
> On 7/20/06, Julian Elischer <julian at elischer.org> wrote:
>
>> David G. Lawrence wrote:
>>
>> >>Hello!
>> >>
>> >>My program receives data from the socket and writes it to a file -- 
>> with the
>> >>usual read()/write() tedium.
>> >>
>> >>Is there anything zero-copying like sendfile() for the socket->file 
>> direction?
>> >>
>> >>In fact, sendfile's API may allow to use it in any direction, but 
>> the manual
>> >>is quite explicit, that the second (destination) argument must be 
>> socket.
>> >>
>> >>recvfile()? Thanks!
>> >>
>> >>
>> >
>> >   sendfile() could be extended to allow arbitrary file descriptor 
>> types as
>> >the source and destination, but the zero-copy nature of it can only 
>> work
>> >in the file to socket direction. This is because network buffers can 
>> be made
>> >out of filesystem buffers (file->network direction), but for the 
>> network to
>> >file direction network packets arrive non-deterministically. With 
>> the right
>> >network hardware it would in theory be possible to have the TCP code 
>> run
>> >on the network card and it could DMA the TCP stream directly into file
>> >buffers. If pigs had wings, they could fly. :-)
>> >
>> >
>>
>>
>> We used to do something like this in BSD4.3 (not FreeBSD 4.3) in 1991,
>> but we used
>> a propriatary filesystem and a proprietary protocol that knew each
>> other's data types.
>>
>> >-DG
>> >
>> >David G. Lawrence
>> >President
>> >Download Technologies, Inc. - http://www.downloadtech.com - (866) 
>> 399 8500
>> >The FreeBSD Project - http://www.freebsd.org
>> >Pave the road of life with opportunities.
>


More information about the freebsd-net mailing list