RE: sendfile to nonblocking socket
From: David Schwartz
Date: Tue Apr 24 2007 - 05:20:19 EST
> David Schwartz ÐÐÑÐÑ:
> > You have a misunderstanding about the semantics of 'sendfile'.
> The 'sendfile' function is just a more efficient version of a
> read followed by a write. If you did a read followed by a write,
> it would block as well (in the read).
> > DS
> sendfile function is not just a more efficient version of a read
> followed by a write. It reads from one fd and write to another at tha
> same time. Please try to read 2G, and then write 2G - and how much
> memory you will be need and how much time you will loose while reading
> 2G from disk, but not writing them to socket.
You are correct. What I meant to say was that it's just a more efficient version of 'mmap'ing a file and then 'write'ing from the 'mmap'. The 'write' to a non-blocking socket can still 'block' on disk I/O.
> If you know more
> efficient method to transfer file from disk to network - please advise.
> Now all I want is really non-blocking sendfile. Currently sendfile is
> non-blocking on network, but not on disk i/o. And when I have network
> faster than disk - I get block.
There are many different techniques and which is correct depends on what direction you want to go. POSIX asynchronous I/O is one possibility. Threads plus epoll is another. It really depends upon how much performance you need, how much complexity you can tolerate, and how portable you need to be.
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/