I tested cake for a few days.
The RT-AC86U has a 1.8Ghz Cortex-A53 dual-core CPU and cake work without problems up to 280Mbps. Nat and queue only work at one core. Cake ran unstable from 290Mbps.
The main difference between cake and fq_codel is that cake supports per host queuing and fq_codel basically works with per flow queuing. (Of course, cake can also be operated in per flow queuing method.)
fq_codel:
fq_codel example on 100Mbps/100Mbps symmetric internet.
Suppose you do the following on one smart tv, one smart phone, and one PC.
The smart tv plays 4k netflix (25Mbps), the smart phone plays 4k@60fps (25Mbps) youtube video, the PC plays 4k@30fps youtube (20Mbps) video, and downloads large files with 4 simultaneous connections.
Then this network has a total of 7 flows, and fq_codel divides the 100Mbps bandwidth into 7 to guarantee 14.2Mbps of bandwidth.
As a result, smart tv, smart phone and PC all suffer from video playback, and file downloads occupy 56.8Mbps of bandwidth.
Asus' adaptive qos tries to solve this problem by classifying and prioritizing packets.
cake:
cake example on 100Mbps/100Mbps symmetric internet.
In the same situation, cake searches nat and recognizes smart tv, smart phone, and PC as separate hosts and divides the bandwidth into three.
Therefore, the smart tv, smart phone, and PC are guaranteed a bandwidth of 33.3Mbps each, so the smart tv and smart phone will not experience any problems with video playback.
However, PC has 33.3Mbps (+ extra 16.6Mbps) bandwidth for 5 flows, so youtube gets 10Mbps and downloads files at 40Mbps. As a result, PC cannot watch 4K@30fps youtube video smoothly.
I personally think cake works pretty well and seems very suitable for environments with many users.
But it doesn't fit my internet speed (500Mbps/500Mbps) so I use the freshjr script with a speed limit of 450Mbps.
My internet speed is fast, but when I reach maximum speed, I am experiencing bandwidth hogging and ping loss.
sched-cake-oot
https://drive.google.com/open?id=18sY2EmUxrw23ix-e0xHCWibLG6SB0YNu
tc-adv
https://drive.google.com/open?id=1cATB5RNBfwtxioP7JH89Sw-9PqX6voQ-
This is the setting I tested.
Code:
#!/bin/sh
runner disable 2>/dev/null
fc disable 2>/dev/null
fc flush 2>/dev/null
insmod /opt/lib/modules/sch_cake.ko 2>/dev/null
#WAN-eth0
/opt/sbin/tc qdisc replace dev eth0 root cake bandwidth 280Mbit besteffort nat
ip link add name ifb9eth0 type ifb
/opt/sbin/tc qdisc del dev eth0 ingress 2>/dev/null
/opt/sbin/tc qdisc add dev eth0 handle ffff: ingress
/opt/sbin/tc qdisc del dev ifb9eth0 root 2>/dev/null
/opt/sbin/tc qdisc add dev ifb9eth0 root cake bandwidth 280Mbit besteffort nat ingress wash
ifconfig ifb9eth0 up
/opt/sbin/tc filter add dev eth0 parent ffff: protocol all prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb9eth0