• Eric Dumazet's avatar
    tcp: sk_add_backlog() is too agressive for TCP · da882c1f
    Eric Dumazet authored
    While investigating TCP performance problems on 10Gb+ links, we found a
    tcp sender was dropping lot of incoming ACKS because of sk_rcvbuf limit
    in sk_add_backlog(), especially if receiver doesnt use GRO/LRO and sends
    one ACK every two MSS segments.
    
    A sender usually tweaks sk_sndbuf, but sk_rcvbuf stays at its default
    value (87380), allowing a too small backlog.
    
    A TCP ACK, even being small, can consume nearly same truesize space than
    outgoing packets. Using sk_rcvbuf + sk_sndbuf as a limit makes sense and
    is fast to compute.
    
    Performance results on netperf, single flow, receiver with disabled
    GRO/LRO : 7500 Mbits instead of 6050 Mbits, no more TCPBacklogDrop
    increments at sender.
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Cc: Neal Cardwell <ncardwell@google.com>
    Cc: Tom Herbert <therbert@google.com>
    Cc: Maciej Żenczykowski <maze@google.com>
    Cc: Yuchung Cheng <ycheng@google.com>
    Cc: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
    Cc: Rick Jones <rick.jones2@hp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    da882c1f
tcp_ipv4.c 66.9 KB