Re: Syslets, Threadlets, generic AIO support, v6

From: Eric Dumazet
Date: Wed May 30 2007 - 16:50:04 EST


Linus Torvalds a écrit :

On Wed, 30 May 2007, Eric Dumazet wrote:
So yes, reimplement sendfile() should help to find last splice() bugs, and as
a bonus it could add non blocking disk io, (O_NONBLOCK on input file ->
socket)

Well, to get those kinds of advantages, you'd have to use splice directly, since sendfile() hasn't supported nonblocking disk IO, and the interface doesn't really allow for it.

sendfile() interface doesnt allow it, but if you open("somediskfile", O_RDONLY | O_NONBLOCK), then splice() based sendfile() can perform a non blocking disk io, (while starting an io with readahead)

I actually use this trick myself :)

(splice(disk -> pipe, NONBLOCK), splice(pipe -> worker))

non blocking disk io, + zero copy :)


In fact, since nonblocking accesses require also some *polling* method, and we don't have that for files, I suspect the best option for those things is to simply mix AIO and splice(). AIO tends to be the right thing for disk waits (read: short, often cached), and if we can improve AIO performance for the cached accesses (which is exactly what the threadlets should hopefully allow us to do), I would seriously suggest going that route.

But the pure "use splice to _implement_ sendfile()" thing is worth doing for all the other reasons, even if nonblocking file access is not likely one of them.

Linus



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/