git: socket: Limit the number of accepted sockets that kevent reports.

Sepherosa Ziehau sephe at crater.dragonflybsd.org
Thu Oct 5 07:17:32 PDT 2017


commit 65e531c6c247b945f241dc189d6cffd14e2bb893
Author: Sepherosa Ziehau <sephe at dragonflybsd.org>
Date:   Thu Oct 5 14:06:11 2017 +0800

    socket: Limit the number of accepted sockets that kevent reports.
    
    By default it is limited to 32.  It can be changed through:
    sysctl kern.ipc.soavailconn=X
    
    This change does _not_ affect userland using accept(2) in the following
    way:
        for (;;) {
            s = accept();
            if (s < 0 && errno == EAGAIN)
                break;
            /* Processing accepted socket. */
        }
    
    This change only affects optimized userland using kevent.data to avoid
    extra accept(2) syscall:
        for (i = 0; i < kevent.data; ++i) {
            s = accept();
            /* Processing accepted socket. */
        }
    
    The above logic is applied by nginx.  However, due to the cost of the
    "Processing accepted socket" parts, this kinda of loop can increase
    latency and destablize latency.
    
    The comparison w/ 30K concurrent connections, 1 request/connection.
    
     1K web object
             |  performance |  lat-avg | lat-stdev |  lat-99%
    ---------+--------------+----------+-----------+----------
    no limit | 210279.88tps |  59.19ms |    4.60ms |  69.02ms
    ---------+--------------+----------+-----------+----------
    32 limit | 217599.01tps |  32.00ms |    2.35ms |  35.59ms
    
    ========
    
     8K web object
             |  performance |  lat-avg | lat-stdev |  lat-99%
    ---------+--------------+----------+-----------+----------
    no limit | 180627.61tps |  70.53ms |    4.95ms |  80.61ms
    ---------+--------------+----------+-----------+----------
    32 limit | 186324.41tps |  37.41ms |    4.81ms |  48.69ms
    
    ========
    
    16K web object
             |  performance |  lat-avg | lat-stdev |  lat-99%
    ---------+--------------+----------+-----------+----------
    no limit | 138667.84tps |  95.93ms |   14.90ms | 135.47ms
    ---------+--------------+----------+-----------+----------
    32 limit | 138778.11tps |  60.90ms |   11.80ms |  92.07ms
    
    This change significantly reduces average latency and .99 latency,
    and performance is improved slightly.

Summary of changes:
 sys/kern/uipc_socket.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/65e531c6c247b945f241dc189d6cffd14e2bb893


-- 
DragonFly BSD source repository


More information about the Commits mailing list