Re: [PLEASE-TESTME] Zerocopy networking patch, 2.4.0-1

Linus Torvalds (torvalds@transmeta.com)
Tue, 9 Jan 2001 13:26:44 -0800 (PST)


On Tue, 9 Jan 2001, Christoph Hellwig wrote:
> >
> > Look at sendfile(). You do NOT have a "bunch" of pages.
> >
> > Sendfile() is very much a page-at-a-time thing, and expects the actual IO
> > layers to do it's own scatter-gather.
> >
> > So sendfile() doesn't want any array at all: it only wants a single
> > page-offset-length tuple interface.
>
> The current implementations does.
> But others are possible. I could post one in a few days to show that it is
> possible.

Why do you bother arguing, when I've shown you that even if sendfile()
_did_ do multiple pages, it STILL wouldn't make kibuf's the right
interface. You just snipped out that part of my email, which states that
the networking layer would still need to do better scatter-gather than
kiobuf's can give it for multiple send-file invocations.

Let me iterate:

- the layers like TCP _need_ to do scatter-gather anyway: you absolutely
want to be able to send out just one packet even if the data comes from
two different sources (for example, one source might be the http
header, while the other source is the actual file contents. This is
definitely not a made-up-example, this is THE example of something like
this, and happens with just about all protocols that have a notion of
a header, which is pretty much 100% of them).

- because TCP needs to do scatter-gather anyway across calls, there is no
real reason for sendfile() to do it. And sendfile() doing it would
_not_ obviate the need for it in the networking layer - it would only
add complexity for absolutely no performance gain.

So neither sendfile _nor_ the networking layer want kiobuf's. Never have,
never will. The "half-way scatter-gather" support they give ends up either
being too much baggage, or too little. It's never the right fit.

kiovec adds the support for true scatter-gather, but with a horribly bad
interface, and much too much overhead - and absolutely NO advantages over
the _proper_ array of <page-offset-tuple> which is much simpler than the
complex two-level arrays that you get with kiovec+kiobuf.

End of story.

Linus

-
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/