RNDIS (USB tethering) performance issue

I have about 20 Beaglebone Blacks, each hooked up to a D-Link DWR-932 LTE modem via the USB host port. Even though their maximum ethernet transfer is close to 100mbps, their maximum LTE transfer is about 35mbps when testing these with speedtest.

I also have 5 raspberry pi 4Bs with the same DWR-932 LTE modems and the same internet provider, and their speeds are 75mbps at night and 45-50mbps during the daytime, same speedtest.

I have swapped the LTE modems between the raspberry pi 4bs and the beaglebone blacks, I have even run simultaneous bandwidth tests, and the beaglebones seem to have a pretty hard limit at 35mbps over USB LTE, in spite of their ethernet speeds approaching 100mbps.

I have run the usual performance tricks with increasing or decreasing buffer memories (sysctl net.core stuff) and I have never been able to get the beaglebones to get to a higher throughput.

Is there any optimisation I could try to get the RNDIS connection over USB2 to perform better? I don’t expect beaglebone’s processor to be a match for the raspberry pi 4b, but I’d expect the USB2 interface to use at least half the bandwidth that the eth0 uses.

You could try rebuilding the linux kernel with these changes:

disabling: CONFIG_MUSB_PIO_ONLY
enabling CONFIG_USB_TI_CPPI41_DMA

but note, CONFIG_USB_TI_CPPI41_DMA is very buggy, so it’s disabled by default.

Regards,

I’ve recompiled the kernel with the following changes:

diff --git a/patches/defconfig b/patches/defconfig
index 4e02a3a4..5094dd91 100644
--- a/patches/defconfig
+++ b/patches/defconfig
@@ -5406,7 +5406,8 @@ CONFIG_USB_MUSB_DSPS=y
 #
 # MUSB DMA mode
 #
-CONFIG_MUSB_PIO_ONLY=y
+# CONFIG_MUSB_PIO_ONLY is not set
+CONFIG_USB_TI_CPPI41_DMA=y
 CONFIG_USB_DWC3=y
 # CONFIG_USB_DWC3_HOST is not set
 # CONFIG_USB_DWC3_GADGET is not set

however, the speed limit appears to have stayed the same. As I’m writing this message. the RPi4B does 75Mbps and the BBB does 27Mbps. Is there anything else I could do to optimise the speed? Or perhaps I misunderstood the kernel flags?

Okay, i was actually expecting a small bump, as that would have moved some of the MUSB transfers from cpu cycles to direct DMA transactions. I guess even with MUSB_DMA (it’s broken for generic use cases), didn’t help…

The only thing left i would personally try, would be the bone kernel branch, as these are SMP disabled, pretty much optimized for am335x as much as we can. Debian 10.x/11.x Kernel Updates

sudo apt update ; sudo apt install bbb.io-kernel-5.15-bone

Regards,

Thank you for this suggestion!

I’m seeing speeds of 40Mbps with BBBs running 5.15.119-bone40, as opposed to 30Mbps with BBBs running 5.10.168-ti-r72, so there’s a definitive improvement. RPi4B exceeds 100Mbps at this time of the night on my tz.

Should you get any more ideas, even far away in the future, please come back to this thread, I’ll get notified! Thank you!