• Eric Dumazet's avatar
    net: gro: allow to build full sized skb · 8a29111c
    Eric Dumazet authored
    skb_gro_receive() is currently limited to 16 or 17 MSS per GRO skb,
    typically 24616 bytes, because it fills up to MAX_SKB_FRAGS frags.
    
    It's relatively easy to extend the skb using frag_list to allow
    more frags to be appended into the last sk_buff.
    
    This still builds very efficient skbs, and allows reaching 45 MSS per
    skb.
    
    (45 MSS GRO packet uses one skb plus a frag_list containing 2 additional
    sk_buff)
    
    High speed TCP flows benefit from this extension by lowering TCP stack
    cpu usage (less packets stored in receive queue, less ACK packets
    processed)
    
    Forwarding setups could be hurt, as such skbs will need to be
    linearized, although its not a new problem, as GRO could already
    provide skbs with a frag_list.
    
    We could make the 65536 bytes threshold a tunable to mitigate this.
    
    (First time we need to linearize skb in skb_needs_linearize(), we could
    lower the tunable to ~16*1460 so that following skb_gro_receive() calls
    build smaller skbs)
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    8a29111c
skbuff.c 88.2 KB