From owner-freebsd-arch Sat Mar 17 9:32:11 2001 Delivered-To: freebsd-arch@freebsd.org Received: from nebula.cybercable.fr (d217.dhcp212-126.cybercable.fr [212.198.126.217]) by hub.freebsd.org (Postfix) with ESMTP id 171D737B719 for ; Sat, 17 Mar 2001 09:32:05 -0800 (PST) (envelope-from mux@qualys.com) Received: (from mux@localhost) by nebula.cybercable.fr (8.11.3/8.11.3) id f2HHVcx06226; Sat, 17 Mar 2001 18:31:38 +0100 (CET) (envelope-from mux) Date: Sat, 17 Mar 2001 18:31:38 +0100 From: Maxime Henrion To: arch@FreeBSD.org Cc: Dag-Erling Smorgrav Subject: Re: Proposal for a new syscall Message-ID: <20010317183137.C420@nebula.cybercable.fr> References: <20010317164411.A420@nebula.cybercable.fr> <20010317173444.B420@nebula.cybercable.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: ; from des@ofug.org on Sat, Mar 17, 2001 at 06:18:28PM +0100 Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Dag-Erling Smorgrav wrote: > Maxime Henrion writes: > > Dag-Erling Smorgrav wrote: > > > You don't seem to understand what funopen() really does... > > I think I do, since I already used it successfully. Look at how it is > > used in libfetch (AFAIK, you are the author of libfetch, I'm not sure > > if you wrote this part though), > Yes, I did. If you read that code you'll see it does a *lot* more than > just pumping data from one file to another. I never said funopen() does only this. You should re-read my first mail. I probably wasn't clear enough, because of my poor english skills. > > it's given a read function to read the > > socket and a write function that will then write this into a file, and > > this is used to download a file. > This has absolutely nothing to do with zero-copy anything. The reader I never said funopen() had anything to do with zero-copy too... :-) > function doesn't need to be backed by a file - it can do *anything* it > wants, even return a constant stream of "Maxime Henrion doesn't know > what funopen() is for" :) Sure, and it could event return "DES doesn't understand what Maxime Henrion is trying to tell him" :P > > > > Having > > > > such a syscall in the kernel would allow to implement "zero-copy" > > > > wherever it is feasible. > > > No. It would save you two copies and a bunch of syscalls, but it > > > wouldn't be real zero-copy, just "n-2 copy" instead of "n copy". > > And if n == 2 ? > It's never the case. I think the best you can do in userland is n = 3, ^^^^^^^^ I'm talking about a syscall. > from a device to a file or socket, or from a file or socket to a > device, by using mmap(2) on one side (can't do it on both - you have > to mmap one device and write its contents to a file, or read from a > file into an mmapped device). In the general case (file to file, file > to socket, socket to file, socket to socket) the best you can do, even > with mmap(), is n = 4. > > > > Then, sendfile() would just be a particular case of this syscall, where > > > > the input fd is a file and the output fd is a socket, and it could be > > > > rewritten using it. > > > No. Have you looked at the sendfile() code? > > Probably not enough ; however I don't understand why it wouldn't be > > possible to write a more generic function than sendfile() dealing with > > any type of file descriptors that sendfile() could call then. > It's not impossible, but it'd be a lot of work and it wouldn't be > zero-copy. Sure, it's a lot of work. Why couldn't it be zero-copy if sendfile() already does this ? Maxime -- Don't be fooled by cheap finnish imitations ; BSD is the One True Code Key fingerprint = F9B6 1D5A 4963 331C 88FC CA6A AB50 1EF2 8CBE 99D6 Public Key : http://www.epita.fr/~henrio_m/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message