Archer A7 uploads at 2x speed compared to download

I know this topic has been beaten to death earlier, however please read this out.

SQM is Off.
Software flow offloading under Firewall is Enabled.
ISP plan is 200mbps DL/UL symmetrical.

On 802.11ac WLAN the throughput speeds are:
D/L: Max out at 90-100mbps.
U/L: Varies between 220-240mbps.
These are line of sight speeds at a distance of ~1 meter from A7.
Max transmit power is at 24dbm, which is the highest available value.

The ISP router is in bridge mode, with its Gigabit port connected via CAT-6E cable to WAN port of Archer A7.

What am I missing.

I've read about how Archer A7 doesn't have a capable CPU, but that is only relevant for gigabit speeds not 200mbps, which its is anyway able to achieve albeit while uploading only.

Output from cat /etc/config/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 ''

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'eth0.1'

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 device
	option name 'eth0.2'
	option macaddr ''

config interface 'wan'
	option proto 'pppoe'
	option device 'eth0.100'
	option username ''
	option ipv6 'auto'
	option password ''

config interface 'wan6'
	option device 'eth0.2'
	option proto 'dhcpv6'

config switch
	option name 'switch0'
	option reset '1'
	option enable_vlan '1'

config switch_vlan
	option device 'switch0'
	option vlan '1'
	option ports '0t 2 3 4 5'
	option vid '1'

config switch_vlan
	option device 'switch0'
	option vlan '2'
	option ports '0t 1'
	option vid '100'

config device
	option name 'eth0.100'
	option type '8021q'
	option ifname 'eth0'
	option vid '100'
	option macaddr ''

Output from cat /etc/config/wireless

config wifi-device 'radio0'
	option type 'mac80211'
	option path 'pci0000:00/0000:00:00.0'
	option band '5g'
	option htmode 'VHT80'
	option cell_density '0'
	option country 'IN'
	option channel '56'
	option txpower '24'

config wifi-device 'radio1'
	option type 'mac80211'
	option path 'platform/ahb/18100000.wmac'
	option band '2g'
	option htmode 'HT40'
	option country 'IN'
	option cell_density '0'
	option txpower '20'
	option channel 'auto'

config wifi-iface 'default_radio1'
	option device 'radio1'
	option network 'lan'
	option mode 'ap'
	option ssid 'Redacted'
	option key 'Redacted'
	option encryption 'psk2+ccmp'

config wifi-iface 'wifinet2'
	option device 'radio0'
	option mode 'ap'
	option key 'Redacted'
	option network 'lan'
	option encryption 'psk2+ccmp'
	option ssid 'Redacted'

Output from cat /etc/config/dhcp

config dnsmasq
	option domainneeded '1'
	option boguspriv '1'
	option filterwin2k '0'
	option localise_queries '1'
	option rebind_protection '1'
	option rebind_localhost '1'
	option local '/lan/'
	option domain 'lan'
	option expandhosts '1'
	option nonegcache '0'
	option authoritative '1'
	option readethers '1'
	option leasefile '/tmp/dhcp.leases'
	option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
	option nonwildcard '1'
	option localservice '1'
	option ednspacket_max '1232'

config dhcp 'lan'
	option interface 'lan'
	option start '100'
	option limit '150'
	option leasetime '12h'
	option dhcpv4 'server'
	option dhcpv6 'server'
	option ra 'server'
	option ra_slaac '1'
	list ra_flags 'managed-config'
	list ra_flags 'other-config'

config dhcp 'wan'
	option interface 'wan'
	option ignore '1'
	list ra_flags 'none'

config odhcpd 'odhcpd'
	option maindhcp '0'
	option leasefile '/tmp/hosts/odhcpd'
	option leasetrigger '/usr/sbin/odhcpd-update'
	option loglevel '4'

Output from cat /etc/config/firewall

config defaults
	option input 'ACCEPT'
	option output 'ACCEPT'
	option forward 'REJECT'
	option synflood_protect '1'
	option flow_offloading '1'

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

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

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 src_ip 'fc00::/6'
	option dest_ip 'fc00::/6'
	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'

config rule
	option name 'Support-UDP-Traceroute'
	option src 'wan'
	option dest_port '33434:33689'
	option proto 'udp'
	option family 'ipv4'
	option target 'REJECT'
	option enabled 'false'

config include
	option path '/etc/firewall.user'
  • What are the Ethernet speeds?
  • What are 2.4 GHz speeds?
  • Is the test device 802.11n/ac capable?

Have you tried other channels?

  • Ethernet speeds are fine. 200mbps up/down to the internet and ~1000mbps up/down on LAN.
  • 2.4 ghz speeds vary from 70-90mbps up/down.
  • Yes, the test devices are 802.11n/ac capable.

I tried switching the channels to 149 & 64 after your post, with no difference seen in throughput.

Tried the Ubiquiti WifiMan app to test throughput between two devices(phone and tablet) connected to the 5Ghz network. Throughput is 215mbps - 376mbps. As per the app, the results show half the speed of the wifi-network, so this translates to 430-750mbps throughput. I was 5-6 meters from the router with a wall in between during this test, though.

However, none of this has helped identify the cause of lower download speed. Everything seems to be working normally when tested separately.

I don't see that, but OK.

What does this mean?

If it means that when you only test only one device, instead of the throughput of two devices across the WiFi - and you received the expected results, correct.

Correct. BTW, how did you test this?

This seems correct (given you're not considering the Tx and Rx at the same time of two devices ). Maybe others can comment.

How did you measure this? Iperf3? Info in LuCI or Ubiquite WifiMan?

Check out Best practices and tools for measuring wifi performance for a rough introduction about how to measure wifi performance. (I still have to refine this thread a little)

Things you could try:

  • Have you tried to disable Software flow offloading?
  • Have you tried lowering transmit power? In certain (but not all) circumstances it actually can increase transferrates.
1 Like

Download tests were done at 3 different destinations everytime to rule out any variability.

  1. speed.cloudflare.com
  2. fast.com
  3. waveform.com/tools/bufferbloat
  • I did try disabling Software flow offloading and it only degrades throughput by ~5mbps.
  • I am testing while standing next to the router. Anyhow, since uploads are working fine is it really a matter of transmit power?

ok, this makes everything a little bit more clear.

Try to connect your client to the router via lan cable and measure speeds again to rule out wifi issues. If speeds improve, you know something is up with wifi.

Edit:

Ethernet speeds are fine. 200mbps up/down to the internet and ~1000mbps up/down on LAN

I think you already tested this. My bad.

Edit²: So, something is up with your wifi. In that case, I would try to remove remote internet from the equation and only test your local network, as you cannot control what your internet service provider does with the packets you send. Tools I personally am comfortable with is Iperf3.

The following commands will capture throughput.

  Run following command at the serverside: Ìperf3 -s

  Run one of the following commands at the client side:

  TCP test, which measures the upload from client to server
  iperf3 -c <IP of Iperf Server> -p <Port of Iperf Server> -t 60 -i 10

  TCP test with 4 Client Streams, which measures the uploads from clients to server
  iperf3 -c <IP of Iperf Server> -p <Port of Iperf Server> -P 4 -t 60 -i 10

  TCP test with 8 Client Streams, which measures the uploads from clients to server
  iperf3 -c <IP of Iperf Server> -p <Port of Iperf Server> -P 8 -t 60 -i 10

  TCP test; Reverse mode: server sends, client receives
  iperf3 -c <IP of Iperf Server> -p <Port of Iperf Server> -t 60 -i 10 -R

  TCP test with 4 Client Streams; Reverse mode: server sends, clients receive
  iperf3 -c <IP of Iperf Server> -p <Port of Iperf Server> -P 4 -t 60 -i 10 -R

  TCP test with 8 Client Streams; Reverse mode: server sends, clients receive
  iperf3 -c <IP of Iperf Server> -p <Port of Iperf Server> -P 8 -t 60 -i 10 -R

  Bidirectional TCP test
  iperf3 -c <IP of Iperf Server> -p <Port of Iperf Server> -t 60 -i 10 --bidir

  Bidirectional TCP test with 4 Client Streams
  iperf3 -c <IP of Iperf Server> -p <Port of Iperf Server> -P 4 -t 60 -i 10 --bidir

  Bidirectional TCP test with 8 Client Streams
  iperf3 -c <IP of Iperf Server> -p <Port of Iperf Server> -P 8 -t 60 -i 10 --bidir
  • Use Iperf in combination with Wireshark: Capture traffic with wireshark while doing throughput tests with iperf, then look at Wireshark's "Statistics → Stream graphs → Round Trip Time"

What version of OpenWRT are you using btw.?

To run the commands, Server would be the router, correct? I'll report the results in a day since its quite late in the day here.

Router is on OpenWRT 22.03.3.

Ideally, based on this comment, you probably would want to have a setup like this:

Iperf client ---> lan ---> router (Archer A7) ---> lan* ---> Iperf server

(* the lan cable between router and iperf server should be plugged into the wan socket of the router)

That is, because routers are optimized to route traffic, instead of simulating and calculating Iperf measurements. Running an Iperf server on your router uses the CPU, which might have an impact on the measurements.

But, as a rough first guess, you can also run it on the router, like this:

Iperf client --- lan --- Router (Iperf Server)