fcntl(F_RDAHEAD)
Kostik Belousov
kostikbel at gmail.com
Fri Sep 18 07:40:55 UTC 2009
On Thu, Sep 17, 2009 at 03:26:41PM -0700, Xin LI wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hi, Igor,
>
> Igor Sysoev wrote:
> > Hi,
> >
> > nginx-0.8.15 can use completely non-blocking sendfile() using SF_NODISKIO
> > flag. When sendfile() returns EBUSY, nginx calls aio_read() to read single
> > byte. The first aio_read() preloads the first 128K part of a file in VM cache,
> > however, all successive aio_read()s preload just 16K parts of the file.
> > This makes non-blocking sendfile() usage ineffective for files larger
> > than 128K.
> >
> > I've created a small patch for Darwin compatible F_RDAHEAD fcntl:
> >
> > fcntl(fd, F_RDAHEAD, preload_size)
> >
> > There is small incompatibilty: Darwin's fcntl allows just to enable/disable
> > read ahead, while the proposed patch allows to set exact preload size.
> >
> > Currently the preload size affects vn_read() code path only and does not
> > affect on sendfile() code path. However, it can be easy extended on
> > sendfile() part too. The preload size is still limited by sysctl vfs.read_max.
> >
> > The patch is against FreeBSD 7.2 and was tested on FreeBSD 7.2-STABLE only.
>
> I have ported this as a patch against -HEAD (should apply on 8.0-R but
> it's too late for us to add a new feature) plus a manual page entry
> documenting the feature.
>
> I've used F_READAHEAD as the name, but reading the manual page, it looks
> like we can just use F_RDAHEAD since Darwin seems to just distinguish 0
> and !=0 case so that programmers won't have to use #ifdef or something
> else to get code working on different platform?
What I dislike about the patch is the new kernel-private flag that is
eaten from the open(2) flags namespace. We do already have FHASLOCK,
so far the only such flag.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20090918/48b8ef92/attachment.pgp
More information about the freebsd-hackers
mailing list