From owner-freebsd-net@FreeBSD.ORG Thu Jul 20 04:36:19 2006 Return-Path: X-Original-To: net@freebsd.org Delivered-To: freebsd-net@FreeBSD.ORG Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 27C1B16A4DE for ; Thu, 20 Jul 2006 04:36:19 +0000 (UTC) (envelope-from dg@dglawrence.com) Received: from dglawrence.com (dsl-230-156.ipns.com [209.210.230.156]) by mx1.FreeBSD.org (Postfix) with ESMTP id ACCEE43D5C for ; Thu, 20 Jul 2006 04:36:12 +0000 (GMT) (envelope-from dg@dglawrence.com) Received: from tnn.dglawrence.com (localhost [127.0.0.1]) by dglawrence.com (8.13.6/8.13.3) with ESMTP id k6K4Z26O021839; Wed, 19 Jul 2006 21:35:02 -0700 (PDT) (envelope-from dg@dglawrence.com) Received: (from dg@localhost) by tnn.dglawrence.com (8.13.6/8.13.3/Submit) id k6K4Z1Dp021832; Wed, 19 Jul 2006 21:35:01 -0700 (PDT) (envelope-from dg@dglawrence.com) X-Authentication-Warning: tnn.dglawrence.com: dg set sender to dg@dglawrence.com using -f Date: Wed, 19 Jul 2006 21:35:01 -0700 From: "David G. Lawrence" To: Mikhail Teterin Message-ID: <20060720043501.GG924@tnn.dglawrence.com> References: <200607192230.14939.mi+mx@aldan.algebra.com> <20060720025003.GF924@tnn.dglawrence.com> <200607192316.56157.mi+mx@aldan.algebra.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200607192316.56157.mi+mx@aldan.algebra.com> Cc: net@freebsd.org Subject: Re: complement to sendfile()? X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 20 Jul 2006 04:36:19 -0000 > ?????? 19 ?????? 2006 22:50, David G. Lawrence ???????: > > ? ?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. :-) > > Ok, so zero-copy may not work, but one-copy would still be better, than the > usual two-copy. > > Am I right? With the usual read/write method, data is read from the network > card to kernel's buffers, from there to the application buffer, and from > there to the filesystem. That's two copies, no? Yes, you are right. A few other cool things that could be done with sendfile include: o Full duplex zero-copy socket to socket sends. This could be used on (e.g Squid) proxy servers, for example, to connect two (inside/outside) TCP streams. Plus an "ASYNC" flag to make it all happen in the background inside the kernel (returning immediately to the proxy application). o An "APPEND" flag that allows sendfile to block at the end of file, waiting for more data to be written to it (as long as someone has the file open for append). This would be very useful in some real-time audio/video streaming applications (like the one I'm working on right now :-)). -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.