aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2011-09-20 07:30:09 +0000
committerIgor Sysoev <igor@sysoev.ru>2011-09-20 07:30:09 +0000
commitc8df23cb29146c1dfca82141e19b1049b1fc1011 (patch)
treeb55c3a854d9d592aae14eecaa9807f5679219dc9 /src
parenta823c550e45bb653c5d660cceaea3f153b3b28e8 (diff)
downloadnginx-c8df23cb29146c1dfca82141e19b1049b1fc1011.tar.gz
nginx-c8df23cb29146c1dfca82141e19b1049b1fc1011.zip
The "worker_aio_requests" directive.
The default value is 32 AIO simultaneous requests per worker. Previously they were hardcoded to 1024, and it was too large, since Linux allocated them early on io_setup(), but not on request itself. So with default value of /proc/sys/fs/aio-max-nr equal to 65536 only 64 worker processes could be run simultaneously. 32 AIO requests are enough for modern disks even if server runs only 1 worker.
Diffstat (limited to 'src')
-rw-r--r--src/event/modules/ngx_epoll_module.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c
index df5bf8925..31c10c6dc 100644
--- a/src/event/modules/ngx_epoll_module.c
+++ b/src/event/modules/ngx_epoll_module.c
@@ -86,6 +86,7 @@ int eventfd(u_int initval)
typedef struct {
ngx_uint_t events;
+ ngx_uint_t aio_requests;
} ngx_epoll_conf_t;
@@ -133,6 +134,13 @@ static ngx_command_t ngx_epoll_commands[] = {
offsetof(ngx_epoll_conf_t, events),
NULL },
+ { ngx_string("worker_aio_requests"),
+ NGX_EVENT_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_num_slot,
+ 0,
+ offsetof(ngx_epoll_conf_t, aio_requests),
+ NULL },
+
ngx_null_command
};
@@ -207,7 +215,7 @@ io_getevents(aio_context_t ctx, long min_nr, long nr, struct io_event *events,
static void
-ngx_epoll_aio_init(ngx_cycle_t *cycle)
+ngx_epoll_aio_init(ngx_cycle_t *cycle, ngx_epoll_conf_t *epcf)
{
int n;
struct epoll_event ee;
@@ -232,7 +240,7 @@ ngx_epoll_aio_init(ngx_cycle_t *cycle)
goto failed;
}
- if (io_setup(1024, &ngx_aio_ctx) == -1) {
+ if (io_setup(epcf->aio_requests, &ngx_aio_ctx) == -1) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
"io_setup() failed");
goto failed;
@@ -294,7 +302,7 @@ ngx_epoll_init(ngx_cycle_t *cycle, ngx_msec_t timer)
#if (NGX_HAVE_FILE_AIO)
- ngx_epoll_aio_init(cycle);
+ ngx_epoll_aio_init(cycle, epcf);
#endif
}
@@ -794,6 +802,7 @@ ngx_epoll_create_conf(ngx_cycle_t *cycle)
}
epcf->events = NGX_CONF_UNSET;
+ epcf->aio_requests = NGX_CONF_UNSET;
return epcf;
}
@@ -805,6 +814,7 @@ ngx_epoll_init_conf(ngx_cycle_t *cycle, void *conf)
ngx_epoll_conf_t *epcf = conf;
ngx_conf_init_uint_value(epcf->events, 512);
+ ngx_conf_init_uint_value(epcf->aio_requests, 32);
return NGX_CONF_OK;
}