From: R.E.Wolff@BitWizard.nl (Rogier Wolff)
To: Linus Torvalds <torvalds@transmeta.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: Is sendfile all that sexy?
Date: Thu, 18 Jan 2001 09:23:15 +0100 (MET) [thread overview]
Message-ID: <200101180823.JAA18205@cave.bitwizard.nl> (raw)
In-Reply-To: <944s0j$9lt$1@penguin.transmeta.com> from Linus Torvalds at "Jan 17, 2001 11:32:35 am"
Linus Torvalds wrote:
> In article <Pine.LNX.4.30.0101171454340.29536-100000@baphomet.bogo.bogus>,
> Ben Mansell <linux-kernel@slimyhorror.com> wrote:
> >On 14 Jan 2001, Linus Torvalds wrote:
> >
> >> And no, I don't actually hink that sendfile() is all that hot. It was
> >> _very_ easy to implement, and can be considered a 5-minute hack to give
> >> a feature that fit very well in the MM architecture, and that the Apache
> >> folks had already been using on other architectures.
> >
> >The current sendfile() has the limitation that it can't read data from
> >a socket. Would it be another 5-minute hack to remove this limitation, so
> >you could sendfile between sockets? Now _that_ would be sexy :)
>
> I don't think that would be all that sexy at all.
>
> You have to realize, that sendfile() is meant as an optimization, by
> being able to re-use the same buffers that act as the in-kernel page
> cache as buffers for sending data. So you avoid one copy.
>
> However, for socket->socket, we would not have such an advantage. A
> socket->socket sendfile() would not avoid any copies the way the
> networking is done today. That _may_ change, of course. But it might
> not. And I'd rather tell people using sendfile() that you get EINVAL if
> it isn't able to optimize the transfer..
Linus,
I admire your good taste in designing interface, but here is one where
we disagree.
I'd prefer an interface that says "copy this fd to that one, and
optimize that if you can".
All cases that can't be optimized would end up doing an in-kernel read
/ write loop. Sure, there is no advantage above doing that same loop
in userspace, but this way the kernel can "grow" and optimize more
stuff later on.
For example, copying a file from one disk to another. I'm pretty sure
that some efficiency can be gained if you don't need to handle the
possibility of the userspace program accessing the data in between the
read and the write. Sure this may not qualify as a "trivial
optimization, that can be done with the existing infrastructure" right
now, but programs that want to indicate "kernel, please optimize this
if you can" can say so.
Currently, once the optimization happens to become possible (*), we'll
have to upgrade all apps that happen to be able to use it. If now we
start advertizing the interface (at a cost of a read/write loop in the
kernel: five lines of code) we will be able to upgrade the kernel, and
automatically improve the performance of every app that happens to use
the interface.
Roger.
(*) Either because the infrastructure makes it "trivial", or because
someone convinces you that it is a valid optimization that makes a
huge difference in an important case.
--
** R.E.Wolff@BitWizard.nl ** http://www.BitWizard.nl/ ** +31-15-2137555 **
*-- BitWizard writes Linux device drivers for any device you may have! --*
* There are old pilots, and there are bold pilots.
* There are also old, bald pilots.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
next prev parent reply other threads:[~2001-01-18 8:23 UTC|newest]
Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-01-17 15:02 Is sendfile all that sexy? Ben Mansell
2000-01-01 2:10 ` Pavel Machek
2001-01-17 19:32 ` Linus Torvalds
2001-01-18 2:34 ` Olivier Galibert
2001-01-21 21:22 ` LA Walsh
2001-01-18 8:23 ` Rogier Wolff [this message]
2001-01-18 10:01 ` Andreas Dilger
2001-01-18 11:04 ` Russell Leighton
2001-01-18 16:36 ` Larry McVoy
2001-01-19 1:53 ` Linus Torvalds
2001-01-18 16:24 ` Linus Torvalds
2001-01-18 18:46 ` Kai Henningsen
2001-01-18 18:58 ` Roman Zippel
2001-01-18 19:42 ` Linus Torvalds
2001-01-19 0:18 ` Roman Zippel
2001-01-19 1:14 ` Linus Torvalds
2001-01-19 6:57 ` Alan Cox
2001-01-19 10:13 ` Roman Zippel
2001-01-19 10:55 ` Andre Hedrick
2001-01-19 20:18 ` kuznet
2001-01-19 21:45 ` Linus Torvalds
2001-01-20 18:53 ` kuznet
2001-01-20 19:26 ` Linus Torvalds
2001-01-20 21:20 ` Roman Zippel
2001-01-21 0:25 ` Linus Torvalds
2001-01-21 2:03 ` Roman Zippel
2001-01-21 18:00 ` kuznet
2001-01-21 23:21 ` David Woodhouse
2001-01-20 15:36 ` Kai Henningsen
2001-01-20 21:01 ` Linus Torvalds
2001-01-20 21:10 ` Mo McKinlay
2001-01-20 22:24 ` Roman Zippel
2001-01-21 0:33 ` Linus Torvalds
2001-01-21 1:29 ` David Schwartz
2001-01-21 2:42 ` Roman Zippel
2001-01-21 9:52 ` James Sutherland
2001-01-21 10:02 ` Ingo Molnar
2001-01-22 9:52 ` Helge Hafting
2001-01-22 13:00 ` James Sutherland
2001-01-23 9:01 ` Helge Hafting
2001-01-23 9:37 ` James Sutherland
2001-01-18 19:51 ` Rick Jones
2001-01-18 12:17 ` Peter Samuelson
2001-01-22 18:13 ` Val Henson
2001-01-22 18:27 ` David Lang
2001-01-22 19:37 ` Val Henson
2001-01-22 20:01 ` David Lang
2001-01-22 22:04 ` Ion Badulescu
2001-01-22 18:54 ` Linus Torvalds
-- strict thread matches above, loose matches on Subject: below --
2001-01-24 15:12 Sasi Peter
2001-01-24 15:29 ` James Sutherland
2001-01-25 1:11 ` Alan Cox
2001-01-25 9:06 ` James Sutherland
2001-01-25 10:42 ` bert hubert
2001-01-25 12:14 ` James Sutherland
[not found] <Pine.LNX.4.10.10101190911130.10218-100000@penguin.transmeta.com>
2001-01-19 17:23 ` Rogier Wolff
2001-01-16 13:50 Andries.Brouwer
2001-01-17 6:56 ` Ton Hospel
2001-01-17 7:31 ` Steve VanDevender
2001-01-17 8:09 ` Ton Hospel
2001-01-14 18:29 jamal
2001-01-14 18:50 ` Ingo Molnar
2001-01-14 19:02 ` jamal
2001-01-14 19:09 ` Ingo Molnar
2001-01-14 19:18 ` jamal
2001-01-14 20:22 ` Linus Torvalds
2001-01-14 20:38 ` Ingo Molnar
2001-01-14 21:44 ` Linus Torvalds
2001-01-14 21:49 ` Ingo Molnar
2001-01-14 21:54 ` Gerhard Mack
2001-01-14 22:40 ` Linus Torvalds
2001-01-14 22:45 ` J Sloan
2001-01-15 20:15 ` H. Peter Anvin
2001-01-15 3:43 ` Michael Peddemors
2001-01-15 13:02 ` Florian Weimer
2001-01-15 13:45 ` Tristan Greaves
2001-01-15 1:14 ` Dan Hollis
2001-01-15 15:24 ` Jonathan Thackray
2001-01-15 15:36 ` Matti Aarnio
2001-01-15 20:17 ` H. Peter Anvin
2001-01-15 16:05 ` dean gaudet
2001-01-15 18:34 ` Jonathan Thackray
2001-01-15 18:46 ` Linus Torvalds
2001-01-15 18:58 ` dean gaudet
2001-01-15 19:41 ` Ingo Molnar
2001-01-15 20:33 ` Albert D. Cahalan
2001-01-15 21:00 ` Linus Torvalds
2001-01-16 10:40 ` Felix von Leitner
2001-01-16 11:56 ` Peter Samuelson
2001-01-16 12:37 ` Ingo Molnar
2001-01-16 12:42 ` Ingo Molnar
2001-01-16 12:47 ` Felix von Leitner
2001-01-16 13:48 ` Jamie Lokier
2001-01-16 14:20 ` Felix von Leitner
2001-01-16 15:05 ` David L. Parsley
2001-01-16 15:05 ` Jakub Jelinek
2001-01-16 15:46 ` David L. Parsley
2001-01-18 14:00 ` Laramie Leavitt
2001-01-17 19:27 ` dean gaudet
2001-01-24 0:58 ` Sasi Peter
2001-01-24 8:44 ` James Sutherland
2001-01-25 10:20 ` Anton Blanchard
2001-01-25 10:58 ` Sasi Peter
2001-01-26 6:10 ` Anton Blanchard
2001-01-26 11:46 ` David S. Miller
2001-01-26 14:12 ` Anton Blanchard
2001-01-15 23:16 ` Pavel Machek
2001-01-16 13:47 ` jamal
2001-01-16 14:41 ` Pavel Machek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200101180823.JAA18205@cave.bitwizard.nl \
--to=r.e.wolff@bitwizard.nl \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@transmeta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox