Hi, I do not cover any tests, just putting this patchset and wanna ask if someone had tried this? I tried this for Redis and changes are really reasonably visible like here: https://github.com/antirez/redis/pull/3773
# HG changeset patch # User Donatas Abraitis <donatas.abrai...@gmail.com> # Date 1485982537 -7200 # Wed Feb 01 22:55:37 2017 +0200 # Node ID aa29306b9ff2ef6a72919d7cc8ace72e3dd3a3aa # Parent d2b2ff157da53260b2b1c414792100ff0cd1377d Set SO_BUSY_POLL option for socket if specified diff -r d2b2ff157da5 -r aa29306b9ff2 src/core/ngx_connection.c --- a/src/core/ngx_connection.c Tue Jan 31 21:19:58 2017 +0300 +++ b/src/core/ngx_connection.c Wed Feb 01 22:55:37 2017 +0200 @@ -497,6 +497,25 @@ } #endif + if (ls[i].busypoll) { + if (setsockopt(s, SOL_SOCKET, SO_BUSY_POLL, + &ls[i].busypoll, sizeof(ls[i].busypoll)) + == -1) + { + ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, + "setsockopt(SO_BUSY_POLL) %V failed, ignored", + &ls[i].addr_text); + + if (ngx_close_socket(s) == -1) { + ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, + ngx_close_socket_n " %V failed", + &ls[i].addr_text); + } + + return NGX_ERROR; + } + } + #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) if (ls[i].sockaddr->sa_family == AF_INET6) { diff -r d2b2ff157da5 -r aa29306b9ff2 src/core/ngx_connection.h --- a/src/core/ngx_connection.h Tue Jan 31 21:19:58 2017 +0300 +++ b/src/core/ngx_connection.h Wed Feb 01 22:55:37 2017 +0200 @@ -70,6 +70,7 @@ unsigned ipv6only:1; #endif unsigned reuseport:1; + int busypoll; unsigned add_reuseport:1; unsigned keepalive:2; diff -r d2b2ff157da5 -r aa29306b9ff2 src/http/ngx_http.c --- a/src/http/ngx_http.c Tue Jan 31 21:19:58 2017 +0300 +++ b/src/http/ngx_http.c Wed Feb 01 22:55:37 2017 +0200 @@ -1741,6 +1741,7 @@ #endif ls->backlog = addr->opt.backlog; + ls->busypoll = addr->opt.busypoll; ls->rcvbuf = addr->opt.rcvbuf; ls->sndbuf = addr->opt.sndbuf; diff -r d2b2ff157da5 -r aa29306b9ff2 src/http/ngx_http_core_module.c --- a/src/http/ngx_http_core_module.c Tue Jan 31 21:19:58 2017 +0300 +++ b/src/http/ngx_http_core_module.c Wed Feb 01 22:55:37 2017 +0200 @@ -2984,6 +2984,7 @@ lsopt.socklen = sizeof(struct sockaddr_in); lsopt.backlog = NGX_LISTEN_BACKLOG; + lsopt.busypoll = 0; lsopt.rcvbuf = -1; lsopt.sndbuf = -1; #if (NGX_HAVE_SETFIB) @@ -3946,6 +3947,7 @@ lsopt.socklen = u.socklen; lsopt.backlog = NGX_LISTEN_BACKLOG; + lsopt.busypoll = 0; lsopt.rcvbuf = -1; lsopt.sndbuf = -1; #if (NGX_HAVE_SETFIB) @@ -4009,6 +4011,19 @@ } #endif + if (ngx_strncmp(value[n].data, "busypoll=", 9) == 0) { + lsopt.busypoll = ngx_atoi(value[n].data + 9, value[n].len - 9); + lsopt.set = 1; + lsopt.bind = 1; + + if (lsopt.busypoll == NGX_ERROR || lsopt.busypoll < 0) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "invalid busypoll value \"%V\"", &value[n]); + return NGX_CONF_ERROR; + } + continue; + } + if (ngx_strncmp(value[n].data, "backlog=", 8) == 0) { lsopt.backlog = ngx_atoi(value[n].data + 8, value[n].len - 8); lsopt.set = 1; diff -r d2b2ff157da5 -r aa29306b9ff2 src/http/ngx_http_core_module.h --- a/src/http/ngx_http_core_module.h Tue Jan 31 21:19:58 2017 +0300 +++ b/src/http/ngx_http_core_module.h Wed Feb 01 22:55:37 2017 +0200 @@ -83,6 +83,7 @@ unsigned proxy_protocol:1; int backlog; + int busypoll; int rcvbuf; int sndbuf; #if (NGX_HAVE_SETFIB) Waiting for comments, Donatas.
_______________________________________________ nginx mailing list nginx@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx