Cudy WR3000 performance issues

Hi all, some time ago I bought Cudy WR1000, however I am not satisfied with receiving bandwidth on it.

Let's start from beginning, I have 500/50Mbps Internet connectivity from my ISP (pppoe), but I am able to reach ~350/50Mbps using WR3000 (5Ghz radio, 160Mhz, C:36) and AX201 laptop card (connected at 2402/2402Mbps), while it takes 500/50Mbps on LAN ports. As a part of testing I decided to take a look on possible transfers using WLAN interface, therefore used iperf hosted on WR3000 (and AX201 client, 2m away from router), the results are as below:

Connecting to host 192.168.0.1, port 5201
[  4] local 192.168.0.125 port 55396 connected to 192.168.0.1 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  84.0 MBytes   703 Mbits/sec
[  4]   1.00-2.00   sec  82.8 MBytes   696 Mbits/sec
[  4]   2.00-3.00   sec  78.6 MBytes   659 Mbits/sec
[  4]   3.00-4.00   sec  82.1 MBytes   689 Mbits/sec
[  4]   4.00-5.00   sec  76.4 MBytes   641 Mbits/sec
[  4]   5.00-6.00   sec  80.8 MBytes   678 Mbits/sec
[  4]   6.00-7.00   sec  85.4 MBytes   717 Mbits/sec
[  4]   7.00-8.00   sec  78.6 MBytes   659 Mbits/sec
[  4]   8.00-9.00   sec  77.1 MBytes   647 Mbits/sec
[  4]   9.00-10.00  sec  77.2 MBytes   649 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec   803 MBytes   674 Mbits/sec                  sender
[  4]   0.00-10.00  sec   803 MBytes   674 Mbits/sec                  receiver

From what I found in internet, those transfers are a little bit low as more often they are closer to 1Gbps than 500Mbps (as in my case). What is more IMHO the CPU load is quite high during iperf tests because it reaches ~40%, despite changes I set (see below). Above transfers are very similar for stock and openwrt firmware. From things that I've changed on openwrt setup:

/etc/config/firewall

config defaults
        option syn_flood '1'
        option input 'REJECT'
        option output 'ACCEPT'
        option forward 'REJECT'
        option flow_offloading '1'
        option flow_offloading_hw '1'

config zone
        option name 'wan'
        list device 'pppoe-wan'
        option input 'REJECT'
        option output 'ACCEPT'
        option forward 'REJECT'
        option masq '1'
        option mtu_fix '1'

/etc/modules.conf

options mt7915e wed_enable=Y

Any ideas why WAN speeds are so low, and if this is not somehow connected with iperf results? I am open to share logs, configs if any of them are need.

Thanks in advance.

Please post output of
ubus call system board

Hi @brada4,

here is the output:

        "kernel": "5.15.155",
        "hostname": "OpenWrt",
        "system": "ARMv8 Processor rev 4",
        "model": "Cudy WR3000 v1",
        "board_name": "cudy,wr3000-v1",
        "rootfs_type": "squashfs",
        "release": {
                "distribution": "OpenWrt",
                "version": "23.05-SNAPSHOT",
                "revision": "r23861-447eef2063",
                "target": "mediatek/filogic",
                "description": "OpenWrt 23.05-SNAPSHOT r23861-447eef2063"
        }

Yesterday I directed my investigation into differences between mine and others setup, and the difference is ISP of course. Therefore I started thinking in direction of MTU values on interfaces, however it seems that I had the standard setup, so 1492 on pppoe and 1500 on other interfaces :expressionless: So don't see a space to modify them.

Thanks for any suggestions

Please install release 23.05.3 and follow up here:

Likely no need for hardware offload at all, problem is caused by !=1500MTU and therefore oversized packets kicking offload out at pppoe interface.

  1. OpenWrt 23.0.5 installed
  2. mssfix.nft created:
nft list ruleset | head -20
table inet fw4 {
        flowtable ft {
                hook ingress priority filter
                devices = { lan1, lan2, lan3, phy0-ap0, phy1-ap0 }
                flags offload
                counter
        }

        chain mangle_postrouting {
                type filter hook postrouting priority mangle; policy accept;
                oif "pppoe-wan" tcp flags syn / fin,syn,rst tcp option maxseg size set rt mtu
        }

        chain input {
                type filter hook input priority filter; policy drop;
                iifname "lo" accept comment "!fw4: Accept traffic from loopback"
                ct state established,related accept comment "!fw4: Allow inbound established and related flows"
                tcp flags syn / fin,syn,rst,ack jump syn_flood comment "!fw4: Rate limit TCP syn packets"
                iifname "br-lan" jump input_lan comment "!fw4: Handle lan IPv4/IPv6 input traffic"
                iifname "pppoe-wan" jump input_wan comment "!fw4: Handle wan IPv4/IPv6 input traffic"
  1. Just in case I also applied the patch on fw4.uc

Unfortunately not seeing improvement on WAN speeds

flags offload

Fix is only for software offload. Primitive slow old devices.

Hardware offload list has nothing in wan side, rendering it useless.

1 Like

Sorry @brada4 I thought you meant to apply fix from post you referenced to. Are you seeing something I can focus on now?

Disable hardware offload, it does not work. Enable only software offload.

2402/2402Mbps thats a lie, your router supports 866 in one band and 144 in other. amazon fraXd seller

It was disabled, only sw offload is enabled:

root@OpenWrt:~# uci show | grep 'offloading'
firewall.@defaults[0].flow_offloading='1'

This is hardware offload.

1 Like

Ohh yes, sorry for confusion. I've disabled it after sent the log from "nft list ruleset", it is not there now:

table inet fw4 {
        flowtable ft {
                hook ingress priority filter
                devices = { br-lan }
                counter
        }

        chain mangle_postrouting {
                type filter hook postrouting priority mangle; policy accept;
                oif "pppoe-wan" tcp flags syn / fin,syn,rst tcp option maxseg size set rt mtu
        }

        chain input {
                type filter hook input priority filter; policy drop;
                iifname "lo" accept comment "!fw4: Accept traffic from loopback"
                ct state established,related accept comment "!fw4: Allow inbound established and related flows"
                tcp flags syn / fin,syn,rst,ack jump syn_flood comment "!fw4: Rate limit TCP syn packets"
                iifname "br-lan" jump input_lan comment "!fw4: Handle lan IPv4/IPv6 input traffic"
                iifname "pppoe-wan" jump input_wan comment "!fw4: Handle wan IPv4/IPv6 input traffic"
                jump handle_reject

Should be both pppoe-wan and br-lan for offload. Something went wrong with your editing.

Normally wuthout fw4.uc patch offload list looks like:

        flowtable ft {
                hook ingress priority filter
                devices = { lan1, lan2, lan3, lan4, phy0-ap0, phy0-ap1, phy0-ap2, wan }
                counter
        }

after patch:

        flowtable ft {
                hook ingress priority filter
                devices = { br-lan, pppoe-wan }
                counter
        }

i dont know how your wan pieces disappeared, if possible backup config, reset system, enable checkbox, and verify that lists contains more or less all physical interfaces.
Then check speed witout and with mssfix.nft (should not change the list)
Then apply fw4.uc update and check interface list and speed again.

There are two reasons packet fails to offload and consequentially removes "flow" from offload table:
1/ oversize packet due to worng mss
2/ inability to calculate packet's destination due to more than one encapsulation on input or output side

I reset settings on router, and applied the fix from scratch, now (I believe) firewall entries look fine:

table inet fw4 {
        flowtable ft {
                hook ingress priority filter
                devices = { br-lan, pppoe-wan, wan }
                counter
        }

        chain mangle_postrouting {
                type filter hook postrouting priority mangle; policy accept;
                oif { "wan", "pppoe-wan" } tcp flags syn / fin,syn,rst tcp option maxseg size set rt mtu
        }

        chain input {
                type filter hook input priority filter; policy drop;
                iifname "lo" accept comment "!fw4: Accept traffic from loopback"
                ct state established,related accept comment "!fw4: Allow inbound established and related flows"
                tcp flags syn / fin,syn,rst,ack jump syn_flood comment "!fw4: Rate limit TCP syn packets"
                iifname "br-lan" jump input_lan comment "!fw4: Handle lan IPv4/IPv6 input traffic"
                iifname { "wan", "pppoe-wan" } jump input_wan comment "!fw4: Handle wan IPv4/IPv6 input traffic"
                jump handle_reject

The speed on WAN is still ~320Mbps. Additionally I cannot enable WLAN 5G with 160Mhz width, 80Mhz works fine.

Yes, firewall entries are fine
Is your wired speed fine?
Have you checked iw reg get if any 160mhz is permitted in your location?

Yes, wired speed is fine.

I've checked and there is 160Mhz permited for my region, what is more previously I was using that one without issues.

I also checked real bandwidth between iperf3 hosted on router and WLAN client, and it was ~450Mbps (all on 80Mhz width 5G, on 160 it was something like 600-700Mbps), so it seems that WLAN is capable to transfer on higher speeds, but for some reason not if it goes about data comming from WAN source.

You are measuring totally irrelevant things.
Please post a link to a report via