Hi, one of the contributors to cake here. I’m pleased y’all are finally shipping it, but I have a few comments:
-
A modern version of cake has support for the new diffserv LE codepoint. I’d dearly like support for that in mikrotik given how problematic CS1 proved to be, and it’s a teeny patch.
-
One feature of cake is that it runs the same whether at line rate, or with the shaper enabled, so you can get per-host/per flow fq, diffserv classification, etc. I’m very interested in learning of results when you try to run it or fq_codel at line rate, rather than shaped. fq_codel is the default on all interfaces, rather than pfifo_fast, in most linuxes today. I would really like it
if people put it through a battery of flent rrul tests or heavy iperf, and took captures, and plotted rtts, particularly on the higher end mikrotik hw. It is most useful with working BQL in the device driver. -
https://help.mikrotik.com/docs/display/ROS/Queues is missing support for the gso-splitting option. When using the shaper component, below 1gbit, gro "super"packets are automatically split up back into packets (and then interleaved with other flows), when unshaped, or above 1gbit, they are not. If you’ve got the cpu, split up superpackets.
-
If you are natting at the router, try the nat option. This does not work with some forms of offloaded nat.
-
If you have major bandwidth asymmetry on a link (greater than 10x1), try the ack-filter option on the slower part of the link. It gets to be a hugely necessary idea at ratios higher than that, see: https://blog.cerowrt.org/post/ack_filtering/
-
It would be nice if mikrotik had some way of polling and displaying statistics from fq_codel for backlog, reschedules, drops, and marks, and from cake for the same. Exposing these statistics to more users would drive understanding of the role of packet loss (and marking) in controlling network delay. tc supports json output, multiple tools can parse that. See the enthusiasm for collecting stats over in the starlink community… I would love to see at the very least, drop stats out of the mikrotik userbase.
-
When shaping dsl especially, it’s very important to get the link type “framing” right, but also useful on cablemodems to set the docsis parameter. You can get hard up against the actual configured cablemodem rate in particular in this way instead of wasting 5-15%, and in the dsl case it is impossible to get a consistent shaped rate unless you set it right, or at least, conservatively. I mean that. Impossible to get some forms of dsl right unless you compensate.
-
If you aren’t going to use diffserv, use cake besteffort, to save on memory and cpu. To save on cpu further, don’t use the ack-filter or nat options.
-
There are a bunch of per host/per flow fq options that are dependent on your use cases for regulating traffic between ip addresses or ports.
-
Use wash on ingress when you don’t trust the diffserv markings from upstream. This a pretty heavy hammer, and it is preferred that y’all communicate with your customers about how you treat diffserv and let them optimize their own traffic, only remarking from 0 (best effort) to something else if you need to. There is a published guide to zoom traffic, among others. Wash on egress if you aren’t following the relevant RFCs.
-
Cake tries really hard to follow a bunch of mutually conflcting diffserv RFCs, and in an age where videoconferencing is very important the cake diffserv4 model is closer to how a wifi AP treats it. see: https://www.w3.org/TR/webrtc-priority/ for this underused facility in webrtc.
-
Despite saying all this about diffserv it generally ranks dead last as an optimization technique verses better statistical multiplexing from FQ, and the short queues you get from an AQM.
I should stress that these are options and are optional, aside from getting shaped dsl compensation right, the cake defaults are pretty good.
Other notes:
-
Telling your customers how they can have better wifi at home is useful also! In most cases the bufferbloat starts to shift to the home wifi at above 40mbit, and no matter all the contortions you’ve done here to manage your bandwidth to/from them better, everybody benefits from better home routers with sqm on the link and fq_codel on the wifi: https://blog.linuxplumbersconf.org/2016/ocw/system/presentations/3963/original/linuxplumbers_wifi_latency-3Nov.pdf
-
The cake mailing list is the best place to ask questions or make feature requests: https://lists.bufferbloat.net/listinfo/cake - see also the archives there or on the related “Bloat” mailing list. Cake is the most advanced smart queue management (SQM) system, we’ve been able to design, as yet: https://www.bufferbloat.net/projects/cerowrt/wiki/Smart_Queue_Management/ and whilst we initially targeted it at cpe and home gateways it is certainly proving useful in the middle of an ISP’s network. We are very interested in feedback as to how to make it, or something like it, better for ISPs. One example (that I have NO idea how to make work on mikrotik) is here: https://github.com/rchac/LibreQoS
-
There are multiple academic papers on how fq_codel and cake actually work, the best summary of most of the things we did to beat bufferbloat in linux is in the online book; https://bufferbloat-and-beyond.net/ - but feel free to hit google scholar for “bufferbloat”, and the cobalt AQM.
-
I’m really big on explaining the why (in addition to the how, above), at various levels, including entertaining ones like this:
https://blog.apnic.net/2020/01/22/bufferbloat-may-be-solved-but-its-not-over-yet/


