<div dir="ltr"><div><div><div>Hi,<br><br></div>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: <a href="https://github.com/antirez/redis/pull/3773" target="_blank">https://github.com/antirez/<wbr>redis/pull/3773</a><br><br># HG changeset patch<br># User Donatas Abraitis <<a href="mailto:donatas.abraitis@gmail.com">donatas.abraitis@gmail.com</a>><br># Date 1485982537 -7200<br>#      Wed Feb 01 22:55:37 2017 +0200<br># Node ID aa29306b9ff2ef6a72919d7cc8ace72e3dd3a3aa<br># Parent  d2b2ff157da53260b2b1c414792100ff0cd1377d<br>Set SO_BUSY_POLL option for socket if specified<br><br>diff -r d2b2ff157da5 -r aa29306b9ff2 src/core/ngx_connection.c<br>--- a/src/core/ngx_connection.c    Tue Jan 31 21:19:58 2017 +0300<br>+++ b/src/core/ngx_connection.c    Wed Feb 01 22:55:37 2017 +0200<br>@@ -497,6 +497,25 @@<br>             }<br> #endif<br><br>+        if (ls[i].busypoll) {<br>+            if (setsockopt(s, SOL_SOCKET, SO_BUSY_POLL,<br>+                   &ls[i].busypoll, sizeof(ls[i].busypoll))<br>+            == -1)<br>+        {<br>+            ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,<br>+                  "setsockopt(SO_BUSY_POLL) %V failed, ignored",<br>+                  &ls[i].addr_text);<br>+<br>+            if (ngx_close_socket(s) == -1) {<br>+                ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,<br>+                      ngx_close_socket_n " %V failed",<br>+                      &ls[i].addr_text);<br>+            }<br>+<br>+            return NGX_ERROR;<br>+        }<br>+        }<br>+<br> #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)<br><br>             if (ls[i].sockaddr->sa_family == AF_INET6) {<br>diff -r d2b2ff157da5 -r aa29306b9ff2 src/core/ngx_connection.h<br>--- a/src/core/ngx_connection.h    Tue Jan 31 21:19:58 2017 +0300<br>+++ b/src/core/ngx_connection.h    Wed Feb 01 22:55:37 2017 +0200<br>@@ -70,6 +70,7 @@<br>     unsigned            ipv6only:1;<br> #endif<br>     unsigned            reuseport:1;<br>+    int                 busypoll;<br>     unsigned            add_reuseport:1;<br>     unsigned            keepalive:2;<br><br>diff -r d2b2ff157da5 -r aa29306b9ff2 src/http/ngx_http.c<br>--- a/src/http/ngx_http.c    Tue Jan 31 21:19:58 2017 +0300<br>+++ b/src/http/ngx_http.c    Wed Feb 01 22:55:37 2017 +0200<br>@@ -1741,6 +1741,7 @@<br> #endif<br><br>     ls->backlog = addr->opt.backlog;<br>+    ls->busypoll = addr->opt.busypoll;<br>     ls->rcvbuf = addr->opt.rcvbuf;<br>     ls->sndbuf = addr->opt.sndbuf;<br><br>diff -r d2b2ff157da5 -r aa29306b9ff2 src/http/ngx_http_core_module.c<br>--- a/src/http/ngx_http_core_module.c    Tue Jan 31 21:19:58 2017 +0300<br>+++ b/src/http/ngx_http_core_module.c    Wed Feb 01 22:55:37 2017 +0200<br>@@ -2984,6 +2984,7 @@<br>         lsopt.socklen = sizeof(struct sockaddr_in);<br><br>         lsopt.backlog = NGX_LISTEN_BACKLOG;<br>+    lsopt.busypoll = 0;<br>         lsopt.rcvbuf = -1;<br>         lsopt.sndbuf = -1;<br> #if (NGX_HAVE_SETFIB)<br>@@ -3946,6 +3947,7 @@<br><br>     lsopt.socklen = u.socklen;<br>     lsopt.backlog = NGX_LISTEN_BACKLOG;<br>+    lsopt.busypoll = 0;<br>     lsopt.rcvbuf = -1;<br>     lsopt.sndbuf = -1;<br> #if (NGX_HAVE_SETFIB)<br>@@ -4009,6 +4011,19 @@<br>         }<br> #endif<br><br>+    if (ngx_strncmp(value[n].data, "busypoll=", 9) == 0) {<br>+        lsopt.busypoll = ngx_atoi(value[n].data + 9, value[n].len - 9);<br>+        lsopt.set = 1;<br>+        lsopt.bind = 1;<br>+<br>+        if (lsopt.busypoll == NGX_ERROR || lsopt.busypoll < 0) {<br>+        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,<br>+                   "invalid busypoll value \"%V\"", &value[n]);<br>+        return NGX_CONF_ERROR;<br>+        }<br>+        continue;<br>+    }<br>+<br>         if (ngx_strncmp(value[n].data, "backlog=", 8) == 0) {<br>             lsopt.backlog = ngx_atoi(value[n].data + 8, value[n].len - 8);<br>             lsopt.set = 1;<br>diff -r d2b2ff157da5 -r aa29306b9ff2 src/http/ngx_http_core_module.h<br>--- a/src/http/ngx_http_core_module.h    Tue Jan 31 21:19:58 2017 +0300<br>+++ b/src/http/ngx_http_core_module.h    Wed Feb 01 22:55:37 2017 +0200<br>@@ -83,6 +83,7 @@<br>     unsigned                   proxy_protocol:1;<br><br>     int                        backlog;<br>+    int                        busypoll;<br>     int                        rcvbuf;<br>     int                        sndbuf;<br> #if (NGX_HAVE_SETFIB)<br><br></div>Waiting for comments,<br></div>Donatas.<br></div>