Mi Router 4A Gigabit slow on 5GHz

I have 400Mbps from my ISP, with ethernet I can get 395-410Mbps but over Wi-Fi can't get pass 180-200Mbps (tested with fast.com and speedtest.net).

I tried using 80MHz, software and hardware offloading, packet steering, etc. Also, none of my neighbors use 5Ghz, so I have no interference at all.

Tried different OpenWrt versions, all 21.02.x, 22.03.01, 22.03.02 and 22.03.03, currently on a snapshot from November 28.

config wifi-device 'radio0'
        option type 'mac80211'
        option path '1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0'
        option channel '1'
        option band '2g'
        option legacy_rates '1'
        option cell_density '0'

config wifi-iface 'default_radio0'
        option device 'radio0'
        option network 'lan'
        option mode 'ap'
        option ssid 'xxx'
        option disassoc_low_ack '0'
        option encryption 'psk2'
        option key 'xxx'

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

config wifi-iface 'default_radio1'
        option device 'radio1'
        option network 'lan'
        option mode 'ap'
        option disassoc_low_ack '0'
        option encryption 'psk2'
        option key 'xxx'
        option ssid 'xxx'

I use my 2.4GHz only for smart devices (a vacuum, several bulbs and light switches).

fwiw, see my iperf3 test results for R4A. Your results are as expected.

https://forum.openwrt.org/t/xiaomi-gigabit-4a-slow-2-4ghz-speeds/131264/4

If you want faster wifi speeds, you may wish to install a wireless access point running OEM firmware. Open source drivers for OpenWrt will always be inferior to licensed OEM drivers.

I don't know how to use the iw command.

This is the iwinfo output:

root@OpenWrt:~# iwinfo
phy0-ap0  ESSID: "V23_2.4GHZ"
          Access Point: 8C:DE:F9:73:49:CE
          Mode: Master  Channel: 1 (2.412 GHz)
          Center Channel 1: 1 2: unknown
          Tx-Power: 20 dBm  Link Quality: 60/70
          Signal: -50 dBm  Noise: unknown
          Bit Rate: 47.2 MBit/s
          Encryption: WPA2 PSK (CCMP)
          Type: nl80211  HW Mode(s): 802.11bgn
          Hardware: 14C3:7603 14C3:7603 [MediaTek MT7603E]
          TX power offset: none
          Frequency offset: none
          Supports VAPs: yes  PHY name: phy0

phy1-ap0  ESSID: "V23_5GHZ"
          Access Point: 8C:DE:F9:73:49:CF
          Mode: Master  Channel: 48 (5.240 GHz)
          Center Channel 1: 42 2: unknown
          Tx-Power: 23 dBm  Link Quality: 47/70
          Signal: -63 dBm  Noise: unknown
          Bit Rate: 482.5 MBit/s
          Encryption: WPA2 PSK (CCMP)
          Type: nl80211  HW Mode(s): 802.11nac
          Hardware: 14C3:7662 14C3:7662 [MediaTek MT76x2E]
          TX power offset: none
          Frequency offset: none
          Supports VAPs: yes  PHY name: phy1

I'm sitting next to the router and disconnected every device but a desktop pc using an Archer T3U Plus antenna (on the USB3.0 port) and an android phone (Xiaomi Redmi Note 11). Those are the devices that I using to test.

Never tested the original firmware, I installed OpenWrt as soon as I got the router.

can you test your wifi speed with some dedicated apps? (like this: https://play.google.com/store/apps/details?id=com.pzolee.android.localwifispeedtester )

Are you still on snapshot?
if yes please go on latest stable and try again

I'm on 22.03.02 now, these are the results:


i think your phone has some limitation (software/hardware)
have you tried with another phone?
because you had linkspeed: 433 Mbps with two different version of openwrt

There are a lots of people suffering from this phone's wifi speed on the internet

https://www.google.com/search?q=Xiaomi+Redmi+Note+11+wifi+5ghz+speed+test&rlz=1C1CHBD_enIR1018IR1018&sxsrf=ALiCzsZl2gz-Fn2ZvNZJa7eZyYfrLC5VuQ%3A1669947858398&ei=0mGJY_P2F6jLrgSw8pvQBg&ved=0ahUKEwjzp5LH8Nn7AhWopYsKHTD5BmoQ4dUDCA8&uact=5&oq=Xiaomi+Redmi+Note+11+wifi+5ghz+speed+test&gs_lcp=Cgxnd3Mtd2l6LXNlcnAQAzIECCMQJzoKCAAQRxDWBBCwAzoECAAQRzoFCCEQoAFKBAhBGABKBAhGGABQxhBYjhZgvhloAnABeACAAfkBiAG-A5IBBTAuMS4xmAEAoAEByAEIwAEB&sclient=gws-wiz-serp

I have very similar results on a desktop pc using a TP-Link Archer T3U Plus antenna (on the USB3.0 port) and a HP laptop using a TP-Link Archer T3U AC1300 Mini and the built-in adapter.

Same results on a Fire TV Stick 4k and a Chromecast (Google TV version 4K).

fwiw, have you tried configuring the R4A as a dumb access point and wired into LAN of ISP router to see what speeds you observe (ie. no 'routing' through R4A) from LAN to wifi ?

https://openwrt.org/docs/guide-user/network/wifi/dumbap

imho, you are expecting too much from OpenWrt on MT7621 SoC to be able to route AND serve wifi simultaneously up to 500 mbps....

Can't see any output with iw and iwinfo

root@OpenWrt:~# iw phy1-ap0 station dump
Usage:  iw [options] command
Options:
        --debug         enable netlink debugging
        --version       show version (5.16)
Commands:
        dev <devname> station set <MAC address> txpwr <auto|limit> [<tx power dBm>]
                Set Tx power for this station.

        dev <devname> station set <MAC address> airtime_weight <weight>
                Set airtime weight for this station.

        dev <devname> station set <MAC address> vlan <ifindex>
                Set an AP VLAN for this station.

        dev <devname> station get <MAC address>
                Get information for a specific station.

        dev <devname> station del <MAC address> [subtype <subtype>] [reason-code <code>]
                Remove the given station entry (use with caution!)
                Example subtype values: 0xA (disassociation), 0xC (deauthentication)

        dev <devname> station dump [-v]
                List all stations known, e.g. the AP on managed interfaces

        dev <devname> disconnect
                Disconnect from the current network.

        dev <devname> connect [-w] <SSID> [<freq in MHz>] [<bssid>] [auth open|shared] [key 0:abcde d:1:6162636465] [mfp:req/opt/no]
                Join the network with the given SSID (and frequency, BSSID).
                With -w, wait for the connect to finish or fail.

        dev <devname> auth <SSID> <bssid> <type:open|shared> <freq in MHz> [key 0:abcde d:1:6162636465]
                Authenticate with the given network.


        event [-t|-T|-r] [-f]
                Monitor events from the kernel.
                -t - print timestamp
                -T - print absolute, human-readable timestamp
                -r - print relative timestamp
                -f - print full frame for auth/assoc etc.

        phy <phyname> hwsim getps


        phy <phyname> hwsim setps <value>


        phy <phyname> hwsim stopqueues


        phy <phyname> hwsim wakequeues


        dev <devname> ibss leave
                Leave the current IBSS cell.

        dev <devname> ibss join <SSID> <freq in MHz> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz] [fixed-freq] [<fixed bssid>] [beacon-interval <TU>] [basic-rates <rate in Mbps,rate2,...>] [mcast-rate <rate in Mbps>] [key d:0:abcde]
                Join the IBSS cell with the given SSID, if it doesn't exist create
                it on the given frequency. When fixed frequency is requested, don't
                join/create a cell on a different frequency. When a fixed BSSID is
                requested use that BSSID and do not adopt another cell's BSSID even
                if it has higher TSF and the same SSID. If an IBSS is created, create
                it with the specified basic-rates, multicast-rate and beacon-interval.

        phy <phyname> info
                Show capabilities for the specified wireless device.

        list
                List all wireless devices and their capabilities.

        phy
        features


        phy <phyname> interface add <name> type <type> [mesh_id <meshid>] [4addr on|off] [flags <flag>*] [addr <mac-addr>]
                Add a new virtual interface with the given configuration.
                Valid interface types are: managed, ibss, monitor, mesh, wds.

                The flags are only used for monitor interfaces, valid flags are:
                none:     no special flags
                fcsfail:  show frames with FCS errors
                control:  show control frames
                otherbss: show frames from other BSSes
                cook:     use cooked mode
                active:   use active mode (ACK incoming unicast packets)
                mumimo-groupid <GROUP_ID>: use MUMIMO according to a group id
                mumimo-follow-mac <MAC_ADDRESS>: use MUMIMO according to a MAC address

                The mesh_id is used only for mesh mode.

        dev <devname> interface add <name> type <type> [mesh_id <meshid>] [4addr on|off] [flags <flag>*] [addr <mac-addr>]
        dev <devname> del
                Remove this virtual interface

        dev <devname> info
                Show information for this interface.

        dev
                List all network interfaces for wireless hardware.

        help [command]
                Print usage for all or a specific command, e.g.
                "help wowlan" or "help wowlan enable".

        dev <devname> link
                Print information about the current link, if any.

        dev <devname> mesh join <mesh ID> [[freq <freq in MHz> <NOHT|HT20|HT40+|HT40-|80MHz>] [basic-rates <rate in Mbps,rate2,...>]], [mcast-rate <rate in Mbps>] [beacon-interval <time in TUs>] [dtim-period <value>] [vendor_sync on|off] [<param>=<value>]*
                Join a mesh with the given mesh ID with frequency, basic-rates,
                mcast-rate and mesh parameters. Basic-rates are applied only if
                frequency is provided.

        dev <devname> mesh leave
                Leave a mesh.

        dev <devname> mesh_param dump
                List all supported mesh parameters

        dev <devname> mpath probe <destination MAC address> frame <frame>
                Inject ethernet frame to given peer overriding the next hop
                lookup from mpath table.
                .Example: iw dev wlan0 mpath probe xx:xx:xx:xx:xx:xx frame 01:xx:xx:00


        dev <devname> mpath get <MAC address>
                Get information on mesh path to the given node.

        dev <devname> mpath del <MAC address>
                Remove the mesh path to the given node.

        dev <devname> mpath new <destination MAC address> next_hop <next hop MAC address>
                Create a new mesh path (instead of relying on automatic discovery).

        dev <devname> mpath set <destination MAC address> next_hop <next hop MAC address>
                Set an existing mesh path's next hop.

        dev <devname> mpath dump
                List known mesh paths.

        dev <devname> mpp get <MAC address>
                Get information on mesh proxy path to the given node.

        dev <devname> mpp dump
                List known mesh proxy paths.

        phy <phyname> channels
                Show available channels.

        reg set <ISO/IEC 3166-1 alpha2>
                Notify the kernel about the current regulatory domain.

        reg get
                Print out the kernel's current regulatory domain information.

        phy <phyname> reg get
                Print out the devices' current regulatory domain information.

        reg reload
                Reload the kernel's regulatory database.

        dev <devname> scan [-u] [freq <freq>*] [duration <dur>] [ies <hex as 00:11:..>] [meshid <meshid>] [lowpri,flush,ap-force,duration-mandatory] [randomise[=<addr>/<mask>]] [ssid <ssid>*|passive]
                Scan on the given frequencies and probe for the given SSIDs
                (or wildcard if not given) unless passive scanning is requested.
                If -u is specified print unknown data in the scan results.
                Specified (vendor) IEs must be well-formed.

        dev <devname> scan dump [-u]
                Dump the current scan results. If -u is specified, print unknown
                data in scan results.

        dev <devname> scan trigger [freq <freq>*] [duration <dur>] [ies <hex as 00:11:..>] [meshid <meshid>] [lowpri,flush,ap-force,duration-mandatory,coloc] [randomise[=<addr>/<mask>]] [ssid <ssid>*|passive]
                Trigger a scan on the given frequencies with probing for the given
                SSIDs (or wildcard if not given) unless passive scanning is requested.
                Duration(in TUs), if specified, will be used to set dwell times.


        dev <devname> scan abort
                Abort ongoing scan

        dev <devname> get mesh_param [<param>]
                Retrieve mesh parameter (run command without any to see available ones).

        phy <phyname> get txq
                Get TXQ parameters.

        dev <devname> get power_save
                Retrieve power save state.

        dev <devname> set bitrates [legacy-<2.4|5> <legacy rate in Mbps>*] [ht-mcs-<2.4|5> <MCS index>*] [vht-mcs-<2.4|5> [he-mcs-<2.4|5|6> <NSS:MCSx,MCSy... | NSS:MCSx-MCSy>*] [sgi-2.4|lgi-2.4] [sgi-5|lgi-5] [he-gi-<2.4|5|6> <0.8|1.6|3.2>] [he-ltf-<2.4|5|6> <1|2|4>]
                Sets up the specified rate masks.
                Not passing any arguments would clear the existing mask (if any).

        dev <devname> set monitor <flag>*
                Set monitor flags. Valid flags are:
                none:     no special flags
                fcsfail:  show frames with FCS errors
                control:  show control frames
                otherbss: show frames from other BSSes
                cook:     use cooked mode
                active:   use active mode (ACK incoming unicast packets)
                mumimo-groupid <GROUP_ID>: use MUMIMO according to a group id
                mumimo-follow-mac <MAC_ADDRESS>: use MUMIMO according to a MAC address

        dev <devname> set meshid <meshid>
        dev <devname> set type <type>
                Set interface type/mode.
                Valid interface types are: managed, ibss, monitor, mesh, wds.

        dev <devname> set 4addr <on|off>
                Set interface 4addr (WDS) mode.

        dev <devname> set noack_map <map>
                Set the NoAck map for the TIDs. (0x0009 = BE, 0x0006 = BK, 0x0030 = VI, 0x00C0 = VO)

        dev <devname> set mcast_rate <rate in Mbps>
                Set the multicast bitrate.

        dev <devname> set mesh_param <param>=<value> [<param>=<value>]*
                Set mesh parameter (run command without any to see available ones).

        phy <phyname> set name <new name>
                Rename this wireless device.

        phy <phyname> set freq <freq> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz]
        phy <phyname> set freq <control freq> [5|10|20|40|80|80+80|160] [<center1_freq> [<center2_freq>]]
                Set frequency/channel the hardware is using, including HT
                configuration.

        dev <devname> set freq <freq> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz]
        dev <devname> set freq <control freq> [5|10|20|40|80|80+80|160] [<center1_freq> [<center2_freq>]]
        phy <phyname> set channel <channel> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz]
        dev <devname> set channel <channel> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz]
        phy <phyname> set frag <fragmentation threshold|off>
                Set fragmentation threshold.

        phy <phyname> set rts <rts threshold|off>
                Set rts threshold.

        phy <phyname> set retry [short <limit>] [long <limit>]
                Set retry limit.

        phy <phyname> set netns { <pid> | name <nsname> }
                Put this wireless device into a different network namespace:
                    <pid>    - change network namespace by process id
                    <nsname> - change network namespace by name from /var/run/netns
                               or by absolute path (man ip-netns)


        phy <phyname> set coverage <coverage class>
                Set coverage class (1 for every 3 usec of air propagation time).
                Valid values: 0 - 255.

        phy <phyname> set distance <auto|distance>
                Enable ACK timeout estimation algorithm (dynack) or set appropriate
                coverage class for given link distance in meters.
                To disable dynack set valid value for coverage class.
                Valid values: 0 - 114750

        phy <phyname> set txpower <auto|fixed|limit> [<tx power in mBm>]
                Specify transmit power level and setting type.

        dev <devname> set txpower <auto|fixed|limit> [<tx power in mBm>]
                Specify transmit power level and setting type.

        phy <phyname> set antenna <bitmap> | all | <tx bitmap> <rx bitmap>
                Set a bitmap of allowed antennas to use for TX and RX.
                The driver may reject antenna configurations it cannot support.

        phy <phyname> set txq limit <packets> | memory_limit <bytes> | quantum <bytes>
                Set TXQ parameters. The limit and memory_limit are global queue limits
                for the whole phy. The quantum is the DRR scheduler quantum setting.
                Valid values: 1 - 2**32

        phy <phyname> set antenna_gain <antenna gain in dBm>
                Specify antenna gain.

        dev <devname> set power_save <on|off>
                Set power save state to on or off.

        phy <phyname> set sar_specs <sar type> <range index:sar power>*
                Set SAR specs corresponding to SAR capa of wiphy.

        dev <devname> survey dump
                List all gathered channel survey data


Commands that use the netdev ('dev') can also be given the
'wdev' instead to identify the device.

You can omit the 'phy' or 'dev' if the identification is unique,
e.g. "iw wlan0 info" or "iw phy0 info". (Don't when scripting.)

Do NOT screenscrape this tool, we don't consider its output stable.
root@OpenWrt:~# iwinfo phy1-ap0 assoclist
No station connected

Cpu load seems pretty good while downloading a 10GB file

Mem: 49580K used, 71184K free, 488K shrd, 0K buff, 11992K cached
CPU:   0% usr   6% sys   0% nic  66% idle   0% io   0% irq  26% sirq
Load average: 0.12 0.05 0.01 3/98 6380
  PID  PPID USER     STAT   VSZ %VSZ %CPU COMMAND
  876     2 root     SW       0   0%   9% [mt76-tx phy1]
   21     2 root     RW       0   0%   8% [ksoftirqd/2]
  843     2 root     SW       0   0%   1% [napi/phy1-9]
 1676  1643 network  S     4656   4%   0% /usr/sbin/hostapd -s -g /var/run/hostapd/global
 6380  6187 root     R     1328   1%   0% top
  805     2 root     SW       0   0%   0% [napi/phy0-7]
   11     2 root     IW       0   0%   0% [rcu_sched]
   10     2 root     SW       0   0%   0% [ksoftirqd/0]
 1708     1 root     S     1844   2%   0% /sbin/netifd
 6185  1539 root     S     1236   1%   0% /usr/sbin/dropbear -F -P /var/run/dropbear.1.pid -p 22 -K 300 -T 3 -2 9
  313     2 root     IW       0   0%   0% [kworker/1:1-eve]
  814     2 root     SW       0   0%   0% [mt76-tx phy0]
 5257     2 root     IW       0   0%   0% [kworker/2:2-mm_]
 6141     2 root     IW       0   0%   0% [kworker/u8:1-ph]
 1675  1644 network  S     4436   4%   0% /usr/sbin/wpa_supplicant -n -s -g /var/run/wpa_supplicant/global
 1976     1 root     S     4192   3%   0% /usr/sbin/uhttpd -f -h /www -r OpenWrt -x /cgi-bin -u /ubus -t 60 -T 30 -k 20 -A 1 -n 3 -N 100 -R -p 0.0.0.0:80 -p [::]:80 -C /etc/uhttpd.crt -K /etc/uhttpd.key -s 0.0.0.0:443 -s [::]:443
 4117  4115 dnsmasq  S     3008   2%   0% /usr/sbin/dnsmasq -C /var/etc/dnsmasq.conf.cfg01411c -k -x /var/run/dnsmasq/dnsmasq.cfg01411c.pid
 1643     1 root     S     2664   2%   0% {hostapd} /sbin/ujail -t 5 -n hostapd -U network -G network -C /etc/capabilities/wpad.json -c -- /usr/sbin/hostapd -s -g /var/run/hostapd/global
 2540     1 root     S     2664   2%   0% {ntpd} /sbin/ujail -t 5 -n ntpd -U ntp -G ntp -C /etc/capabilities/ntpd.json -c -u -r /bin/ubus -r /usr/bin/env -r /usr/bin/jshn -r /usr/sbin/ntpd-hotplug -r /usr/share/libubox/jshn.sh -- /usr/sb
 1644     1 root     S     2664   2%   0% {wpa_supplicant} /sbin/ujail -t 5 -n wpa_supplicant -U network -G network -C /etc/capabilities/wpad.json -c -- /usr/sbin/wpa_supplicant -n -s -g /var/run/wpa_supplicant/global
 4115     1 root     S     2664   2%   0% {dnsmasq} /sbin/ujail -t 5 -n dnsmasq -u -l -r /bin/ubus -r /etc/TZ -r /etc/dnsmasq.conf -r /etc/ethers -r /etc/group -r /etc/hosts -r /etc/passwd -w /tmp/dhcp.leases -r /tmp/dnsmasq.d -r /tmp/ho
 1319     1 root     S     2304   2%   0% /sbin/rpcd -s /var/run/ubus/ubus.sock -t 30
    1     0 root     S     1704   1%   0% /sbin/procd
 1860     1 root     S     1540   1%   0% /usr/sbin/odhcpd
 1265     1 logd     S     1352   1%   0% /sbin/logd -S 64
  678     1 ubus     S     1344   1%   0% /sbin/ubusd
 6187  6185 root     S     1316   1%   0% -ash
 2554  2540 ntp      S     1312   1%   0% /usr/sbin/ntpd -n -N -S /usr/sbin/ntpd-hotplug -p 0.openwrt.pool.ntp.org -p 1.openwrt.pool.ntp.org -p 2.openwrt.pool.ntp.org -p 3.openwrt.pool.ntp.org
 2998  1708 root     S     1312   1%   0% udhcpc -p /var/run/udhcpc-wan.pid -s /lib/netifd/dhcp.script -f -t 0 -i wan -x hostname:OpenWrt -C -R -O 121
 1539     1 root     S     1216   1%   0% /usr/sbin/dropbear -F -P /var/run/dropbear.1.pid -p 22 -K 300 -T 3
 2997  1708 root     S     1132   1%   0% odhcp6c -s /lib/netifd/dhcpv6.script -Ntry -P0 -t120 wan
  714     1 root     S     1116   1%   0% /sbin/urngd
  679     1 root     S     1000   1%   0% /sbin/askfirst /usr/libexec/login.sh
   26     2 root     SW       0   0%   0% [ksoftirqd/3]
   16     2 root     SW       0   0%   0% [ksoftirqd/1]
  301     2 root     SW       0   0%   0% [spi0]
  464     2 root     IW       0   0%   0% [kworker/0:5-eve]
 5399     2 root     IW       0   0%   0% [kworker/3:2-eve]
  844     2 root     SW       0   0%   0% [napi/phy1-10]
  184     2 root     SW       0   0%   0% [kcompactd0]
  242     2 root     IW<      0   0%   0% [kworker/0:1H-ev]
  418     2 root     IW<      0   0%   0% [kworker/3:1H-ev]
  416     2 root     IW       0   0%   0% [kworker/3:3-eve]
  820     2 root     IW<      0   0%   0% [kworker/2:2H-ev]
 1381     2 root     IW<      0   0%   0% [kworker/1:2H-ev]
 6086     2 root     IW       0   0%   0% [kworker/u8:12-n]
 6121     2 root     IW       0   0%   0% [kworker/u8:16-n]
 6122     2 root     IW       0   0%   0% [kworker/u8:17-n]
  469     2 root     IW<      0   0%   0% [kworker/1:1H-ev]
 6158     2 root     IW       0   0%   0% [kworker/u8:11-n]
 6150     2 root     IW       0   0%   0% [kworker/u8:0-nf]
  467     2 root     IW<      0   0%   0% [kworker/2:1H-ev]
 6160     2 root     IW       0   0%   0% [kworker/u8:15-n]
 6156     2 root     IW       0   0%   0% [kworker/u8:8-nf]
 6155     2 root     IW       0   0%   0% [kworker/u8:7-nf]
 6153     2 root     IW       0   0%   0% [kworker/u8:5-nf]
 6172     2 root     IW       0   0%   0% [kworker/u8:4-nf]
 6171     2 root     IW       0   0%   0% [kworker/u8:3-nf]
 6182     2 root     IW       0   0%   0% [kworker/u8:10-n]

Because I want to use the adblocker with OpenWrt, also my ISP modem (Huawei HG8247H) is single banded, so I use the router to get 5GHz.

If you want faster wifi speeds, you may wish to install a wireless access point running OEM firmware. Open source drivers for OpenWrt will always be inferior to licensed OEM drivers.

fwiw, have you tried configuring the R4A as a dumb access point and wired into LAN of ISP router to see what speeds you observe (ie. no 'routing' through R4A) from LAN to wifi ?

Can I use any access point to achieve this? For example, this extender with AP capabilities: https://www.tp-link.com/en/home-networking/range-extender/re550/

Or even a second identical router (running OpenWrt) as a dumb ap?

My suggestion to test dumb wireless access point with OpenWrt on R4A wired to your Huawei, to see whether the maximum transfer speed of the R4A is better than the 200 mbps via wifi only (without routing).

RE550 is a wireless repeater (ie. wifi in, wifi out).
Page 38, section 6.2.1 does suggest it can be used as an access point.
https://static.tp-link.com/2020/202008/20200813/1910012825_RE450&RE550_UG_REV4.0.0.pdf

(I personally would not use a RE550 because you are limited to where you can place the RE550. It has to be plugged into a wall? power socket and nearby furniture may partially block the wifi signal)

I think the R4A running OEM firmware can operate as dumb wireless access point too, as do many routers sold today (eg. TPlink Archer C6 v3 etc)

Turn on software and hardware offloading from Firewall menu and reboot then try again.

iw dev phy1-ap0 station dump

This didn't work

root@OpenWrt:~# iw dev phy1-ap0 station dump
command failed: No such device (-19)

I tried with wlan1 instead

root@OpenWrt:~# iw wlan1 station dump
Station 70:70:aa:67:26:fd (on wlan1)
        inactive time:  130 ms
        rx bytes:       31473604
        rx packets:     328180
        tx bytes:       33164453
        tx packets:     320354
        tx retries:     768
        tx failed:      1
        rx drop misc:   2
        signal:         -54 [-54, -64] dBm
        signal avg:     -53 [-53, -59] dBm
        tx bitrate:     433.3 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 1
        tx duration:    13008770 us
        rx bitrate:     86.7 MBit/s VHT-MCS 8 short GI VHT-NSS 1
        rx duration:    2374458 us
        airtime weight: 256
        expected throughput:    107.940Mbps
        authorized:     yes
        authenticated:  yes
        associated:     yes
        preamble:       long
        WMM/WME:        yes
        MFP:            no
        TDLS peer:      no
        DTIM period:    2
        beacon interval:100
        short slot time:yes
        connected time: 69210 seconds
        associated at [boottime]:       7762.016s
        associated at:  1669953541088 ms
        current time:   1670022751187 ms
Station b4:b7:42:5c:01:94 (on wlan1)
        inactive time:  990 ms
        rx bytes:       21081579
        rx packets:     186096
        tx bytes:       95292697
        tx packets:     224165
        tx retries:     6610
        tx failed:      1
        rx drop misc:   2
        signal:         -62 [-64, -66] dBm
        signal avg:     -61 [-63, -65] dBm
        tx bitrate:     433.3 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 1
        tx duration:    10591904 us
        rx bitrate:     390.0 MBit/s VHT-MCS 9 80MHz VHT-NSS 1
        rx duration:    2810470 us
        airtime weight: 256
        expected throughput:    63.170Mbps
        authorized:     yes
        authenticated:  yes
        associated:     yes
        preamble:       long
        WMM/WME:        yes
        MFP:            no
        TDLS peer:      no
        DTIM period:    2
        beacon interval:100
        short slot time:yes
        connected time: 69204 seconds
        associated at [boottime]:       7768.019s
        associated at:  1669953547092 ms
        current time:   1670022751192 ms
Station ec:8a:c4:e8:1c:7d (on wlan1)
        inactive time:  110 ms
        rx bytes:       34890589
        rx packets:     302167
        tx bytes:       59714767
        tx packets:     257170
        tx retries:     132093
        tx failed:      2
        rx drop misc:   4
        signal:         -61 [-65, -63] dBm
        signal avg:     -60 [-64, -62] dBm
        tx bitrate:     702.0 MBit/s VHT-MCS 8 80MHz VHT-NSS 2
        tx duration:    17986574 us
        rx bitrate:     468.0 MBit/s VHT-MCS 5 80MHz VHT-NSS 2
        rx duration:    7084492 us
        airtime weight: 256
        expected throughput:    66.100Mbps
        authorized:     yes
        authenticated:  yes
        associated:     yes
        preamble:       long
        WMM/WME:        yes
        MFP:            no
        TDLS peer:      no
        DTIM period:    2
        beacon interval:100
        short slot time:yes
        connected time: 68947 seconds
        associated at [boottime]:       8025.505s
        associated at:  1669953804580 ms
        current time:   1670022751195 ms
Station 28:66:e3:5b:e8:4d (on wlan1)
        inactive time:  17480 ms
        rx bytes:       124597
        rx packets:     2654
        tx bytes:       89024
        tx packets:     1007
        tx retries:     27
        tx failed:      1
        rx drop misc:   1
        signal:         -65 [-70, -66] dBm
        signal avg:     -65 [-70, -66] dBm
        tx bitrate:     468.0 MBit/s VHT-MCS 5 80MHz VHT-NSS 2
        tx duration:    318113 us
        rx bitrate:     6.0 MBit/s
        rx duration:    152951 us
        airtime weight: 256
        expected throughput:    63.170Mbps
        authorized:     yes
        authenticated:  yes
        associated:     yes
        preamble:       long
        WMM/WME:        yes
        MFP:            no
        TDLS peer:      no
        DTIM period:    2
        beacon interval:100
        short slot time:yes
        connected time: 35781 seconds
        associated at [boottime]:       41191.302s
        associated at:  1669986970377 ms
        current time:   1670022751197 ms
Station 4c:e0:db:e9:2b:e7 (on wlan1)
        inactive time:  2480 ms
        rx bytes:       1128228
        rx packets:     8241
        tx bytes:       57219111
        tx packets:     31635
        tx retries:     1448
        tx failed:      76
        rx drop misc:   1
        signal:         -66 [-71, -67] dBm
        signal avg:     -64 [-67, -68] dBm
        tx bitrate:     433.3 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 1
        tx duration:    1819771 us
        rx bitrate:     6.0 MBit/s
        rx duration:    282010 us
        airtime weight: 256
        expected throughput:    63.170Mbps
        authorized:     yes
        authenticated:  yes
        associated:     yes
        preamble:       long
        WMM/WME:        yes
        MFP:            no
        TDLS peer:      no
        DTIM period:    2
        beacon interval:100
        short slot time:yes
        connected time: 815 seconds
        associated at [boottime]:       76157.272s
        associated at:  1670021936347 ms
        current time:   1670022751199 ms
Station 74:f2:fa:c9:2a:1f (on wlan1)
        inactive time:  10410 ms
        rx bytes:       493713
        rx packets:     2795
        tx bytes:       3045114
        tx packets:     3127
        tx retries:     877
        tx failed:      32
        rx drop misc:   1
        signal:         -68 [-68, -76] dBm
        signal avg:     -67 [-68, -74] dBm
        tx bitrate:     390.0 MBit/s VHT-MCS 8 80MHz short GI VHT-NSS 1
        tx duration:    281713 us
        rx bitrate:     6.0 MBit/s
        rx duration:    146932 us
        airtime weight: 256
        expected throughput:    61.980Mbps
        authorized:     yes
        authenticated:  yes
        associated:     yes
        preamble:       long
        WMM/WME:        yes
        MFP:            no
        TDLS peer:      no
        DTIM period:    2
        beacon interval:100
        short slot time:yes
        connected time: 814 seconds
        associated at [boottime]:       76158.211s
        associated at:  1670021937286 ms
        current time:   1670022751201 ms
Station c0:06:c3:a9:f2:5c (on wlan1)
        inactive time:  10 ms
        rx bytes:       9309343
        rx packets:     88269
        tx bytes:       1473218348
        tx packets:     619349
        tx retries:     25082
        tx failed:      3
        rx drop misc:   2
        signal:         -67 [-69, -70] dBm
        signal avg:     -67 [-69, -69] dBm
        tx bitrate:     585.1 MBit/s VHT-MCS 6 80MHz short GI VHT-NSS 2
        tx duration:    36717987 us
        rx bitrate:     468.0 MBit/s VHT-MCS 5 80MHz VHT-NSS 2
        rx duration:    647473 us
        airtime weight: 256
        expected throughput:    286.193Mbps
        authorized:     yes
        authenticated:  yes
        associated:     yes
        preamble:       long
        WMM/WME:        yes
        MFP:            no
        TDLS peer:      no
        DTIM period:    2
        beacon interval:100
        short slot time:yes
        connected time: 494 seconds
        associated at [boottime]:       76478.476s
        associated at:  1670022257551 ms
        current time:   1670022751202 ms
Station c0:06:c3:a9:ea:66 (on wlan1)
        inactive time:  110 ms
        rx bytes:       4366038
        rx packets:     38230
        tx bytes:       575986224
        tx packets:     247050
        tx retries:     8203
        tx failed:      7
        rx drop misc:   11
        signal:         -65 [-67, -69] dBm
        signal avg:     -67 [-69, -70] dBm
        tx bitrate:     702.0 MBit/s VHT-MCS 8 80MHz VHT-NSS 2
        tx duration:    11825761 us
        rx bitrate:     351.0 MBit/s VHT-MCS 8 80MHz VHT-NSS 1
        rx duration:    330947 us
        airtime weight: 256
        expected throughput:    66.100Mbps
        authorized:     yes
        authenticated:  yes
        associated:     yes
        preamble:       long
        WMM/WME:        yes
        MFP:            no
        TDLS peer:      no
        DTIM period:    2
        beacon interval:100
        short slot time:yes
        connected time: 306 seconds
        associated at [boottime]:       76666.995s
        associated at:  1670022446070 ms
        current time:   1670022751204 ms

Turn on software and hardware offloading from Firewall menu and reboot then try again.

Both are already enabled

My suggestion to test dumb wireless access point with OpenWrt on R4A wired to your Huawei, to see whether the maximum transfer speed of the R4A is better than the 200 mbps via wifi only (without routing).

I tried this, as a dumb ap wired to the ISP modem, same results:

Update: I tried the OEM firmware with slightly better results as an access point: