Help with AIO
Igor Sysoev
igor at sysoev.ru
Sat Sep 17 10:59:01 UTC 2011
On Fri, Sep 16, 2011 at 06:10:02PM +0400, Igor Sysoev wrote:
> On Fri, Sep 16, 2011 at 02:39:07PM +0400, Igor Sysoev wrote:
> > On Thu, Sep 15, 2011 at 04:21:44PM +0200, Hagai Avrahami wrote:
> > > Hi
> > >
> > > When benchmarking AIO read, I reached more than 1024 concurrent Async IO -
> > > 1. I saw a weird error log
> > > 2. Nginx did not fallback to regular blocking read
> > >
> > > I looked on the source code -- src/os/unix/ngx_linux_aio_read.c line:105
> > > and I think there is a problem in errno handling
> > >
> > > // Current Code
> > > //----------------------------------------------------------------------------
> > > *n = io_submit(ngx_aio_ctx, 1, piocb);
> > >
> > > if (n == 1) {
> > > ev->active = 1;
> > > ev->ready = 0;
> > > ev->complete = 0;
> > >
> > > return NGX_AGAIN;
> > > }
> > >
> > > n = -n; <---------------------------------------------------------??
> >
> > Thank you, this is a bug. I confused this with _syscall(2).
>
> Linux AIO fixed in these two commits:
>
> http://trac.nginx.org/nginx/changeset/4130/nginx
> http://trac.nginx.org/nginx/changeset/4131/nginx
>
> Also I'm going to introduce the directive:
>
> events {
> worker_aio_events 100;
> }
>
> to set how much aio events worker may request to the kernel.
> I'm going to set default value to 32 events per worker.
> Currenly this value is hardcoded to 1024 and it seems it is too large,
> since default /proc/sys/fs/aio-max-nr value is 65536 and this means
> that you can run no more than 64 workers.
I think it should be renamed to
events {
worker_aio_requests 100;
}
--
Igor Sysoev
More information about the nginx
mailing list