Much of the time the data that flows over your home network is “mice”. Little bits of data from emails or web pages, slack or zoom. Sometimes, though, it’s an elephant: one big file like a PDF or a video. When that happens, the mice sit and wait.
For a real mouse, that’s a good thing. For a mouse-sized flow in the middle of a zoom conversation, it’s a block of silence in the middle of a word, or a whole chunk of speech going missing. For a video, it’s jitter and lag. None of those are desirable.
The problem is that the python can eat the whole elephant. When it does, though, it’s going to be a while until it’s ready for the mouse. If you could teach the python to take a bite of elephant, then one of mouse, things would flow better.
The first step is to not let it eat the whole thing. In a network, this is called bufferbloat: the router can take more data than it can digest in a single huge bite, stick it in a buffer and concentrate on digesting (transmitting) it. When it gets done, it goes back to mouse-sized flows.
For modern Linux workstations and linux-based routers, stopping this a solved problem. The fq-codel and newer CAKE queuing disciplines control how much the router can bite off, and ensure that each flow gets a fair share of the router’s attention.
Delivering the Fix
This is where thing get hard. Home-router vendors are famously cheap, and use whatever old Linux version was current when they did their first one. That’s often Linux 2.6, which is end-of-life: my laptop’s on 5.8. They certainly don’t have fq-codel, or even fixes for old bugs.
In subsequent postings I’ll discuss testing your existing router, finding a good replacement and demonstrating to Grandma that she should buy the same as you, and review the good routers, but that’s for later.
For today, I’ll plug just one of the good ones, https://evenroute.com/iqrouter, that was developed by a chap who is following the bufferbloat saga and decided to fix home routers.
I bought on Amazon. I’ve been using it for six months, and it’s even better than my Linksys running OpenWRT, that I adopted early in the battle against bufferbloat.
If you’re interested in the back-story, have a look at https://www.bufferbloat.net/projects/bloat/wiki/What_can_I_do_about_Bufferbloat/