QoSmate: (Yet Another) Quality of Service Tool for OpenWrt

Hello everyone,

​I have a question regarding which link type and overhead I should choose for my setup.

​My ISP provides FTTH. I have it connected to a GPON in bridge (transparent) mode, and in OpenWrt I use a VLAN with PPPoE for authentication.

​Is it safe to choose Ethernet (HFSC/HTB: 40B, CAKE: 40B override), or should I use [cake] ethernet?

​Thank you very much in advance!"

44 overhead is recommended standard for FTTH/PPPoE with mpu 84 and link type ethernet operating in bridge mode with PPPoE and a VLAN tag, Even though the theoretical minimum sum is roughly 34/38bytes, 44bytes is the universally recommended standard for this.

2 Likes

Since your WAN is pppoe over a vlan on FTTH, use CAKE manual overhead: 12 bytes & MPU: 34 bytes.

Then test if things are responsive or not. If yes, then set and forget. But always test to make sure these values work better than default 44 bytes.

Here's the flowchart I followed for my pppoe connection:

1 Like

with all due respect, I would not recommend to follow that chart... the idea that L2 overhead without pppoe should be 0 seems hard to believe. And MPU 34 also seems quite small

I'm sorry about the flowchart, I totally neglected "without pppoe" section since OP has pppoe connection. I'll rectify it later. I know this should be another topic but still relevant so I'll keep it short.

The calculation I used for MPU = 46 − Overhead. In theory, Smallest possible IP packet that still fills Ethernet's minimum payload:

  • Minimum Ethernet payload = 46 bytes
  • PPPoE = 8 bytes
  • So minimum IP packet = 38 bytes

Is this correct? Also, I've couple of questions to help me understand better...

1. Does CAKE receive packets from the Linux networking stack before the network driver adds the Ethernet header & FCS?

2. Does seeing ethertype PPPoE Session (0x8864) in my packet capture actually prove that the packets are Ethernet frames carrying PPPoE or am I misinterpreting that?

3. CAKE's overhead parameter is intended to account for encapsulation beyond the network layer packet (like PPPoE, VLAN, ATM/PTM) rather than the base Ethernet header itself, with the implementation just adding the configured rate_overhead before applying the MPU floor, right?

4. Am I wrong to exclude Ethernet from CAKE's overhead & does including it mean I need to model additional wire overhead beyond the usual CAKE presets?

The reason we suggest a fairly conservative fixed number like 44 is because usually the real value is less than this, so you're always overestimating the traffic, and overestimating has a better failure mode than underestimating... but also, for most cases where the traffic is near full, it's with 1500 byte packets, and so 44 bytes is 44/1500 = 3% which is basically meaningless given the errors you have from measuring your ISP bandwidth using speed tests.

Just stick with the default unless you understand the math, and how it affects overhead calculation, and you have a specific case where you KNOW a large fraction of your bandwidth is taken up by packets much smaller than 1500 bytes (like gaming packets at say 400 bytes take up 50% of your pipe or something similar).

2 Likes

Well how this works in cake is:

len = max((s32)len + q->rate_overhead, (s32)q->rate_mpu);

That is rate_mpu needs to be configured with all overhead applied, this is not a minimum for the payload, but an absolute minimum. And MPU does not deal withL3/IP but with the fact that link layers like ethernet bring in their own minima. (64 plus 20, so 84 bytes). Any link layer that includes the ethernet FCS will inherit ethernet's 64 byte MPU if not also the additional 20 bytes (often not exactly that but something else, like GEM's 5 bytes, or XGEM's 8 bytes).

No the kernel does not keep the FCS in its SKB's and does not account for its size...

Not sure, I have not looked, but I assume it does, but typically there are easier ways to figure out whether an IsP uses PPPoE, no?

Well, cake is totally generic, you set a gross rate and a per-packet-overhead and an MPU and these need to reflect what is happening at the true bottleneck, that typically is L2, but does not need to be, e.g. for cable/docsis the standard mandates how the shaper behaves in spite of the link layer being quite different, in that case we ignore the link layer properties and model the standard shaper behaviour.

Typically one needs to model the appropriate L2 behaviour, luckily that is often ether real ethernet or so close that pretending it is ethernet is good enough. Remember we do not need to get our config values exactly, underestimating the gross rate a bit, or overestimating the per-packet-overhead and mpu a bit are harmless for bufferbloat, all it does is sacrifice a bit more potential throughput.

1 Like

thank you both @moeller0 @dlakelan for detailed explanation. Previously I tried this setup:

  • Kept wan busy with IDM 8 connections (4 connections max but I chose 8 to stress test)
  • I made a tool that uses Playwright for .NET to open a background headless Chromium browser instance to load sites parallelly (without caching) for 10 times to get metrics collection (DNS, TCP, TLS, TTFB, DOMContentLoaded, Load, LCP)
  • Finally, I took aggregated 90th Percentile and Trimmed Mean.

So, at that time I saw best result with 8 bytes & 38 mpu setup.

Now I tried shell script using curl (I'm aware "loading sites on browswer" >>>> curl) to benchmark then realized it doesn't make much difference for my 20/20mbps speed.


script I used:

#!/bin/sh

URL1="https://www.speedtest.net"
URL2="https://fiber.google.com/speedtest"
URL3="https://waveform.com/tools/bufferbloat"

RUNS=30

# overhead:mpu
PRESETS="
38:84
44:84
44:64
8:84
8:64
"

IFACES="pppoe-wan ifb-pppoe-wan"

RESULT_FILE="/tmp/cake_test_results.txt"
rm -f "$RESULT_FILE"

echo "=========================================="
echo "      CAKE Overhead / MPU Benchmark"
echo "=========================================="

preset_idx=1

for preset in $PRESETS; do

    OH="${preset%%:*}"
    MPU="${preset##*:}"

    echo
    echo "[+] Applying Preset $preset_idx: Overhead=$OH  MPU=$MPU"

    for iface in $IFACES; do
        tc qdisc change dev "$iface" root cake \
            overhead "$OH" \
            mpu "$MPU" || {
                echo "ERROR: Failed to update CAKE on $iface"
                exit 1
            }
    done

    echo "Waiting 5 seconds..."
    sleep 5

    {
        echo "=========================================="
        echo "Preset $preset_idx (Overhead=${OH}B, MPU=${MPU}B)"
        echo "=========================================="
    } >> "$RESULT_FILE"

    dns1=0; conn1=0; tls1=0; ttfb1=0; total1=0
    dns2=0; conn2=0; tls2=0; ttfb2=0; total2=0
    dns3=0; conn3=0; tls3=0; ttfb3=0; total3=0

    for i in $(seq 1 $RUNS); do

        echo "Batch $i/$RUNS"

        idx=1

        for URL in "$URL1" "$URL2" "$URL3"; do

            echo "  Testing Site $idx"

            OUT=$(curl \
                --http1.1 \
                --no-keepalive \
                --retry 1 \
                --connect-timeout 20 \
                --max-time 60 \
                -H "Cache-Control: no-cache, no-store, must-revalidate" \
                -H "Pragma: no-cache" \
                -H "Expires: 0" \
                -s \
                -o /dev/null \
                -w "%{time_namelookup} %{time_connect} %{time_appconnect} %{time_starttransfer} %{time_total}" \
                "${URL}?nocache=$(date +%s%N)")

            set -- $OUT

            DNS=$1
            CONN=$2
            TLS=$3
            TTFB=$4
            TOTAL=$5

            eval dns=\$dns$idx
            eval conn=\$conn$idx
            eval tls=\$tls$idx
            eval ttfb=\$ttfb$idx
            eval total=\$total$idx

            eval dns$idx=$(awk "BEGIN{print $dns+$DNS}")
            eval conn$idx=$(awk "BEGIN{print $conn+$CONN}")
            eval tls$idx=$(awk "BEGIN{print $tls+$TLS}")
            eval ttfb$idx=$(awk "BEGIN{print $ttfb+$TTFB}")
            eval total$idx=$(awk "BEGIN{print $total+$TOTAL}")

            printf "    Total = %.3fs\n" "$TOTAL"

            idx=$((idx + 1))
        done
    done

    idx=1
    for URL in "$URL1" "$URL2" "$URL3"; do

        eval dns=\$dns$idx
        eval conn=\$conn$idx
        eval tls=\$tls$idx
        eval ttfb=\$ttfb$idx
        eval total=\$total$idx

        DNS_AVG=$(awk "BEGIN{printf \"%.3f\",$dns/$RUNS}")
        CONN_AVG=$(awk "BEGIN{printf \"%.3f\",$conn/$RUNS}")
        TLS_AVG=$(awk "BEGIN{printf \"%.3f\",$tls/$RUNS}")
        TTFB_AVG=$(awk "BEGIN{printf \"%.3f\",$ttfb/$RUNS}")
        TOTAL_AVG=$(awk "BEGIN{printf \"%.3f\",$total/$RUNS}")

        {
            echo "URL: $URL"
            echo "  DNS      : ${DNS_AVG}s"
            echo "  CONNECT  : ${CONN_AVG}s"
            echo "  TLS      : ${TLS_AVG}s"
            echo "  TTFB     : ${TTFB_AVG}s"
            echo "  TOTAL    : ${TOTAL_AVG}s"
            echo
        } >> "$RESULT_FILE"

        idx=$((idx + 1))
    done

    preset_idx=$((preset_idx + 1))

done

echo
echo "=========================================="
echo "          AGGREGATED RESULTS"
echo "=========================================="

cat "$RESULT_FILE"

Final conclusion it didn't make huge difference what overhead I set. Ig setting to fairlsy conservative manual overhead 44 bytes and mpu to 64/84 is a smart choice

1 Like

exactly what i said

1 Like

I'm experiencing intermittent packet loss, and the solution was to restart the Qosmate service.

root@OpenWrt:~# /etc/init.d/qosmate status
==== qosmate Status ====
qosmate autostart is enabled.
qosmate global:enabled is true.
Traffic shaping (HFSC) is active on the egress interface (pppoe-wan).
Traffic shaping (HFSC) is active on the ingress interface (ifb-pppoe-wan).

==== Current Settings ====
Upload rate: 50000 kbps
Download rate: 100000 kbps
Game traffic upload: 7900 kbps
Game traffic download: 15400 kbps
Queue discipline: pfifo (for game traffic in HFSC)
Autorate: off

==== Version Information ====
Backend versions:
  Update channel: release
  Current version: 1.9.0
  Latest version: 1.9.0
Frontend versions:
  Update channel: release
  Current version: 1.9.0
  Latest version: 1.9.0

QoSmate components 'BACKEND FRONTEND' are up to date.

==== System Information ====
{
        "kernel": "6.12.94",
        "hostname": "OpenWrt",
        "system": "ARMv8 Processor rev 4",
        "model": "Xiaomi Mi Router AX3000T",
        "board_name": "xiaomi,mi-router-ax3000t",
        "rootfs_type": "squashfs",
        "release": {
                "distribution": "OpenWrt",
                "version": "25.12-SNAPSHOT",
                "firmware_url": "https://downloads.openwrt.org/",
                "revision": "r33141-9495b6e74a",
                "target": "mediatek/filogic",
                "description": "OpenWrt 25.12-SNAPSHOT r33141-9495b6e74a",
                "builddate": "1785419611"
        }
}

==== Health Check ====
status=service:enabled;nft:ok;tc:ok;config:ok;packages:ok;BACKEND_integrity:ok;FRONTEND_integrity:ok;;errors=0

==== Flow Offloading Check ====
Flow offloading is disabled (compatible with qosmate).

==== WAN Interface Information ====
        "l3_device": "pppoe-wan",
        "device": "wan.500",

==== QoSmate Configuration ====

config global 'global'
        option enabled '1'

config settings 'settings'
        option WAN 'pppoe-wan'
        option DOWNRATE '100000'
        option UPRATE '50000'
        option ROOT_QDISC 'hfsc'

config advanced 'advanced'
        option PRESERVE_CONFIG_FILES '1'
        option WASHDSCPUP '1'
        option WASHDSCPDOWN '1'
        option BWMAXRATIO '20'
        option UDP_RATE_LIMIT_ENABLED '0'
        option TCP_UPGRADE_ENABLED '1'
        option TCP_DOWNPRIO_INITIAL_ENABLED '1'
        option TCP_DOWNPRIO_SUSTAINED_ENABLED '1'
        option MSS '536'
        option NFT_HOOK 'forward'
        option NFT_PRIORITY '0'
        option MAX_CONNECTIONS '0'
        option COMMON_LINK_PRESETS 'ethernet'
        option OVERHEAD '44'
        option MPU '84'

config hfsc 'hfsc'
        option gameqdisc 'pfifo'
        option nongameqdisc 'fq_codel'
        option nongameqdiscoptions 'besteffort ack-filter'
        option MAXDEL '24'
        option PFIFOMIN '5'
        option PACKETSIZE '450'
        option netemdelayms '30'
        option netemjitterms '7'
        option netemdist 'normal'
        option pktlossp 'none'
        option netem_direction 'both'

config cake 'cake'
        option PRIORITY_QUEUE_INGRESS 'diffserv4'
        option PRIORITY_QUEUE_EGRESS 'diffserv4'
        option USE_MQ '0'
        option HOST_ISOLATION '1'
        option NAT_INGRESS '1'
        option NAT_EGRESS '1'
        option ACK_FILTER_EGRESS 'auto'
        option AUTORATE_INGRESS '0'

config custom_rules 'custom_rules'

config autorate 'autorate'
        option enabled '0'
        option interval '500'
        option latency_increase_threshold '5'
        option latency_decrease_threshold '10'
        option reflectors '1.1.1.1 8.8.8.8 9.9.9.9'
        option refractory_increase '3'
        option refractory_decrease '1'
        option adjust_up_factor '102'
        option adjust_down_factor '85'
        option flash_history '0'
        option log_changes '0'

==== Package Status ====
All required packages are installed.

==== Detailed Technical Information ====
Traffic Control (tc) Queues:
qdisc noqueue 0: dev lo root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc mq 0: dev eth0 root
 Sent 6755236484 bytes 34208113 pkt (dropped 0, overlimits 0 requeues 1098)
 backlog 0b 0p requeues 1098
qdisc fq_codel 0: dev eth0 parent :10 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :f limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :e limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :d limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :c limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :b limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :a limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :9 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :8 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :7 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :6 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :5 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :4 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 6755236484 bytes 34208113 pkt (dropped 0, overlimits 0 requeues 1098)
 backlog 0b 0p requeues 1098
  maxpacket 1518 drop_overlimit 0 new_flow_count 3444 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :3 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :2 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :1 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc noqueue 0: dev wan root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev lan2 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev lan3 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev lan4 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev br-lan root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev wan.500 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev phy0-ap0 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev phy1-ap0 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev phy1-ap0.sta2 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc hfsc 1: dev pppoe-wan root refcnt 2 default 13
 Sent 1299228429 bytes 5007137 pkt (dropped 3496, overlimits 599491 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 8042: dev pppoe-wan parent 1:13 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 1250000b ecn drop_batch 64
 Sent 519854507 bytes 1877711 pkt (dropped 921, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 49571 drop_overlimit 192 new_flow_count 199657 ecn_mark 0 drop_overmemory 192
  new_flows_len 1 old_flows_len 5
qdisc fq_codel 8044: dev pppoe-wan parent 1:15 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 1250000b ecn drop_batch 64
 Sent 319386150 bytes 1857200 pkt (dropped 7, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 53808 drop_overlimit 0 new_flow_count 2809 ecn_mark 0
  new_flows_len 0 old_flows_len 1
qdisc pfifo 10: dev pppoe-wan parent 1:11 limit 338p
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 8041: dev pppoe-wan parent 1:12 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 1250000b ecn drop_batch 64
 Sent 459987772 bytes 1272226 pkt (dropped 2568, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 39680 drop_overlimit 0 new_flow_count 234823 ecn_mark 0
  new_flows_len 1 old_flows_len 6
qdisc fq_codel 8043: dev pppoe-wan parent 1:14 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 1250000b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc ingress ffff: dev pppoe-wan parent ffff:fff1 ----------------
 Sent 23736605721 bytes 18444728 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc hfsc 1: dev ifb-pppoe-wan root refcnt 2 default 13
 Sent 24461679883 bytes 18362655 pkt (dropped 81822, overlimits 31298097 requeues 0)
 backlog 307032b 251p requeues 0
qdisc fq_codel 8046: dev ifb-pppoe-wan parent 1:13 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 2500000b ecn drop_batch 64
 Sent 14751926182 bytes 10909180 pkt (dropped 54375, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 1536 drop_overlimit 7990 new_flow_count 180550 ecn_mark 4483 drop_overmemory 7990
  new_flows_len 1 old_flows_len 1
qdisc fq_codel 8048: dev ifb-pppoe-wan parent 1:15 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 2500000b ecn drop_batch 64
 Sent 7270958216 bytes 5361806 pkt (dropped 65, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 1536 drop_overlimit 0 new_flow_count 1858 ecn_mark 0
  new_flows_len 0 old_flows_len 1
qdisc pfifo 10: dev ifb-pppoe-wan parent 1:11 limit 671p
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 8047: dev ifb-pppoe-wan parent 1:14 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 2500000b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 8045: dev ifb-pppoe-wan parent 1:12 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 2500000b ecn drop_batch 64
 Sent 2438795485 bytes 2091669 pkt (dropped 27382, overlimits 0 requeues 0)
 backlog 307032b 251p requeues 0
  maxpacket 1536 drop_overlimit 5085 new_flow_count 223351 ecn_mark 27 memory_used 1092352 drop_overmemory 5085
  new_flows_len 8 old_flows_len 1

==== Nftables Ruleset (dscptag) ====
        chain dscptag {
                type filter hook forward priority filter; policy accept;
                iif "lo" accept
                counter packets 23424119 bytes 24771973990 jump mark_cs0
                iifname "pppoe-wan" accept
                meta length < 100 tcp flags ack add @xfst4ack { ct id . ct direction limit rate over 250000/second burst 5 packets } counter packets 0 bytes 0 jump drop995
                meta length < 100 tcp flags ack add @fast4ack { ct id . ct direction limit rate over 25000/second burst 5 packets } counter packets 38028 bytes 2380395 jump drop95
                meta length < 100 tcp flags ack add @med4ack { ct id . ct direction limit rate over 2500/second burst 5 packets } counter packets 541149 bytes 32590443 jump drop50
                meta length < 100 tcp flags ack add @slow4ack { ct id . ct direction limit rate over 2500/second burst 5 packets } counter packets 270576 bytes 16297742 jump drop50
                meta l4proto tcp ct bytes < 6250000 jump mark_500ms
                meta l4proto tcp ct bytes > 125000000 jump mark_10s
                meta l4proto tcp ip dscp != cs1 add @slowtcp { ct id . ct direction limit rate 150/second burst 150 packets } ip dscp set af42 counter packets 763140 bytes 113503782
                meta l4proto tcp ip6 dscp != cs1 add @slowtcp { ct id . ct direction limit rate 150/second burst 150 packets } ip6 dscp set af42 counter packets 457162 bytes 298557763
                meta priority set ip dscp map @priomap counter packets 1995346 bytes 381078804
                meta priority set ip6 dscp map @priomap counter packets 2650931 bytes 716486173
                ct mark set ip dscp | 0x80 counter packets 1995346 bytes 381078804
                ct mark set ip6 dscp | 0x80 counter packets 2650931 bytes 716486173
                oifname "pppoe-wan" jump mark_cs0
        }
}

==== Custom Rules Table Status ====
Custom rules table (qosmate_custom) is not active or doesn't exist.

==== Inline Rules Status ====
No inline rules configured.

After restarting the Qosmate service, everything went back to normal. :confused:

root@OpenWrt:~# /etc/init.d/qosmate restart
Stopping service qosmate...
Reloading network service...
Service stopped

Creating the hotplug script.

/etc/sysupgrade.conf already lists qosmate config files.

Setting up ctinfo downstream shaping...

This script prioritizes the UDP packets from / to a set of gaming
machines into a real-time HFSC queue with guaranteed total bandwidth

Based on your settings:

Game upload guarantee = 7900 kbps
Game download guarantee = 15400 kbps

Download direction only works if you install this on a *wired* router
and there is a separate AP wired into your network, because otherwise
there are multiple parallel queues for traffic to leave your router
heading to the LAN.

Based on your link total bandwidth, the **minimum** amount of jitter
you should expect in your network is about:

UP = 0 ms

DOWN = 0 ms

In order to get lower minimum jitter you must upgrade the speed of
your link, no queuing system can help.

Please note for your display rate that:

at 30Hz, one on screen frame lasts:   33.3 ms
at 60Hz, one on screen frame lasts:   16.6 ms
at 144Hz, one on screen frame lasts:   6.9 ms

This means the typical gamer is sensitive to as little as on the order
of 5ms of jitter. To get 5ms minimum jitter you should have bandwidth
in each direction of at least:

7200 kbps

The queue system can ONLY control bandwidth and jitter in the link
between your router and the VERY FIRST device in the ISP
network. Typically you will have 5 to 10 devices between your router
and your gaming server, any of those can have variable delay and ruin
your gaming, and there is NOTHING that your router can do about it.

Applying HFSC queueing discipline.

Software Flow Offloading disabled - dynamic rules fully functional...
DONE!
--- Egress (pppoe-wan) ---
qdisc hfsc 1: root refcnt 2 default 13
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 804c: parent 1:15 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 1250000b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 804a: parent 1:13 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 1250000b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc pfifo 10: parent 1:11 limit 338p
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 8049: parent 1:12 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 1250000b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 804b: parent 1:14 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 1250000b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc ingress ffff: parent ffff:fff1 ----------------
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
--- Ingress (ifb-pppoe-wan) ---
qdisc hfsc 1: root refcnt 2 default 13
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 804e: parent 1:13 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 2500000b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc pfifo 10: parent 1:11 limit 671p
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 8050: parent 1:15 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 2500000b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 804f: parent 1:14 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 2500000b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 804d: parent 1:12 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 2500000b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
Automatically including '/usr/share/nftables.d/ruleset-post/dscptag.nft'
Service started