[5/5] batman-adv: Enable LockLess TX for softif

Message ID 20180919123238.23742-6-sw@simonwunderlich.de (mailing list archive)
State Not Applicable, archived
Delegated to: Simon Wunderlich
Headers
Series [1/5] batman-adv: Start new development cycle |

Commit Message

Simon Wunderlich Sept. 19, 2018, 12:32 p.m. UTC
  From: Sven Eckelmann <sven@narfation.org>

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 LLTX: 349 Mibit/s
* with LLTX:    563 Mibit/s

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

Comments

Dave Taht Sept. 19, 2018, 4:47 p.m. UTC | #1
What does the frame look like nowadays? Does it have an IP header?
  
Sven Eckelmann Sept. 20, 2018, 6:37 a.m. UTC | #2
[please avoid replying to a unrelated message when starting a new topic]

On Mittwoch, 19. September 2018 09:47:09 CEST Dave Taht wrote:
> What does the frame look like nowadays? Does it have an IP header?

Depends on what you are talking about. batman-adv is still raw ethernet. The 
encapsulated traffic ("tunnelled traffic) is

1. ethernet header
2. batman-adv header
3. encapsulated ethernet header
4. the rest (IP, ...)

I have attached some small examples which you can open with wireshark. I think 
the v15 support was added in 2014 - so you should be able to dissect these 
packets with the wireshark version from a recent Linux distribution.

And the (stagnating) batmand uses IPv4 for the announcements. And it only 
modifies IPv4 routing tables. For IPv4+IPv6 support, you have to check out 
bmx.

Kind regards,
	Sven
  
A. James Lewis Sept. 21, 2018, 4:51 p.m. UTC | #3
Hi all,

I'd like to package an application for RHEL7 which uses BATMAN, but it seems that the module is not distributed by Redhat with their kernel.

Am I going to be stuck with releasing a new package with an updated batman-adv kernel module for every minor update of the OS, or is there a simpler way?... 

Any advice/suggestions would be appreciated.

--
A. James Lewis (james@fsck.co.uk)
"Engineering does not require science. Science helps a lot but people
built perfectly good brick walls long before they knew why cement works."
  

Patch

diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index e121c59fc1fa..2c7d95727f90 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -1050,6 +1050,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