sendfile(2) SF_NOPUSH flag proposal

Igor Sysoev is at rambler-co.ru
Thu May 29 00:53:08 PDT 2003


On Wed, 28 May 2003, Terry Lambert wrote:

> Igor Sysoev wrote:

> > The portability argument is bogus because sendfile() portability is nonsense.
> 
> Darwin has sendfile.  See the released source code: it matches
> the FreeBSD semantics, from what I can tell.

So now FreeBSD/Darwin is second pair after AIX/MVS that has the same sendfile()
prototype.  It surely improves the sendfile() portability.  Undoubtedly.

> > The drawback that really annoyed me is that sendfile() blocks on a reading
> > from a disk while a sending to non-blocking socket.  Although I see three
> > workarounds it's much better to fix this inside sendfile().
> 
> There's no workaround for the latency issue, which comes from
> the fact that a trap handles the request for more pages, and
> that blocks all callers.  Threads has the same problem in libc_r.

The workaround idea is simple - a preloading.  But implementation on user
level is complex.  In FreeBSD 4.x I see three ways:

*) the use of aio_read() to read the single bytes;
*) the use rfork()ed helper processes to read the single bytes;
*) and the use the pool of rfork()ed processes to handle connections.

But all of them requires significant changes of an application.

> > Five people ?
> 
> Bill Fenner, Matt Dillon, Peter Jeremy, Marc Slemko, Terry Lambert,
> Garance Droshin.

At time of your mail there were only 4 people, in order of appearance:
Peter Jeremy, you, Matt Dillon, and Marc Slemko. Bill Fenner's email
was sent one and a half hour after yours and just before my response.
Garance Droshin's mail was sent several hours later.


Igor Sysoev
http://sysoev.ru/en/



More information about the freebsd-arch mailing list