batman-adv: Enable LockLess TX for softif

Message ID 20180911155942.15494-1-sven@narfation.org (mailing list archive)
State Accepted, archived
Commit e3ed8ad1a7b36bc63b31df6fc9771dc63f8cac3e
Delegated to: Simon Wunderlich
Headers
Series batman-adv: Enable LockLess TX for softif |

Commit Message

Sven Eckelmann Sept. 11, 2018, 3:59 p.m. UTC
  The batadv interfaces are virtual interfaces which just tunnel the traffic
over other ethernet compatible interfaces. It doesn't need serialization
during the tx phase and is using RCU for most of its internal
datastructures. Since it doesn't have actual queues which could be locked
independently, the throughput gets significantly reduced by the extra lock
in the core net code.

8 parallel TCP connections forwarded by an IPQ4019 based hardware over
5GHz could reach:

* without LLX: 349 Mibit/s
* with LLX:    563 Mibit/s

Signed-off-by: Sven Eckelmann <sven@narfation.org>
---
 net/batman-adv/soft-interface.c | 1 +
 1 file changed, 1 insertion(+)
  

Comments

Sven Eckelmann Sept. 11, 2018, 4:07 p.m. UTC | #1
On Dienstag, 11. September 2018 17:59:42 CEST Sven Eckelmann wrote:
[...]
> * without LLX: 349 Mibit/s
> * with LLX:    563 Mibit/s

I know, it is called LLTX :(

Kind regards,
	Sven
  
Sven Eckelmann Sept. 14, 2018, 5:48 p.m. UTC | #2
On Dienstag, 11. September 2018 17:59:42 CEST Sven Eckelmann wrote:
> The batadv interfaces are virtual interfaces which just tunnel the traffic
> over other ethernet compatible interfaces. It doesn't need serialization
> during the tx phase and is using RCU for most of its internal
> datastructures. Since it doesn't have actual queues which could be locked
> independently, the throughput gets significantly reduced by the extra lock
> in the core net code.
> 
> 8 parallel TCP connections forwarded by an IPQ4019 based hardware over
> 5GHz could reach:
> 
> * without LLX: 349 Mibit/s
> * with LLX:    563 Mibit/s
> 
> Signed-off-by: Sven Eckelmann <sven@narfation.org>
> ---
>  net/batman-adv/soft-interface.c | 1 +
>  1 file changed, 1 insertion(+)

Applied as e3ed8ad1a7b3 [1]

Kind regards,
	Sven

[1] https://git.open-mesh.org/batman-adv.git/commit/e3ed8ad1a7b36bc63b31df6fc9771dc63f8cac3e
  

Patch

diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index 626ddca3..b1596c23 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -1062,6 +1062,7 @@  static void batadv_softif_init_early(struct net_device *dev)
 	dev->needs_free_netdev = true;
 	dev->priv_destructor = batadv_softif_free;
 	dev->features |= NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_NETNS_LOCAL;
+	dev->features |= NETIF_F_LLTX;
 	dev->priv_flags |= IFF_NO_QUEUE;
 
 	/* can't call min_mtu, because the needed variables