• Eric Dumazet's avatar
    tcp: force a PSH flag on TSO packets · 051ba674
    Eric Dumazet authored
    When tcp sends a TSO packet, adding a PSH flag on it
    reduces the sojourn time of GRO packet in GRO receivers.
    
    This is particularly the case under pressure, since RX queues
    receive packets for many concurrent flows.
    
    A sender can give a hint to GRO engines when it is
    appropriate to flush a super-packet, especially when pacing
    is in the picture, since next packet is probably delayed by
    one ms.
    
    Having less packets in GRO engine reduces chance
    of LRU eviction or inflated RTT, and reduces GRO cost.
    
    We found recently that we must not set the PSH flag on
    individual full-size MSS segments [1] :
    
     Under pressure (CWR state), we better let the packet sit
     for a small delay (depending on NAPI logic) so that the
     ACK packet is delayed, and thus next packet we send is
     also delayed a bit. Eventually the bottleneck queue can
     be drained. DCTCP flows with CWND=1 have demonstrated
     the issue.
    
    This patch allows to slowdown the aggregate traffic without
    involving high resolution timers on senders and/or
    receivers.
    
    It has been used at Google for about four years,
    and has been discussed at various networking conferences.
    
    [1] segments smaller than MSS already have PSH flag set
        by tcp_sendmsg() / tcp_mark_push(), unless MSG_MORE
        has been requested by the user.
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Cc: Soheil Hassas Yeganeh <soheil@google.com>
    Cc: Neal Cardwell <ncardwell@google.com>
    Cc: Yuchung Cheng <ycheng@google.com>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: Tariq Toukan <tariqt@mellanox.com>
    Acked-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
    Acked-by: default avatarNeal Cardwell <ncardwell@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    051ba674
tcp_output.c 111 KB