• Eric Dumazet's avatar
    net: gro: selective flush of packets · 2e71a6f8
    Eric Dumazet authored
    Current GRO can hold packets in gro_list for almost unlimited
    time, in case napi->poll() handler consumes its budget over and over.
    
    In this case, napi_complete()/napi_gro_flush() are not called.
    
    Another problem is that gro_list is flushed in non friendly way :
    We scan the list and complete packets in the reverse order.
    (youngest packets first, oldest packets last)
    This defeats priorities that sender could have cooked.
    
    Since GRO currently only store TCP packets, we dont really notice the
    bug because of retransmits, but this behavior can add unexpected
    latencies, particularly on mice flows clamped by elephant flows.
    
    This patch makes sure no packet can stay more than 1 ms in queue, and
    only in stress situations.
    
    It also complete packets in the right order to minimize latencies.
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Jesse Gross <jesse@nicira.com>
    Cc: Tom Herbert <therbert@google.com>
    Cc: Yuchung Cheng <ycheng@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    2e71a6f8
skge.c 106 KB