Message ID | 20201126125247.1047977-1-sven@narfation.org |
---|---|
State | New |
Headers | show |
Series | [1/2] vxlan: Add needed_headroom for lower device | expand |
On Thu, 26 Nov 2020 13:52:46 +0100 Sven Eckelmann wrote: > It was observed that sending data via batadv over vxlan (on top of > wireguard) reduced the performance massively compared to raw ethernet or > batadv on raw ethernet. A check of perf data showed that the > vxlan_build_skb was calling all the time pskb_expand_head to allocate > enough headroom for: > > min_headroom = LL_RESERVED_SPACE(dst->dev) + dst->header_len > + VXLAN_HLEN + iphdr_len; > > But the vxlan_config_apply only requested needed headroom for: > > lowerdev->hard_header_len + VXLAN6_HEADROOM or VXLAN_HEADROOM > > So it completely ignored the needed_headroom of the lower device. The first > caller of net_dev_xmit could therefore never make sure that enough headroom > was allocated for the rest of the transmit path. > > Cc: Annika Wickert <annika.wickert@exaring.de> > Signed-off-by: Sven Eckelmann <sven@narfation.org> Applied both, thanks!
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 236fcc55a5fd..25b5b5a2dfea 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -3799,6 +3799,7 @@ static void vxlan_config_apply(struct net_device *dev, dev->gso_max_segs = lowerdev->gso_max_segs; needed_headroom = lowerdev->hard_header_len; + needed_headroom += lowerdev->needed_headroom; max_mtu = lowerdev->mtu - (use_ipv6 ? VXLAN6_HEADROOM : VXLAN_HEADROOM);
It was observed that sending data via batadv over vxlan (on top of wireguard) reduced the performance massively compared to raw ethernet or batadv on raw ethernet. A check of perf data showed that the vxlan_build_skb was calling all the time pskb_expand_head to allocate enough headroom for: min_headroom = LL_RESERVED_SPACE(dst->dev) + dst->header_len + VXLAN_HLEN + iphdr_len; But the vxlan_config_apply only requested needed headroom for: lowerdev->hard_header_len + VXLAN6_HEADROOM or VXLAN_HEADROOM So it completely ignored the needed_headroom of the lower device. The first caller of net_dev_xmit could therefore never make sure that enough headroom was allocated for the rest of the transmit path. Cc: Annika Wickert <annika.wickert@exaring.de> Signed-off-by: Sven Eckelmann <sven@narfation.org> --- drivers/net/vxlan.c | 1 + 1 file changed, 1 insertion(+)