MT7615E - is it me, or is it the driver?

Running OpenWrt 23.05.4, kmod-mt7615e 5.15.162 on a Xiaomi Redmi AC2100, I get abnormally low downlink speeds.
Running speedtest-netperf on the router results in speeds of about 360-390 Mbps in both directions, while on a nearby laptop speeds hover around 8-16 Mbps down and 190-220 Mbps up.

I've discovered quite a number of threads and GH issues from past years about similar issues, some promising massive improvements in 23.05 release, but I'm not seeing acceptable performance out of my setup.

config wifi-device 'radio1'
	option type 'mac80211'
	option path '1e140000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0'
	option channel '36'
	option band '5g'
	option htmode 'VHT80'
	option country 'RU'
	option cell_density '1'
	option txpower '20'

config wifi-iface 'default_radio1'
	option device 'radio1'
	option network 'lan'
	option mode 'ap'
	option ssid 'name'
	option encryption 'psk2'
	option key 'password'

Please post links to results from
https://www.waveform.com/tools/bufferbloat

  • pc on wifi
  • pc wired
  • pc wired to provider ipo router

Please connect to your OpenWrt device using ssh and copy the output of the following commands and post it here using the "Preformatted text </> " button:
grafik
Remember to redact passwords, MAC addresses and any public IP addresses you may have:

ubus call system board
cat /etc/config/network
cat /etc/config/wireless
cat /etc/config/dhcp
cat /etc/config/firewall

I currently have no way to connect a PC via ethernet.

PC on Wi-Fi:
https://www.waveform.com/tools/bufferbloat?test-id=31daa7b1-3edf-4801-8bc3-f31874776a23

Edit: as a bonus, here's the result at a distance of ~100 centimeters from the router:
https://www.waveform.com/tools/bufferbloat?test-id=243529ea-e2df-4adb-8e65-9e30b98de87a
The previous result is at about 5 meters.

# ubus call system board
{
	"kernel": "5.15.162",
	"hostname": "OpenWrt",
	"system": "MediaTek MT7621 ver:1 eco:3",
	"model": "Xiaomi Redmi Router AC2100",
	"board_name": "xiaomi,redmi-router-ac2100",
	"rootfs_type": "squashfs",
	"release": {
		"distribution": "OpenWrt",
		"version": "23.05.4",
		"revision": "r24012-d8dd03c46f",
		"target": "ramips/mt7621",
		"description": "OpenWrt 23.05.4 r24012-d8dd03c46f"
	}
}
==> network <==
config interface 'loopback'
	option device 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fdd9:40be:69cf::/48'
	option packet_steering '1'

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'lan1'
	list ports 'lan2'
	list ports 'lan3'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option ipaddr '192.168.1.1'
	option netmask '255.255.255.0'
	option ip6assign '60'

config interface 'wan'
	option device 'wan'
	option proto 'dhcp'

config device
	option name 'br-wan'
	option type 'bridge'
==> wireless <==
config wifi-device 'radio0'
	option type 'mac80211'
	option path '1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0'
	option channel '13'
	option band '2g'
	option htmode 'HT20'
	option country 'RU'
	option cell_density '1'
	option disabled '1'

config wifi-iface 'default_radio0'
	option device 'radio0'
	option network 'lan'
	option mode 'ap'
	option ssid 'redacted'
	option encryption 'psk2'
	option key 'redacted'
	option disabled '1'

config wifi-device 'radio1'
	option type 'mac80211'
	option path '1e140000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0'
	option channel 'auto'
	option band '5g'
	option htmode 'VHT80'
	option country 'RU'
	option cell_density '1'

config wifi-iface 'default_radio1'
	option device 'radio1'
	option network 'lan'
	option mode 'ap'
	option ssid 'redacted'
	option encryption 'psk2'
	option key 'redacted'
==> dhcp <==
config dnsmasq
	option domainneeded	1
	option boguspriv	1
	option filterwin2k	0  # enable for dial on demand
	option localise_queries	1
	option rebind_protection 1  # disable if upstream must serve RFC1918 addresses
	option rebind_localhost 1  # enable for RBL checking and similar services
	#list rebind_domain example.lan  # whitelist RFC1918 responses for domains
	option local	'/lan/'
	option domain	'lan'
	option expandhosts	1
	option nonegcache	0
	option cachesize	1000
	option authoritative	1
	option readethers	1
	option leasefile	'/tmp/dhcp.leases'
	option resolvfile	'/tmp/resolv.conf.d/resolv.conf.auto'
	#list server		'/mycompany.local/1.2.3.4'
	option nonwildcard	1 # bind to & keep track of interfaces
	#list interface		br-lan
	#list notinterface	lo
	#list bogusnxdomain     '64.94.110.11'
	option localservice	1  # disable to allow DNS requests from non-local subnets
	option ednspacket_max	1232
	option filter_aaaa	0
	option filter_a		0
	#list addnmount		/some/path # read-only mount path to expose it to dnsmasq

config dhcp lan
	option interface	lan
	option start 	100
	option limit	150
	option leasetime	12h

config dhcp wan
	option interface	wan
	option ignore	1
==> firewall <==
config defaults
	option input 'REJECT'
	option output 'ACCEPT'
	option forward 'REJECT'
	option synflood_protect '1'
	option flow_offloading '1'
	option flow_offloading_hw '1'

config zone
	option name 'lan'
	option input 'ACCEPT'
	option output 'ACCEPT'
	option forward 'ACCEPT'
	list network 'lan'

config zone
	option name 'wan'
	option input 'REJECT'
	option output 'ACCEPT'
	option forward 'REJECT'
	option masq '1'
	option mtu_fix '1'
	list network 'wan'

config forwarding
	option src 'lan'
	option dest 'wan'

config rule
	option name 'Allow-DHCP-Renew'
	option src 'wan'
	option proto 'udp'
	option dest_port '68'
	option target 'ACCEPT'
	option family 'ipv4'

config rule
	option name 'Allow-Ping'
	option src 'wan'
	option proto 'icmp'
	option icmp_type 'echo-request'
	option family 'ipv4'
	option target 'ACCEPT'

config rule
	option name 'Allow-IGMP'
	option src 'wan'
	option proto 'igmp'
	option family 'ipv4'
	option target 'ACCEPT'

config rule
	option name 'Allow-DHCPv6'
	option src 'wan'
	option proto 'udp'
	option dest_port '546'
	option family 'ipv6'
	option target 'ACCEPT'

config rule
	option name 'Allow-MLD'
	option src 'wan'
	option proto 'icmp'
	option src_ip 'fe80::/10'
	list icmp_type '130/0'
	list icmp_type '131/0'
	list icmp_type '132/0'
	list icmp_type '143/0'
	option family 'ipv6'
	option target 'ACCEPT'

config rule
	option name 'Allow-ICMPv6-Input'
	option src 'wan'
	option proto 'icmp'
	list icmp_type 'echo-request'
	list icmp_type 'echo-reply'
	list icmp_type 'destination-unreachable'
	list icmp_type 'packet-too-big'
	list icmp_type 'time-exceeded'
	list icmp_type 'bad-header'
	list icmp_type 'unknown-header-type'
	list icmp_type 'router-solicitation'
	list icmp_type 'neighbour-solicitation'
	list icmp_type 'router-advertisement'
	list icmp_type 'neighbour-advertisement'
	option limit '1000/sec'
	option family 'ipv6'
	option target 'ACCEPT'

config rule
	option name 'Allow-ICMPv6-Forward'
	option src 'wan'
	option dest '*'
	option proto 'icmp'
	list icmp_type 'echo-request'
	list icmp_type 'echo-reply'
	list icmp_type 'destination-unreachable'
	list icmp_type 'packet-too-big'
	list icmp_type 'time-exceeded'
	list icmp_type 'bad-header'
	list icmp_type 'unknown-header-type'
	option limit '1000/sec'
	option family 'ipv6'
	option target 'ACCEPT'

config rule
	option name 'Allow-IPSec-ESP'
	option src 'wan'
	option dest 'lan'
	option proto 'esp'
	option target 'ACCEPT'

config rule
	option name 'Allow-ISAKMP'
	option src 'wan'
	option dest 'lan'
	option dest_port '500'
	option proto 'udp'
	option target 'ACCEPT'

Disable offload(s) and enable back measuring each step.
They are not required for 7621 and 200mbps

Without wire for comparison it is a guesswork if there is a duplex missmatch on wan port etc.

For wifi - your config is nearly default and should work well.
Measure 2.4ghz speed in place #1 ?
For general use keep identical acces points on both radios.
Do you have any other device to compare from same places?
Another thing - run channel survey from luci, if you share channel with many may help setting coverage density to 1-normal and re-starting radio.
You can edit config/wireless with option channels '36 52 100 116 149 165' (not same as option channel which you already changed for better) explicitly excluding channels with most neighbours.

Okay, so I went out and got a patchcord specifically so I could test wired connection.
Here's the result: https://www.waveform.com/tools/bufferbloat?test-id=d91f05af-d217-4467-bc3b-28300e497139
And if you think about it, the result is kinda weird. Both my PC and all three of the router's LAN ports are supposed to be gigabit. Not to mention really high upload latency.

1 Like

Indeed observation is not typical aka weird. Your cable (newly added) may be damaged, like one conductor cut and it becomes 100Mbps.
Please check ethtool wan ethtool -S wan or if it is swconfig then you need something like swconfig dev switch0 show to determine speed and pause settings on WAN port. Pause is bad for performance as mostly uncontrolled amount of transmitted packets may be held back for way too long.

# ethtool wan
Settings for wan:
	Supported ports: [ TP MII ]
	Supported link modes:   10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Supported pause frame use: Symmetric Receive-only
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Advertised pause frame use: Symmetric Receive-only
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Link partner advertised link modes:  10baseT/Half 10baseT/Full 
	                                     100baseT/Half 100baseT/Full 
	                                     1000baseT/Full 
	Link partner advertised pause frame use: No
	Link partner advertised auto-negotiation: Yes
	Link partner advertised FEC modes: Not reported
	Speed: 1000Mb/s
	Duplex: Full
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: external
	Auto-negotiation: on
	MDI-X: Unknown
	Current message level: 0x000000ff (255)
			       drv probe link timer ifdown ifup rx_err tx_err
	Link detected: yes
# ethtool -S wan
NIC statistics:
     tx_bytes: 11408765723
     tx_packets: 11155959
     tx_skip: 0
     tx_collisions: 0
     rx_bytes: 11418574995
     rx_packets: 10689965
     rx_overflow: 0
     rx_fcs_errors: 0
     rx_short_errors: 0
     rx_long_errors: 0
     rx_checksum_errors: 1
     rx_flow_control_packets: 0
     rx_xdp_redirect: 0
     rx_xdp_pass: 0
     rx_xdp_drop: 0
     rx_xdp_tx: 0
     rx_xdp_tx_errors: 0
     tx_xdp_xmit: 0
     tx_xdp_xmit_errors: 0

And for a good measure

# ethtool lan1
Settings for lan1:
	Supported ports: [ TP MII ]
	Supported link modes:   10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Supported pause frame use: Symmetric Receive-only
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Advertised pause frame use: Symmetric Receive-only
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Link partner advertised link modes:  10baseT/Half 10baseT/Full 
	                                     100baseT/Half 100baseT/Full 
	Link partner advertised pause frame use: Symmetric Receive-only
	Link partner advertised auto-negotiation: Yes
	Link partner advertised FEC modes: Not reported
	Speed: 100Mb/s
	Duplex: Full
	Port: Twisted Pair
	PHYAD: 2
	Transceiver: external
	Auto-negotiation: on
	MDI-X: Unknown
	Supports Wake-on: d
	Wake-on: d
	Link detected: yes
# ethtool -S lan1
NIC statistics:
     tx_packets: 19423
     tx_bytes: 11977402
     rx_packets: 21501
     rx_bytes: 7237676
     TxDrop: 0
     TxCrcErr: 0
     TxUnicast: 774481
     TxMulticast: 452
     TxBroadcast: 704
     TxCollision: 0
     TxSingleCollision: 0
     TxMultipleCollision: 0
     TxDeferred: 0
     TxLateCollision: 0
     TxExcessiveCollistion: 0
     TxPause: 0
     TxPktSz64: 249615
     TxPktSz65To127: 8544
     TxPktSz128To255: 2393
     TxPktSz256To511: 1946
     TxPktSz512To1023: 3559
     Tx1024ToMax: 509580
     TxBytes: 789785270
     RxDrop: 0
     RxFiltering: 0
     RxUnicast: 909867
     RxMulticast: 333
     RxBroadcast: 164
     RxAlignErr: 0
     RxCrcErr: 0
     RxUnderSizeErr: 0
     RxFragErr: 0
     RxOverSzErr: 0
     RxJabberErr: 0
     RxPause: 0
     RxPktSz64: 199324
     RxPktSz65To127: 127597
     RxPktSz128To255: 2769
     RxPktSz256To511: 5252
     RxPktSz512To1023: 10491
     RxPktSz1024ToMax: 564931
     RxBytes: 848839289
     RxCtrlDrop: 0
     RxIngressDrop: 0
     RxArlDrop: 0

Says LAN connection is 100Mbps, lets ignore that for now and try to clean the air. What is subscribed speed? Like 200/200?

Ok, so let's set a ballpark starting point.

If you install auc via opkg install auc, and then run auc -n are there any updated packages available?
If so run auc to install the new 23.05.4 with the latest updated packages for the 23.05 branch.

The mt76 driver for 23.05.4 was taken from the April GIT Head:

But if you are seeing bandwidth issues over LAN as well, I'd recommend auc first so that the entire device is on the latest 23.05 packages.

Subscribed, as in "promised by the ISP"? 400/400.

And if i run a speedtest from the router itself, I get speeds fairly close to that:

2024-08-22 18:06:25 Starting speedtest for 60 seconds per transfer session.
Measure speed to netperf-eu.bufferbloat.net (IPv4) while pinging gstatic.com.
Download and upload sessions are sequential, each with 5 simultaneous streams.
............................................................
 Download: 400.89 Mbps
  Latency: [in msec, 61 pings, 0.00% packet loss]
      Min:  13.187
    10pct:  13.252
   Median:  13.507
      Avg:  13.497
    90pct:  13.780
      Max:  13.943
 CPU Load: [in % busy (avg +/- std dev), 58 samples]
     cpu0:  36.1 +/-  4.0
     cpu1:  44.1 +/-  4.3
     cpu2:  52.8 +/-  3.8
     cpu3:  52.8 +/-  3.9
 Overhead: [in % used of total CPU available]
  netperf:  34.1
.............................................................
   Upload: 388.59 Mbps
  Latency: [in msec, 61 pings, 0.00% packet loss]
      Min:  15.677
    10pct:  15.787
   Median:  16.062
      Avg:  16.176
    90pct:  16.589
      Max:  17.560
 CPU Load: [in % busy (avg +/- std dev), 58 samples]
     cpu0:  29.0 +/-  4.6
     cpu1:  23.6 +/-  4.5
     cpu2:  22.4 +/-  5.5
     cpu3:  27.9 +/-  5.5
 Overhead: [in % used of total CPU available]
  netperf:  12.3
1 Like

As expected for firmware flashed just a couple days ago, there isn't anything to update:

root@OpenWrt:~# auc -n
auc/0.3.2-1
Server:    https://sysupgrade.openwrt.org
Running:   23.05.4 r24012-d8dd03c46f on ramips/mt7621 (xiaomi,redmi-router-ac2100)
Available: 23.05.4 r24012-d8dd03c46f
Requesting package lists...
Nothing to be updated. Use '-f' to force.

Thank you for confirming, have you got any SQM or QOS implemented.
Does the MT7603 BGN WiFi perform as expected?

1 Like

Have OP tried the latest SNAPSHOT???

I gifted my GF a Redmi AC2100 and it's currently running SNAPSHOT r27175 on that router and a Mi 4a 100M connected via WDS to the 5GHz radio and both work fine.

I've read that the mt76 driver has some bugs that aren't even fixed on 23.05.

I briefly tried sysupgrading to snapshot yesterday, lost WAN connection for some reason I didn't really try to diagnose and downgraded back down to 23.05.4.

Have you used AUC? I did actually upgraded using the package list from her router and made a custom build on Firmware Selector. Then I upgraded via Luci keeping settings. Everything's fine for now.

I'm honestly not sure what is expected, since I've never used 2.5Ghz on the OEM firmware of this router, but it is way better than 5Ghz:

https://www.waveform.com/tools/bufferbloat?test-id=8babf0b1-1d6d-4f9b-a7cc-73744e2b2869

There was a massive upgrade on the mt76 driver yesterday, git head moved to an August release, although I have seen some devices having PPPoE issues with latest SNAPSHOT, I've got a wax206 mt7622 that I need to check at some point.

@HJVT are you using the correct Power Supply for the AC2100?
And if you are in Russia, I see you can set the wireless channel for 5ghz from 132 to 165 instead of 36.

He already set "auto" which should escape 36 at all costs.

1 Like

So would you also suggest checking latest snapshot again?

I am using the power supply it came with.
It is currently operating at channel 132 automatically. Another thing I want to mention, is that I see barely any activity in 5Ghz range In my apartment.

Edit:
Actually, this is something I probably should've mentioned right off the bat, but the reason why I flashed OpenWRT, is that I had periodic packet loss on WAN with the OEM firmware. (And, this problem did in fact went away after installing OpenWRT.)
So there is some chance that I'm dealing with faulty hardware.

Can you give us a dmesg output, as if there is an issue it may be reported in the bootlog.