Multi-Path Backhaul with Speedify – Part 2

Let’s continue where I left off in the previous post on the Speedify Internet backhaul bonding and redundancy software I installed on a Raspberry Pi, and have a closer look how throughput looks like in practice.

All of my 3 backhaul links support downlink speeds of 100 Mbps (VDSL) or more (LTE/5G), and 30 Mbps (VDSL) or more (LTE/5G) in the uplink direction. As the word ‘Speedify’ implies an additive channel bonding, I expected this to happen in both directions.

Downlink Bonding

Speedify with 3 bonded network interfaces, throughput visualized with nload

As shown in the screenshot above, I could achieve peaks of around 120 Mbps in the downlink direction, with most of the traffic always being transported over the VDSL part of the bonded network interface. It seems Speedify notices that the two other links are cellular networks and doesn’t use them to their full potential, even though I set all network interfaces in the bond as ‘priority’ links. Also, throughput was quite variable and would often drop down to 10 to 20 Mbps for a few seconds before recovering. If I use the VDSL link directly without Speedify, there are no such drops. So perhaps the drops are part of Speedify’s algorithm to determine changing backhaul conditions? Also, I noticed that at a speed of 120 Mbps going through the network bond, the Raspi 4 is at around 80% CPU load on one core. So even if Speedify wanted to use the full potential of all my 3 backhaul links, the CPU would probably be the limiting factor.

Uplink Bonding

In the uplink, Speedify mostly used the full capacity of 2 of my 3 backhaul links, in effect combining 2x 30 Mbps to a total of 60 Mbps during my iperf3 uplink throughput tests. Here, additive bonding really works and I get a significantly higher speed when uploading large amounts of data.

Redundancy

So while I was not particularly impressed by the downlink throughput bonding, I was very much impressed with the quick failure response. When interrupting the Ethernet link to the VDSL backhaul during an iperf3 throughput test, Speedify reacted within a second and increased the throughput on the two other LTE/5G based backhaul links (one over Ethernet, the other over Wi-Fi to a smartphone). It still didn’t use the full potential of those links, but I still got around 50 Mbps in the downlink connection. But most importantly: TCP connections survive! When reconnecting the Ethernet cable to the VDSL link, Speedify recognizes this, includes the link in the bond again, and speeds increase again.

What’s Used for Bonding?

On their web page, the makers of Speedify say that they use a proprietary bonding technology. With a tcpdump trace on one of the bonding interfaces I could see that Speedify establishes a TCP connection and then tunnels all traffic through it. I didn’t dig any deeper, but this at least gave me a first impression on what they use on layer 4.

Summary

As my VDSL line is mostly stable and reasonably fast, I don’t see a use case for Speedify at home apart from adding an instant and seamless failover to another backhaul link in case the VDSL line drops. But fortunately, this happens seldomly. That said, I will definitely take that Pi with me on the next trip to the edge of the observable Internet to see if bundling slow and unreliable backhaul links there will improve the situation.