• D. Wythe's avatar
    net/smc: Make smc_tcp_listen_work() independent · 3079e342
    D. Wythe authored
    In multithread and 10K connections benchmark, the backend TCP connection
    established very slowly, and lots of TCP connections stay in SYN_SENT
    state.
    
    Client: smc_run wrk -c 10000 -t 4 http://server
    
    the netstate of server host shows like:
        145042 times the listen queue of a socket overflowed
        145042 SYNs to LISTEN sockets dropped
    
    One reason of this issue is that, since the smc_tcp_listen_work() shared
    the same workqueue (smc_hs_wq) with smc_listen_work(), while the
    smc_listen_work() do blocking wait for smc connection established. Once
    the workqueue became congested, it's will block the accept() from TCP
    listen.
    
    This patch creates a independent workqueue(smc_tcp_ls_wq) for
    smc_tcp_listen_work(), separate it from smc_listen_work(), which is
    quite acceptable considering that smc_tcp_listen_work() runs very fast.
    Signed-off-by: default avatarD. Wythe <alibuda@linux.alibaba.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3079e342
af_smc.c 79.4 KB