Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 17 Mar 2001 18:31:38 +0100
From:      Maxime Henrion <mux@qualys.com>
To:        arch@FreeBSD.org
Cc:        Dag-Erling Smorgrav <des@ofug.org>
Subject:   Re: Proposal for a new syscall
Message-ID:  <20010317183137.C420@nebula.cybercable.fr>
In-Reply-To: <xzp4rwsco0r.fsf@flood.ping.uio.no>; from des@ofug.org on Sat, Mar 17, 2001 at 06:18:28PM %2B0100
References:  <20010317164411.A420@nebula.cybercable.fr> <xzpzoekcs3r.fsf@flood.ping.uio.no> <20010317173444.B420@nebula.cybercable.fr> <xzp4rwsco0r.fsf@flood.ping.uio.no>

next in thread | previous in thread | raw e-mail | index | archive | help
Dag-Erling Smorgrav wrote:
> Maxime Henrion <mux@qualys.com> 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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010317183137.C420>