• Eric Dumazet's avatar
    net: introduce a config option to tweak MAX_SKB_FRAGS · 3948b059
    Eric Dumazet authored
    Currently, MAX_SKB_FRAGS value is 17.
    
    For standard tcp sendmsg() traffic, no big deal because tcp_sendmsg()
    attempts order-3 allocations, stuffing 32768 bytes per frag.
    
    But with zero copy, we use order-0 pages.
    
    For BIG TCP to show its full potential, we add a config option
    to be able to fit up to 45 segments per skb.
    
    This is also needed for BIG TCP rx zerocopy, as zerocopy currently
    does not support skbs with frag list.
    
    We have used MAX_SKB_FRAGS=45 value for years at Google before
    we deployed 4K MTU, with no adverse effect, other than
    a recent issue in mlx4, fixed in commit 26782aad
    ("net/mlx4: MLX4_TX_BOUNCE_BUFFER_SIZE depends on MAX_SKB_FRAGS")
    
    Back then, goal was to be able to receive full size (64KB) GRO
    packets without the frag_list overhead.
    
    Note that /proc/sys/net/core/max_skb_frags can also be used to limit
    the number of fragments TCP can use in tx packets.
    
    By default we keep the old/legacy value of 17 until we get
    more coverage for the updated values.
    
    Sizes of struct skb_shared_info on 64bit arches
    
    MAX_SKB_FRAGS | sizeof(struct skb_shared_info):
    ==============================================
             17     320
             21     320+64  = 384
             25     320+128 = 448
             29     320+192 = 512
             33     320+256 = 576
             37     320+320 = 640
             41     320+384 = 704
             45     320+448 = 768
    
    This inflation might cause problems for drivers assuming they could pack
    both the incoming packet (for MTU=1500) and skb_shared_info in half a page,
    using build_skb().
    
    v3: fix build error when CONFIG_NET=n
    v2: fix two build errors assuming MAX_SKB_FRAGS was "unsigned long"
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Reviewed-by: default avatarNikolay Aleksandrov <razor@blackwall.org>
    Reviewed-by: default avatarJason Xing <kerneljasonxing@gmail.com>
    Link: https://lore.kernel.org/r/20230323162842.1935061-1-eric.dumazet@gmail.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    3948b059
af_packet.c 113 KB