Cake-Autorate-Reborn: A lightweight C rewrite with LuCI UI integration v1.0.1

Hi everyone,

!!! REBRAND TO DARKMOON !!!

I’ve been working on a project to slim down the footprint of the excellent cake-autorate tool, and I think it’s ready for some outside eyes.

First, a huge shout-out to @Lynx for the original concept and the "autorate" algorithm. It’s been a lifesaver for anyone dealing with the "jittery" bandwidth of 5G, LTE, or Starlink.

The original works great, but I wanted to see if I could make it even leaner for routers that are a bit tight on CPU or RAM. I’ve spent the last few weeks rewriting the core logic from scratch in C.

What’s different in this version:

  • No more fping dependency: I wrote an integrated pinger using raw sockets. It’s more precise and uses fewer resources.
  • Netlink instead of tc commands: The daemon now talks directly to the kernel to change rates. No more constant process-spawning (fork/exec) every time the bandwidth shifts.
  • Lean & Mean: It’s designed to be a "set and forget" background service with a very flat CPU profile.

I need your help! Since I only have one device to test this on, I’m looking for some brave souls to give it a spin on different hardware and connection types. If you’ve been using the original script and want to see if the C version feels snappier or helps your CPU load, I’d love your feedback.

Changes at a glance:

  • Dropped fping and bash dependencies.
  • Rewritten pinger for higher precision.
  • Optimized sysfs and Netlink interactions to save CPU cycles.

Current version: v1.0.0-Darkmoon
**Github:**https://github.com/kamikaonashi/openwrt-package-cake-autorate-reborn/releases/tag/v1.0.0-Darkmoon

If you decide to try it out, please let me know your router model and how it handles your connection!

Cheers!

Some screenshots of the UI

13 Likes

updated the link for more architectures and compiled for ipk and apk format
any test and feedback is appreciated :slight_smile:

updated link for v1.0.1

3 Likes

I've always thought it would be nice to have an implementation of cake-autorate in C.

I have a couple of questions.

Firstly, how much of the original cake-autorate logic have you reproduced in terms of the overall logic concerning shape rate adjustments and reflector rotation, etc.?

Secondly, am I right in thinking that at the moment you have implemented regular ICMP pings rather than ICMP type 13 pings for true OWDs in each direction? I switched over to the latter some time ago for my own connection. I first pull in one of the big reflector lists from: https://github.com/tievolu/timestamp-reflectors then randomize, then work on those using the reflector rotation logic.

Most of the important cake-autorate logic is already ported. The parts that decide when to turn the shaper up/down and by how much are implemented (delay/bufferbloat detection, load detection, the smoothing/EWMA stuff, and the up/down adjustment rules). Reflector handling is also there: I keep multiple reflectors active and I rotate/replace them when they start behaving badly, similar to the script’s health/rotation idea.

Yeah, right now it’s just normal ICMP echo ping, and I approximate one-way delay as “RTT / 2”. So it’s not true per-direction OWD yet. But I will take your feedback and will implement ICMP type 13 soon :slight_smile:

Really appreciate your work and feedback. I'm kinda a noob and new to Openwrt, since i mostly developed android roms before

1 Like

Looking forward to trying this out on my 4G connection soon, if not this weekend.

Cake-autorate (along with adblock-lean) has provided a massive improvement for my 4g connection. A more efficient C version is exciting news! I will try the v1 release over the weekend on a spare Archer c59v2 running 24.10.5. Should be a close-to-worst-case performance test for cpu/ram. :slight_smile:

1 Like

appreciate any feedback if you are able to test it :slight_smile: I use it for my 5G NSA connection and its stabilizing it pretty good.

I just pushed an update v1.0.1 where i removed floating point math for lower end devices. hope it works outs fine :slight_smile:

2 Likes

I'm quite inexperienced when it comes to OpenWRT after taking the jump from Stock 'Forked' OpenWRT but I've added this for my 5G NSA connection.

Error below I've rebooted the router also; any suggestions?

"RPC error: RPC call to luci/setInitAction failed with error -32002: Access denied at handleCallReply (http://192.168.8.1/luci-static/resources/rpc.js?v=26.043.84860~6cf8bf9-1772222829:11:3)"

This is so cool! Thank you, and welcome to the forum kamikaonashi!

1 Like

Try this via ssh
Sadly I am not home till monday, so I cant fix it right now :frowning:

cat > /usr/share/rpcd/acl.d/luci-app-cake-autorate-reborn.json << 'EOF'
{
    "luci-app-cake-autorate-reborn": {
        "description": "Grant access for luci-app-cake-autorate-reborn",
        "read": {
            "uci": [ "cake_autorate_reborn" ],
            "ubus": {
                "service": [ "list" ],
                "luci": [ "getInitList", "getInitStatus", "setInitAction" ]
            }
        },
        "write": {
            "uci": [ "cake_autorate_reborn" ],
            "ubus": {
                "luci": [ "setInitAction" ]
            }
        }
    }
}
EOF
/etc/init.d/rpcd restart
2 Likes

Seems to have done the trick, great work! :grin:

1 Like

How is it, any improvement over the scripts on cpu side? That would interest me :slight_smile:

So I've got it running on my RT3200 with the LuCI fix you reported above.

But the bandwidth adjustments are very slow.

Any logging options so we can see what's going on?

I don't have any comparisons evidential anyway; but from what I've noticed I've gained about 20mib due to switching to this.

I'm happily willing to share information if you have the commands; but me being a novice the above is what I've immediately noticed. :clap:t2:

Are you seeing regular bandwidth adjustment?

As above I'm quite new to this; but Luci App doesn't seem to show anything happening afaik anyway but this below shows something is happening. :grimacing:

Summary

root@OpenWrt:~# tc -s qdisc show dev ifb-wwan0
qdisc cake 8002: root refcnt 2 bandwidth 598336Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
Sent 1180346364 bytes 968421 pkt (dropped 8, overlimits 512506 requeues 0)
backlog 0b 0p requeues 0
memory used: 350Kb of 13940Kb
capacity estimate: 166400Kbit
min/max network layer size: 29 / 1378
min/max overhead-adjusted size: 29 / 1378
average network hdr offset: 0
Bulk Best Effort Voice
thresh 37396Kbit 598336Kbit 149584Kbit
target 5ms 5ms 5ms
interval 100ms 100ms 100ms
pk_delay 10us 34us 49us
av_delay 1us 4us 2us
sp_delay 1us 2us 2us
backlog 0b 0b 0b
pkts 40 968277 112
bytes 1829 1180332183 23212
way_inds 0 55 0
way_miss 33 2517 69
way_cols 0 0 0
drops 0 8 0
marks 0 0 0
ack_drop 0 0 0
sp_flows 1 2 1
bk_flows 0 1 0
un_flows 0 0 0
max_len 60 1378 576
quantum 1141 1514 1514

Do throw some ssh commands my way and I'll do what I can. :grin:

while true; do clear; tc qdisc ls | grep cake; sleep 1; done

Now run speed test - do you see rates change much? Ctrl-C to stop.

My rates change about every 30 seconds or so.

2 Likes

Started the command, loaded up Speed test then ran it below I'm currently on WiFi and another device is currently watching YouTube

SpeedTest

root@OpenWrt:~# while true; do tc qdisc ls | grep cake; sleep 1; done
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 183264Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 189840Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 181424Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 187936Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 179608Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 186056Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 177808Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 184192Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 184920Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 191552Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 184712Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 183984Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 184712Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 182144Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 174280Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 173592Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 172536Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 180528Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 170808Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 176928Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 169096Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 175152Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 172352Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 178528Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 170624Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 176736Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 199592Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 198792Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 224496Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 223600Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 233472Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 232544Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 262616Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 261568Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 280Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 294216Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 280Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 318216Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 280Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 340736Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 280Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 383264Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 280Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 414528Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 280Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 431104Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 277200Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 426792Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 280Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 422520Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 242032Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 410816Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 181416Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 307944Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 177800Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 301808Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 184584Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 313328Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 171184Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 290592Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 140736Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 238912Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 161448Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 274088Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 188864Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 320632Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 229768Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 390080Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 258440Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 438776Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 280Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 533808Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 280Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 600448Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 280Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 640Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 280Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 640Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 280Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 640Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 280Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 640Mbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 274424Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 627264Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 271672Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 620984Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 243208Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 555944Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 252936Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 555944Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8001: dev wwan0 root refcnt 2 bandwidth 251056Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc cake 8002: dev ifb-wwan0 root refcnt 2 bandwidth 551824Kbit diffserv3 triple-isolate nonat nowash no-ack-filter split-gso rtt 100ms raw overhead 0
^C

My initial experience on a TP-Link Archer C59v2 is promising. For this test, I’m leveraging a 5ghz WWAN connection from this router to an LTE hotspot device. My config is here (only what I changed from defaults):

config cake_autorate_reborn 'primary'

option enabled '1'
option dl_if 'ifb4phy0-sta0'
option ul_if 'phy0-sta0'
option min_dl_shaper_rate_kbps '8000'
option base_dl_shaper_rate_kbps '24000'
option max_dl_shaper_rate_kbps '60000'
option min_ul_shaper_rate_kbps '1500'
option base_ul_shaper_rate_kbps '3000'
option max_ul_shaper_rate_kbps '8000'
option connection_active_thr_kbps '1000'

Under a speed test load, I’m initially seeing about 80% cpu usage on htop at around 32mbps, which decreases into the 50% range as cake autorate reborn throttles my connection. With the default 20hz 6 pingers and .3 ping interval, this represents a significantly lower cpu usage over cake_autorate, which is in the 200-300% cpu usage range in similar conditions/settings on this single core router. I typically run 10hz or 5hz settings.

I am seeing rate changes about once per second when running

while true; do clear; tc qdisc ls | grep cake; sleep 1; done

Outside of periodic speed tests, I’m not sure how else to verify that cake_autorate_reborn is managing the connection as effectively as expected. I will run it for an extended period of time and see how the network feels when using it. Happy to perform any other tests as requested. Enjoying your work so far!

1 Like