Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
linux_router:tc [2026-05-13 Wed wk20 21:38] – [Download Shaping with IFB] baumkplinux_router:tc [2026-05-18 Mon wk21 02:34] (current) – [Links] baumkp
Line 23: Line 23:
 Test your connection at the [[https://www.waveform.com/tools/bufferbloat|Waveform Bufferbloat Test]] before doing anything. If you get a grade of C or worse, you have bufferbloat. Test your connection at the [[https://www.waveform.com/tools/bufferbloat|Waveform Bufferbloat Test]] before doing anything. If you get a grade of C or worse, you have bufferbloat.
  
-CAKE (Common Applications Kept Enhanced) is the modern Linux qdisc that fixes this. It combines Active Queue Management (AQM), Fair Queuing (FQ), and traffic shaping into a single qdisc. CAKE has been in the mainline kernel since 4.19, so no extra kernel modules are required on any modern distro. It replaced the older approach of combining fq_codel with htb shaping - CAKE does everything in one shot with less configuration.+[[https://www.man7.org/linux/man-pages/man8/tc-cake.8.html|CAKE]] (Common Applications Kept Enhanced) is the modern Linux qdisc that fixes this. It combines Active Queue Management (AQM), Fair Queuing (FQ), and traffic shaping into a single qdisc. CAKE has been in the mainline kernel since 4.19, so no extra kernel modules are required on any modern distro. It replaced the older approach of combining fq_codel with htb shaping - CAKE does everything in one shot with less configuration.
  
 ====Upload Shaping==== ====Upload Shaping====
 Apply CAKE to your WAN interface with your upload bandwidth set to 90-95% of measured speed: Apply CAKE to your WAN interface with your upload bandwidth set to 90-95% of measured speed:
- +  *''%%tc qdisc replace dev wan0 root cake bandwidth 450mbit besteffort wash nat ack-filter-aggressive%%''
-''tc qdisc replace dev wan0 root cake bandwidth 450mbit besteffort wash nat ack-filter-aggressive''+
  
 Key options: Key options:
Line 39: Line 38:
  
 CAKE can only shape outgoing (egress) traffic. To shape incoming (ingress) traffic - which is where download bufferbloat lives - you redirect incoming packets through an Intermediate Functional Block (IFB) device and apply CAKE there: CAKE can only shape outgoing (egress) traffic. To shape incoming (ingress) traffic - which is where download bufferbloat lives - you redirect incoming packets through an Intermediate Functional Block (IFB) device and apply CAKE there:
-<code bash> +++++bash script for ingress traffic| 
-# Create and bring up IFB device+<code bash># Create and bring up IFB device
 ip link add ifb-wan0 type ifb ip link add ifb-wan0 type ifb
 ip link set ifb-wan0 up ip link set ifb-wan0 up
Line 53: Line 52:
  
 Set the IFB bandwidth to 90-95% of your measured download speed. Set the IFB bandwidth to 90-95% of your measured download speed.
 +++++
 ====Persist Across Reboots==== ====Persist Across Reboots====
 These tc commands do not survive a reboot on their own. Create a systemd service: These tc commands do not survive a reboot on their own. Create a systemd service:
 +++++sudo vim /etc/systemd/system/sqm.service|
 <code bash># /etc/systemd/system/sqm.service <code bash># /etc/systemd/system/sqm.service
 [Unit] [Unit]
Line 84: Line 84:
 WantedBy=multi-user.target</code> WantedBy=multi-user.target</code>
  
-Enable it: +Enable it: ''%%sudo systemctl enable --now sqm.service%%'' 
-''%%systemctl enable --now sqm.service%%''+++++
  
-Verify It Works+====Verify It Works====
  
-After applying CAKE, rerun the Waveform Bufferbloat Test . You should see latency under load drop from 200-500ms down to 5-15ms. Video calls stop freezing mid-sentence and game ping stays flat even during large transfers.+After applying CAKE, rerun the [[https://www.waveform.com/tools/bufferbloat|Waveform Bufferbloat Test]]. You should see latency under load drop from 200-500ms down to 5-15ms. Video calls stop freezing mid-sentence and game ping stays flat even during large transfers.
  
 ====Monitor CAKE statistics==== ====Monitor CAKE statistics====
Line 100: Line 100:
     *[[https://botmonster.com/posts/build-linux-router-nftables-traffic-shaping/|Debian Router with nftables: CAKE SQM Reaches 15ms Latency]]     *[[https://botmonster.com/posts/build-linux-router-nftables-traffic-shaping/|Debian Router with nftables: CAKE SQM Reaches 15ms Latency]]
     *[[https://www.bufferbloat.net/projects/codel/wiki/Cake/|Cake - Common Applications Kept Enhanced]]     *[[https://www.bufferbloat.net/projects/codel/wiki/Cake/|Cake - Common Applications Kept Enhanced]]
 +    *[[https://www.man7.org/linux/man-pages/man8/tc-cake.8.html|tc-cake]]
   *tc-fq_codel   *tc-fq_codel
     *[[https://www.man7.org/linux/man-pages/man8/tc-fq_codel.8.html|tc-fq_codel(8) — Linux manual page]]     *[[https://www.man7.org/linux/man-pages/man8/tc-fq_codel.8.html|tc-fq_codel(8) — Linux manual page]]