• Eric Dumazet's avatar
    tcp: refine tcp_prune_ofo_queue() to not drop all packets · 36a6503f
    Eric Dumazet authored
    Over the years, TCP BDP has increased a lot, and is typically
    in the order of ~10 Mbytes with help of clever Congestion Control
    modules.
    
    In presence of packet losses, TCP stores incoming packets into an out of
    order queue, and number of skbs sitting there waiting for the missing
    packets to be received can match the BDP (~10 Mbytes)
    
    In some cases, TCP needs to make room for incoming skbs, and current
    strategy can simply remove all skbs in the out of order queue as a last
    resort, incurring a huge penalty, both for receiver and sender.
    
    Unfortunately these 'last resort events' are quite frequent, forcing
    sender to send all packets again, stalling the flow and wasting a lot of
    resources.
    
    This patch cleans only a part of the out of order queue in order
    to meet the memory constraints.
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Cc: Neal Cardwell <ncardwell@google.com>
    Cc: Yuchung Cheng <ycheng@google.com>
    Cc: Soheil Hassas Yeganeh <soheil@google.com>
    Cc: C. Stephen Gun <csg@google.com>
    Cc: Van Jacobson <vanj@google.com>
    Acked-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
    Acked-by: default avatarYuchung Cheng <ycheng@google.com>
    Acked-by: default avatarNeal Cardwell <ncardwell@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    36a6503f
tcp_input.c 181 KB