Messages in this thread | | | Date | Mon, 30 Jan 2023 14:00:55 +0100 | From | Richard Gobert <> | Subject | [PATCH 0/2] gro: optimise redundant parsing of packets |
| |
Currently, the IPv6 extension headers are parsed twice: first in ipv6_gro_receive, and then again in ipv6_gro_complete.
The field NAPI_GRO_CB(skb)->proto is used by GRO to hold the layer 4 protocol type that comes after the IPv6 layer. I noticed that it is set in ipv6_gro_receive, but isn't used anywhere. By using this field, and also storing the size of the network header, we can avoid parsing extension headers a second time in ipv6_gro_complete.
The first commit frees up space in the GRO CB. The second commit reduces the redundant parsing during the complete phase, using the freed CB space.
I've applied this optimisation to all base protocols (IPv6, IPv4, Ethernet). Then, I benchmarked this patch on my machine, using ftrace to measure ipv6_gro_complete's performance, and there was an improvement.
Richard Gobert (2): gro: decrease size of CB gro: optimise redundant parsing of packets
include/net/gro.h | 32 +++++++++++++++++++++----------- net/core/gro.c | 18 +++++++++++------- net/ethernet/eth.c | 11 +++++++++-- net/ipv4/af_inet.c | 8 +++++++- net/ipv6/ip6_offload.c | 15 ++++++++++++--- 5 files changed, 60 insertions(+), 24 deletions(-)
-- 2.36.1
| |