CentOS 5.5 + nginx + aio
Maxim Dounin
mdounin на mdounin.ru
Пт Окт 15 17:33:27 MSD 2010
Hello!
On Fri, Oct 15, 2010 at 07:55:44AM -0400, Panasonic1 wrote:
> >А патчи точно применены, и новый nginx
> запущен?
> Да, конечно. Новый nginx запускал через
> restart.
>
>
> >Покажите diff -u по отношению к
> коробочной версии.
>
> # diff -u nginx-0.8.50/ nginx-0.8.50-patched/ -r
> Only in nginx-0.8.50-patched/src/core: ngx_output_chain.c.orig
> diff -u -r nginx-0.8.50/src/http/ngx_http_copy_filter_module.c
> nginx-0.8.50-patched/src/http/ngx_http_copy_filt
> er_module.c
> --- nginx-0.8.50/src/http/ngx_http_copy_filter_module.c 2010-05-14
> 18:18:44.000000000 +0600
> +++ nginx-0.8.50-patched/src/http/ngx_http_copy_filter_module.c
> 2010-10-15 04:53:23.000000000 +0600
> @@ -118,8 +118,10 @@
> ctx->filter_ctx = r;
>
> #if (NGX_HAVE_FILE_AIO)
> - if (ngx_file_aio && clcf->aio) {
> - ctx->aio_handler = ngx_http_copy_aio_handler;
> + if (ngx_file_aio) {
> + if (clcf->aio) {
> + ctx->aio_handler = ngx_http_copy_aio_handler;
> + }
> #if (NGX_HAVE_AIO_SENDFILE)
> c->aio_sendfile = (clcf->aio == NGX_HTTP_AIO_SENDFILE);
> #endif
> @@ -156,6 +158,11 @@
> ngx_file_t *file;
> ngx_http_ephemeral_t *e;
>
> + if (r->aio) {
> + c->busy_sendfile = NULL;
> + return rc;
> + }
> +
> file = c->busy_sendfile->file;
> offset = c->busy_sendfile->file_pos;
>
> @@ -211,6 +218,8 @@
>
> r->main->blocked++;
> r->aio = 1;
> +
> + ctx->aio = 1;
> }
>
>
> diff -u -r nginx-0.8.50/src/http/ngx_http_request.c
> nginx-0.8.50-patched/src/http/ngx_http_request.c
> --- nginx-0.8.50/src/http/ngx_http_request.c 2010-07-05
> 19:35:20.000000000 +0600
> +++ nginx-0.8.50-patched/src/http/ngx_http_request.c 2010-10-15
> 04:53:23.000000000 +0600
> @@ -2218,17 +2218,17 @@
> return;
> }
>
> - } else {
> - if (wev->delayed || r->aio) {
> - ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0,
> - "http writer delayed");
> + }
>
> - if (ngx_handle_write_event(wev, clcf->send_lowat) !=
> NGX_OK) {
> - ngx_http_close_request(r, 0);
> - }
> + if (wev->delayed || r->aio) {
> + ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0,
> + "http writer delayed");
>
> - return;
> + if (ngx_handle_write_event(wev, clcf->send_lowat) != NGX_OK) {
> + ngx_http_close_request(r, 0);
> }
> +
> + return;
> }
>
> rc = ngx_http_output_filter(r, NULL);
> @@ -2244,7 +2244,7 @@
>
> if (r->buffered || r->postponed || (r == r->main && c->buffered))
> {
>
> - if (!wev->ready && !wev->delayed) {
> + if (!wev->delayed) {
> ngx_add_timer(wev, clcf->send_timeout);
> }
>
> diff -u -r nginx-0.8.50/src/os/unix/ngx_linux_aio_read.c
> nginx-0.8.50-patched/src/os/unix/ngx_linux_aio_read.c
> --- nginx-0.8.50/src/os/unix/ngx_linux_aio_read.c 2009-11-05
> 19:12:30.000000000 +0600
> +++ nginx-0.8.50-patched/src/os/unix/ngx_linux_aio_read.c
> 2010-10-15 04:48:47.000000000 +0600
> @@ -95,6 +95,10 @@
> n = io_submit(ngx_aio_ctx, 1, piocb);
>
> if (n == 1) {
> + ev->active = 1;
> + ev->ready = 0;
> + ev->complete = 0;
> +
> return NGX_AGAIN;
> }
Вот этот патч применён не полностью:
http://nginx.org/pipermail/nginx-devel/2010-October/000499.html
Нет куска на src/core/ngx_output_chain.c.
Maxim Dounin
Подробная информация о списке рассылки nginx-ru