2018-07-24 20:11:00 UTC
Maybe the Bobbie idea already would do this, but I did not see it
explicitly mentioned on its wiki.
The below is all about shaping ingress, not egress.
My issue is that my ISP already does a good job with their AQM but nothing
is perfect and their implementation of rate limiting has a kind of burst at
the start. According to speedtests, my 250Mb connection starts off around
500Mb/s and slowly drops over the next few seconds until a near perfect
250Mb/s steady state.
The burst at the beginning adds a certain amount of destabilization to the
TCP flows since the window quickly grows to 500Mb and then has to backdown
by dropping. If I add my own traffic shaping and AQM, I can reduce the
reported TCP retransmissions from ~3% to ~0.1%.
The problem that I'm getting is by adding my own shaping, a measurable
amount of the benefit of their AQM is lost. While I am limited to Codel,
HFSC+Codel, or FairQ+Codel for now, I am actually doing a worse job of
anti-bufferbloat than my ISP is. Fewer latency spices according to
This also does not touch on that the act of adding back-pressure in its
nature increases latency. I cannot say if it's a fundamental requirement in
order to better my current situation, but I am curious if there's a better
way. A thought that came to me is that like Bobbie, do a light touch as the
packets have already made their way and you don't want to aggressively drop
packets, but at the same time, I want the packets that already made the
journey to mostly unhindered enter my network.
That's when I thought of a backpressure-less AQM. Instead of having
backpressure and measuring sojourn time as a function of how long it takes
packets to get scheduled, predict an estimated sojourn time based on the
observed rate of flow, but allow packets to immediately vacate the queue.
The AQM would either mark ECN or drop the packet, but never delay the
In summary, my ISP seems to have better latency with their AQM, but due to
their shaper, loss during the burst is much higher than desirable.
Maybe this will be mostly moot once I get fq_codel going on pfSense, but I
do find it an interesting issue.