Welcome! Log In Create A New Profile

Advanced

Re: Help with AIO

Hagai Avrahami
September 15, 2011 10:24AM
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; <---------------------------------------------------------??

if (n == NGX_EAGAIN) {
return ngx_read_file(file, buf, size, offset);
}

ngx_log_error(NGX_LOG_CRIT, file->log, n,
"io_submit(\"%V\") failed", &file->name);

if (n == NGX_ENOSYS) {
ngx_file_aio = 0;
return ngx_read_file(file, buf, size, offset);
}

return NGX_ERROR;*



// I think it should be
//----------------------------------------------------------------------------
*n = io_submit(ngx_aio_ctx, 1, piocb);

if (n == 1) {
ev->active = 1;
ev->ready = 0;
ev->complete = 0;

return NGX_AGAIN;
}

if (n == 0)
{
ngx_log_error(NGX_LOG_CRIT, file->log, 0,
"io_submit(\"%V\") failed - 0 - I/O request blocks",
&file->name);

return NGX_ERROR;
}
else
{
n = errno;
}

* * if (n== NGX_EAGAIN) {
return ngx_read_file(file, buf, size, offset);
}

ngx_log_error(NGX_LOG_CRIT, file->log, n,
"io_submit(\"%V\") failed", &file->name);

if (n== NGX_ENOSYS) {
ngx_file_aio = 0;
return ngx_read_file(file, buf, size, offset);
}

return NGX_ERROR;*
//----------------------------------------------------------------------------


your help will be appreciated
Thanks
Hagai

On Tue, Sep 6, 2011 at 9:33 AM, Maxim Dounin <mdounin@mdounin.ru> wrote:

> Hello!
>
> On Tue, Sep 06, 2011 at 01:21:00AM +0300, Hagai Avrahami wrote:
>
> > Hi
> >
> > I configured Nginx with *aio *mode *on *and 1 *worker process*
> > In benchmarking I saw limit of 1024 concurrent sessions even configured
> to
> > 4096 *worker connections*
>
> Sure it's not limitation of the benchmarking tool you use? Most
> tools out there use select() and hence limited to 1024
> concurrent connections.
>
> > When I looked in the source code I could see that io_setup is called
> with
> > fix value of 1024 max events
> > can anyone please explain me the hard coded limit
> > Is it OK to change it or it is derived from other limit I am not aware of
> > any help will be appreciated
>
> io_setup() maxevents is a limit on number of aio requests allowed
> to be submitted simulteneously; if nginx hits this limit, it will
> fallback to normal blocking read.
>
> If you are going to change it, make sure to keep total for all
> processes lower than /proc/sys/fs/aio-max-nr.
>
> Maxim Dounin
>
> _______________________________________________
> nginx mailing list
> nginx@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx
>



--

*Hagai Avrahami*
Qwilt | Work: +972-72-2221644| Mobile: +972-54-4895656 |
hagaia@qwilt.com<yoav@qwilt.com>
_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx
Subject Author Posted

Help with AIO

Hagai Avrahami September 05, 2011 06:22PM

Re: Help with AIO

Maxim Dounin September 06, 2011 03:34AM

Re: Help with AIO

Hagai Avrahami September 06, 2011 03:48AM

Re: Help with AIO

Hagai Avrahami September 15, 2011 10:24AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 299
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready