1. 08 May, 2024 4 commits
  2. 07 May, 2024 33 commits
  3. 06 May, 2024 3 commits
    • Paolo Abeni's avatar
      Merge branch 'add-tcp-fraglist-gro-support' · 8c4e4798
      Paolo Abeni authored
      Felix Fietkau says:
      
      ====================
      Add TCP fraglist GRO support
      
      When forwarding TCP after GRO, software segmentation is very expensive,
      especially when the checksum needs to be recalculated.
      One case where that's currently unavoidable is when routing packets over
      PPPoE. Performance improves significantly when using fraglist GRO
      implemented in the same way as for UDP.
      
      When NETIF_F_GRO_FRAGLIST is enabled, perform a lookup for an established
      socket in the same netns as the receiving device. While this may not
      cover all relevant use cases in multi-netns configurations, it should be
      good enough for most configurations that need this.
      
      Here's a measurement of running 2 TCP streams through a MediaTek MT7622
      device (2-core Cortex-A53), which runs NAT with flow offload enabled from
      one ethernet port to PPPoE on another ethernet port + cake qdisc set to
      1Gbps.
      
      rx-gro-list off: 630 Mbit/s, CPU 35% idle
      rx-gro-list on:  770 Mbit/s, CPU 40% idle
      
      Changes since v4:
       - add likely() to prefer the non-fraglist path in check
      
      Changes since v3:
       - optimize __tcpv4_gso_segment_csum
       - add unlikely()
       - reorder dev_net/skb_gro_network_header calls after NETIF_F_GRO_FRAGLIST
         check
       - add support for ipv6 nat
       - drop redundant pskb_may_pull check
      
      Changes since v2:
       - create tcp_gro_header_pull helper function to pull tcp header only once
       - optimize __tcpv4_gso_segment_list_csum, drop obsolete flags check
      
      Changes since v1:
       - revert bogus tcp flags overwrite on segmentation
       - fix kbuild issue with !CONFIG_IPV6
       - only perform socket lookup for the first skb in the GRO train
      
      Changes since RFC:
       - split up patches
       - handle TCP flags mutations
      ====================
      
      Link: https://lore.kernel.org/r/20240502084450.44009-1-nbd@nbd.nameSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      8c4e4798
    • Felix Fietkau's avatar
      net: add heuristic for enabling TCP fraglist GRO · c9d1d23e
      Felix Fietkau authored
      When forwarding TCP after GRO, software segmentation is very expensive,
      especially when the checksum needs to be recalculated.
      One case where that's currently unavoidable is when routing packets over
      PPPoE. Performance improves significantly when using fraglist GRO
      implemented in the same way as for UDP.
      
      When NETIF_F_GRO_FRAGLIST is enabled, perform a lookup for an established
      socket in the same netns as the receiving device. While this may not
      cover all relevant use cases in multi-netns configurations, it should be
      good enough for most configurations that need this.
      
      Here's a measurement of running 2 TCP streams through a MediaTek MT7622
      device (2-core Cortex-A53), which runs NAT with flow offload enabled from
      one ethernet port to PPPoE on another ethernet port + cake qdisc set to
      1Gbps.
      
      rx-gro-list off: 630 Mbit/s, CPU 35% idle
      rx-gro-list on:  770 Mbit/s, CPU 40% idle
      Acked-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
      Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
      Reviewed-by: default avatarWillem de Bruijn <willemb@google.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      c9d1d23e
    • Felix Fietkau's avatar
      net: create tcp_gro_header_pull helper function · 7516b27c
      Felix Fietkau authored
      Pull the code out of tcp_gro_receive in order to access the tcp header
      from tcp4/6_gro_receive.
      Acked-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
      Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
      Reviewed-by: default avatarWillem de Bruijn <willemb@google.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      7516b27c