linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] vxlan: Add needed_headroom for lower device
@ 2020-11-26 12:52 Sven Eckelmann
  2020-11-26 12:52 ` [PATCH 2/2] vxlan: Copy needed_tailroom from lowerdev Sven Eckelmann
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Sven Eckelmann @ 2020-11-26 12:52 UTC (permalink / raw)
  To: netdev; +Cc: b.a.t.m.a.n, linux-kernel, Sven Eckelmann, Annika Wickert

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(+)

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);
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] vxlan: Copy needed_tailroom from lowerdev
  2020-11-26 12:52 [PATCH 1/2] vxlan: Add needed_headroom for lower device Sven Eckelmann
@ 2020-11-26 12:52 ` Sven Eckelmann
  2020-11-26 18:19 ` [PATCH 1/2] vxlan: Add needed_headroom for lower device Annika Wickert
  2020-12-01  2:34 ` Jakub Kicinski
  2 siblings, 0 replies; 4+ messages in thread
From: Sven Eckelmann @ 2020-11-26 12:52 UTC (permalink / raw)
  To: netdev; +Cc: b.a.t.m.a.n, linux-kernel, Sven Eckelmann

While vxlan doesn't need any extra tailroom, the lowerdev might need it. In
that case, copy it over to reduce the chance for additional (re)allocations
in the transmit path.

Signed-off-by: Sven Eckelmann <sven@narfation.org>
---
 drivers/net/vxlan.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 25b5b5a2dfea..44bb02122526 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -3801,6 +3801,8 @@ static void vxlan_config_apply(struct net_device *dev,
 		needed_headroom = lowerdev->hard_header_len;
 		needed_headroom += lowerdev->needed_headroom;
 
+		dev->needed_tailroom = lowerdev->needed_tailroom;
+
 		max_mtu = lowerdev->mtu - (use_ipv6 ? VXLAN6_HEADROOM :
 					   VXLAN_HEADROOM);
 		if (max_mtu < ETH_MIN_MTU)
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] vxlan: Add needed_headroom for lower device
  2020-11-26 12:52 [PATCH 1/2] vxlan: Add needed_headroom for lower device Sven Eckelmann
  2020-11-26 12:52 ` [PATCH 2/2] vxlan: Copy needed_tailroom from lowerdev Sven Eckelmann
@ 2020-11-26 18:19 ` Annika Wickert
  2020-12-01  2:34 ` Jakub Kicinski
  2 siblings, 0 replies; 4+ messages in thread
From: Annika Wickert @ 2020-11-26 18:19 UTC (permalink / raw)
  To: Sven Eckelmann, netdev; +Cc: b.a.t.m.a.n, linux-kernel

Tested-by: Annika Wickert <aw@awlnx.space>
 

On 26.11.20, 13:53, "Sven Eckelmann" <sven@narfation.org> 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>
    ---
     drivers/net/vxlan.c | 1 +
     1 file changed, 1 insertion(+)

    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);
    -- 
    2.29.2



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] vxlan: Add needed_headroom for lower device
  2020-11-26 12:52 [PATCH 1/2] vxlan: Add needed_headroom for lower device Sven Eckelmann
  2020-11-26 12:52 ` [PATCH 2/2] vxlan: Copy needed_tailroom from lowerdev Sven Eckelmann
  2020-11-26 18:19 ` [PATCH 1/2] vxlan: Add needed_headroom for lower device Annika Wickert
@ 2020-12-01  2:34 ` Jakub Kicinski
  2 siblings, 0 replies; 4+ messages in thread
From: Jakub Kicinski @ 2020-12-01  2:34 UTC (permalink / raw)
  To: Sven Eckelmann; +Cc: netdev, b.a.t.m.a.n, linux-kernel, Annika Wickert

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!

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-12-01  2:35 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-26 12:52 [PATCH 1/2] vxlan: Add needed_headroom for lower device Sven Eckelmann
2020-11-26 12:52 ` [PATCH 2/2] vxlan: Copy needed_tailroom from lowerdev Sven Eckelmann
2020-11-26 18:19 ` [PATCH 1/2] vxlan: Add needed_headroom for lower device Annika Wickert
2020-12-01  2:34 ` Jakub Kicinski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).