802.11ac performance of stock TP-LINK Archer C7 vs LEDE

I have been performing extensive testing of the wireless performance of the stock TP-LINK firmware vs LEDE.

Test hardware: TP-LINK Archer C7 v2, UK model. MacBook Pro Retina 2013, 3x3 802.11ac capable, maximum 1300Mbps connection rate. Windows 7 on the PC.

PC wired via gigabit Ethernet to the router, with an Intel NIC. Connecting at 1Gbps.

MacBook Pro is ~45m from the router. Straight line, no obstructions, slightly elevated. MacBook Pro is on a stable surface. Aimed to connect at 1300Mbps for both tests.

iperf 2. is running in server mode on the MacBook Pro. jperf 2.0.2 is run on the Windows client, in client mode. iperf2 on the MacBook Pro is setup as follows: iperf -s -w 1MB. jperf is setup on the Windows client as follows: iperf.exe -c 192.168.0.103 -P 1 -i 1 -p 5001 -w 1.0M -f m -t 10.

A 10 second test was performed, with a window size of 1MB over TCP. This was repeated 5 times and an average taken. This set of tests was repeated twice, to compare LEDE and the stock TP-LINK firmware. The only changes between the sets of tests were the firmware, the network SSID, the IP addresses of the clients and the region. The TP-LINK firmware forces a DE region but as I am in the UK I chose GB for LEDE. As the two regions are EU-based, the wireless power laws are the same. Encryption and the wireless channels - crucially - were kept the same.

TP-LINK stock firmware (3.15.1 Build 160616 Rel.44182n):

The five tests:

bin/iperf.exe -c 192.168.0.103 -P 1 -i 1 -p 5001 -w 1.0M -f m -t 10
------------------------------------------------------------
Client connecting to 192.168.0.103, TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
[164] local 192.168.0.101 port 52134 connected with 192.168.0.103 port 5001
[ ID] Interval       Transfer     Bandwidth
[164]  0.0- 1.0 sec  71.0 MBytes   596 Mbits/sec
[164]  1.0- 2.0 sec  78.0 MBytes   654 Mbits/sec
[164]  2.0- 3.0 sec  80.8 MBytes   678 Mbits/sec
[164]  3.0- 4.0 sec  85.6 MBytes   718 Mbits/sec
[164]  4.0- 5.0 sec  87.4 MBytes   733 Mbits/sec
[164]  5.0- 6.0 sec  88.3 MBytes   741 Mbits/sec
[164]  6.0- 7.0 sec  89.4 MBytes   750 Mbits/sec
[164]  7.0- 8.0 sec  89.1 MBytes   748 Mbits/sec
[164]  8.0- 9.0 sec  89.4 MBytes   750 Mbits/sec
[164]  9.0-10.0 sec  89.5 MBytes   751 Mbits/sec
[164]  0.0-10.0 sec   849 MBytes   711 Mbits/sec
Done.

bin/iperf.exe -c 192.168.0.103 -P 1 -i 1 -p 5001 -w 1.0M -f m -t 10
------------------------------------------------------------
Client connecting to 192.168.0.103, TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
[164] local 192.168.0.101 port 52135 connected with 192.168.0.103 port 5001
[ ID] Interval       Transfer     Bandwidth
[164]  0.0- 1.0 sec  89.4 MBytes   750 Mbits/sec
[164]  1.0- 2.0 sec  89.6 MBytes   752 Mbits/sec
[164]  2.0- 3.0 sec  89.1 MBytes   748 Mbits/sec
[164]  3.0- 4.0 sec  89.1 MBytes   747 Mbits/sec
[164]  4.0- 5.0 sec  88.9 MBytes   746 Mbits/sec
[164]  5.0- 6.0 sec  89.1 MBytes   748 Mbits/sec
[164]  6.0- 7.0 sec  88.7 MBytes   744 Mbits/sec
[164]  7.0- 8.0 sec  90.0 MBytes   755 Mbits/sec
[164]  8.0- 9.0 sec  89.8 MBytes   753 Mbits/sec
[164]  9.0-10.0 sec  89.9 MBytes   754 Mbits/sec
[164]  0.0-10.0 sec   894 MBytes   749 Mbits/sec
Done.

bin/iperf.exe -c 192.168.0.103 -P 1 -i 1 -p 5001 -w 1.0M -f m -t 10
------------------------------------------------------------
Client connecting to 192.168.0.103, TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
[164] local 192.168.0.101 port 52137 connected with 192.168.0.103 port 5001
[ ID] Interval       Transfer     Bandwidth
[164]  0.0- 1.0 sec  88.2 MBytes   740 Mbits/sec
[164]  1.0- 2.0 sec  90.4 MBytes   758 Mbits/sec
[164]  2.0- 3.0 sec  88.0 MBytes   738 Mbits/sec
[164]  3.0- 4.0 sec  89.0 MBytes   747 Mbits/sec
[164]  4.0- 5.0 sec  88.7 MBytes   744 Mbits/sec
[164]  5.0- 6.0 sec  38.2 MBytes   321 Mbits/sec
[164]  6.0- 7.0 sec  70.6 MBytes   592 Mbits/sec
[164]  7.0- 8.0 sec  77.7 MBytes   652 Mbits/sec
[164]  8.0- 9.0 sec  80.8 MBytes   678 Mbits/sec
[164]  9.0-10.0 sec  85.6 MBytes   718 Mbits/sec
[164]  0.0-10.0 sec   797 MBytes   667 Mbits/sec
Done.

bin/iperf.exe -c 192.168.0.103 -P 1 -i 1 -p 5001 -w 1.0M -f m -t 10
------------------------------------------------------------
Client connecting to 192.168.0.103, TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
[164] local 192.168.0.101 port 52138 connected with 192.168.0.103 port 5001
[ ID] Interval       Transfer     Bandwidth
[164]  0.0- 1.0 sec  88.6 MBytes   743 Mbits/sec
[164]  1.0- 2.0 sec  89.3 MBytes   749 Mbits/sec
[164]  2.0- 3.0 sec  87.7 MBytes   736 Mbits/sec
[164]  3.0- 4.0 sec  81.5 MBytes   683 Mbits/sec
Done.

bin/iperf.exe -c 192.168.0.103 -P 1 -i 1 -p 5001 -w 1.0M -f m -t 10
Done.

bin/iperf.exe -c 192.168.0.103 -P 1 -i 1 -p 5001 -w 1.0M -f m -t 10

Iperf thread stopped [CAUSE=Stream Closed]
bin/iperf.exe -c 192.168.0.103 -P 1 -i 1 -p 5001 -w 1.0M -f m -t 10
------------------------------------------------------------
Client connecting to 192.168.0.103, TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
[164] local 192.168.0.101 port 52144 connected with 192.168.0.103 port 5001
[ ID] Interval       Transfer     Bandwidth
[164]  0.0- 1.0 sec  24.4 MBytes   204 Mbits/sec
[164]  1.0- 2.0 sec  78.9 MBytes   662 Mbits/sec
[164]  2.0- 3.0 sec  82.7 MBytes   694 Mbits/sec
[164]  3.0- 4.0 sec  86.3 MBytes   724 Mbits/sec
[164]  4.0- 5.0 sec  87.1 MBytes   730 Mbits/sec
[164]  5.0- 6.0 sec  87.7 MBytes   735 Mbits/sec
[164]  6.0- 7.0 sec  90.0 MBytes   755 Mbits/sec
[164]  7.0- 8.0 sec  88.2 MBytes   740 Mbits/sec
[164]  8.0- 9.0 sec  90.0 MBytes   755 Mbits/sec
[164]  9.0-10.0 sec  89.5 MBytes   750 Mbits/sec
[164]  0.0-10.0 sec   805 MBytes   674 Mbits/sec
Done.

bin/iperf.exe -c 192.168.0.103 -P 1 -i 1 -p 5001 -w 1.0M -f m -t 10
------------------------------------------------------------
Client connecting to 192.168.0.103, TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
[164] local 192.168.0.101 port 52145 connected with 192.168.0.103 port 5001
[ ID] Interval       Transfer     Bandwidth
[164]  0.0- 1.0 sec  87.4 MBytes   733 Mbits/sec
[164]  1.0- 2.0 sec  89.7 MBytes   752 Mbits/sec
[164]  2.0- 3.0 sec  89.4 MBytes   750 Mbits/sec
[164]  3.0- 4.0 sec  90.0 MBytes   755 Mbits/sec
[164]  4.0- 5.0 sec  65.9 MBytes   553 Mbits/sec
[164]  5.0- 6.0 sec  13.2 MBytes   111 Mbits/sec
[164]  6.0- 7.0 sec  16.1 MBytes   135 Mbits/sec
[164]  7.0- 8.0 sec  17.2 MBytes   145 Mbits/sec
[164]  8.0- 9.0 sec  44.6 MBytes   374 Mbits/sec
[164]  9.0-10.0 sec  76.0 MBytes   638 Mbits/sec
[164]  0.0-10.0 sec   590 MBytes   494 Mbits/sec
Done.

Note: the MacBook Pro went to sleep during test 4 and so it had to be repeated. I don't believe the effect of this is statistically significant, however.

The average was: 795.6 Mbits/sec.

LEDE 17.01.2 (LEDE Reboot 17.01.2 r3435-65eec8bd5f / LuCI lede-17.01 branch (git-17.152.82987-7f6fc16)):

The first thing of note is the MacBook Pro in the same position coud only connect at 1170Mbps as opposed to the 1300Mbps on the stock TP-LINK firmware. The MacBook Pro wasn't moved and the router's antenna position nor physical position were changed, either. No other environmental changes were made.

The results:

bin/iperf.exe -c 192.168.1.102 -P 1 -i 1 -p 5001 -w 1.0M -f m -t 10
------------------------------------------------------------
Client connecting to 192.168.1.102, TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
[332] local 192.168.1.135 port 52695 connected with 192.168.1.102 port 5001
[ ID] Interval       Transfer     Bandwidth
[332]  0.0- 1.0 sec  68.7 MBytes   576 Mbits/sec
[332]  1.0- 2.0 sec  28.9 MBytes   242 Mbits/sec
[332]  2.0- 3.0 sec  12.2 MBytes   102 Mbits/sec
[332]  3.0- 4.0 sec  6.55 MBytes  55.0 Mbits/sec
[332]  4.0- 5.0 sec  12.1 MBytes   102 Mbits/sec
[332]  5.0- 6.0 sec  59.8 MBytes   502 Mbits/sec
[332]  6.0- 7.0 sec  70.3 MBytes   589 Mbits/sec
[332]  7.0- 8.0 sec  51.7 MBytes   434 Mbits/sec
[332]  8.0- 9.0 sec  56.1 MBytes   471 Mbits/sec
[332]  9.0-10.0 sec  67.9 MBytes   570 Mbits/sec
[332]  0.0-10.0 sec   434 MBytes   364 Mbits/sec
Done.

bin/iperf.exe -c 192.168.1.102 -P 1 -i 1 -p 5001 -w 1.0M -f m -t 10
------------------------------------------------------------
Client connecting to 192.168.1.102, TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
[332] local 192.168.1.135 port 52701 connected with 192.168.1.102 port 5001
[ ID] Interval       Transfer     Bandwidth
[332]  0.0- 1.0 sec  10.0 MBytes  84.3 Mbits/sec
[332]  1.0- 2.0 sec  52.3 MBytes   439 Mbits/sec
[332]  2.0- 3.0 sec  69.8 MBytes   585 Mbits/sec
[332]  3.0- 4.0 sec  66.9 MBytes   561 Mbits/sec
[332]  4.0- 5.0 sec  49.3 MBytes   414 Mbits/sec
[332]  5.0- 6.0 sec  66.9 MBytes   562 Mbits/sec
[332]  6.0- 7.0 sec  67.6 MBytes   567 Mbits/sec
[332]  7.0- 8.0 sec  28.4 MBytes   238 Mbits/sec
[332]  8.0- 9.0 sec  12.4 MBytes   104 Mbits/sec
[332]  9.0-10.0 sec  12.9 MBytes   108 Mbits/sec
[332]  0.0-10.2 sec   437 MBytes   357 Mbits/sec
Done.

bin/iperf.exe -c 192.168.1.102 -P 1 -i 1 -p 5001 -w 1.0M -f m -t 10
------------------------------------------------------------
Client connecting to 192.168.1.102, TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
[324] local 192.168.1.135 port 52709 connected with 192.168.1.102 port 5001
[ ID] Interval       Transfer     Bandwidth
[324]  0.0- 1.0 sec  52.6 MBytes   441 Mbits/sec
[324]  1.0- 2.0 sec  60.5 MBytes   507 Mbits/sec
[324]  2.0- 3.0 sec  63.0 MBytes   529 Mbits/sec
[324]  3.0- 4.0 sec  33.7 MBytes   282 Mbits/sec
[324]  4.0- 5.0 sec  16.0 MBytes   134 Mbits/sec
[324]  5.0- 6.0 sec  11.8 MBytes  98.8 Mbits/sec
[324]  6.0- 7.0 sec  15.8 MBytes   132 Mbits/sec
[324]  7.0- 8.0 sec  58.8 MBytes   493 Mbits/sec
[324]  8.0- 9.0 sec  69.2 MBytes   581 Mbits/sec
[324]  9.0-10.0 sec  66.4 MBytes   557 Mbits/sec
[324]  0.0-10.0 sec   448 MBytes   375 Mbits/sec
Done.

bin/iperf.exe -c 192.168.1.102 -P 1 -i 1 -p 5001 -w 1.0M -f m -t 10
------------------------------------------------------------
Client connecting to 192.168.1.102, TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
[324] local 192.168.1.135 port 52718 connected with 192.168.1.102 port 5001
[ ID] Interval       Transfer     Bandwidth
[324]  0.0- 1.0 sec  66.4 MBytes   557 Mbits/sec
[324]  1.0- 2.0 sec  48.6 MBytes   408 Mbits/sec
[324]  2.0- 3.0 sec  68.3 MBytes   573 Mbits/sec
[324]  3.0- 4.0 sec  45.6 MBytes   383 Mbits/sec
[324]  4.0- 5.0 sec  7.48 MBytes  62.7 Mbits/sec
[324]  5.0- 6.0 sec  10.6 MBytes  89.3 Mbits/sec
[324]  6.0- 7.0 sec  11.7 MBytes  98.4 Mbits/sec
[324]  7.0- 8.0 sec  42.2 MBytes   354 Mbits/sec
[324]  8.0- 9.0 sec  69.7 MBytes   585 Mbits/sec
[324]  9.0-10.0 sec  68.7 MBytes   576 Mbits/sec
[324]  0.0-10.0 sec   439 MBytes   368 Mbits/sec
Done.

bin/iperf.exe -c 192.168.1.102 -P 1 -i 1 -p 5001 -w 1.0M -f m -t 10
------------------------------------------------------------
Client connecting to 192.168.1.102, TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
[332] local 192.168.1.135 port 52725 connected with 192.168.1.102 port 5001
[ ID] Interval       Transfer     Bandwidth
[332]  0.0- 1.0 sec  31.3 MBytes   263 Mbits/sec
[332]  1.0- 2.0 sec  13.5 MBytes   113 Mbits/sec
[332]  2.0- 3.0 sec  13.6 MBytes   114 Mbits/sec
[332]  3.0- 4.0 sec  9.80 MBytes  82.2 Mbits/sec
[332]  4.0- 5.0 sec  54.3 MBytes   455 Mbits/sec
[332]  5.0- 6.0 sec  50.6 MBytes   425 Mbits/sec
[332]  6.0- 7.0 sec  0.01 MBytes  0.07 Mbits/sec
[332]  7.0- 8.0 sec  17.4 MBytes   146 Mbits/sec
[332]  8.0- 9.0 sec  56.9 MBytes   477 Mbits/sec
[332]  9.0-10.0 sec  60.1 MBytes   504 Mbits/sec
[332]  0.0-10.0 sec   307 MBytes   258 Mbits/sec
Done.

The average was: 344.5 Mbits/sec.

A huge difference is thus shown between the two firmware. The lower connection rate may have impacted the LEDE results slightly but I don't believe it can be responsible for over twice a difference in throughput.

I have researched this issue and I note others have commented on it previously on the OpenWRT forums. What I would like to know is the reason for these differences and whether there are plans to address it? I would be curious to hear from others with other router models to see if it impacts them too.

Anyone can comment on the current state of C7 performance vs OEM firmware?

Thanks to KRACK, I am back looking at firmware options. My concern, as it was when I first tried OpenWrt, has been the potential performance loss going with third party. I was using OpenWrt back when you had to manually install the 5Ghz driver. I switched back to OEM for maximum performance.

I use my wireless routers as access points. pfSense is my primary routing solution for my home network.

have you tried these images? https://github.com/infinitnet/lede-ar71xx-optimized-archer-c7-v2

I get better performance on my Archer C7 v2 with LEDE.

I recently discovered that the automatic power setting on wifi limits your bandwidth. Try manually setting the power. Increase it until you no longer see the bandwidth go up. On the EA8500, I found that to be 200 mW for 2.4 Ghz and 500 mW for 5 Ghz though I haven't finalized anything yet.

I am in the UK and can only set 100 mW for 2.4GHz and 100 mW for 5GHz, on the TP-LINK Archer C7. I have not noticed any difference in wireless performance with the automatic power setting turned on or off.

I do find the range to be quite poor on this router - it seems to vary which I find strange but perhaps this is a characteristic of WiFi?

I am using a similar router with QCA9880 + QCA9558, 3x3 mimo and am experiencing similar issue.
Using openwrt 18.06 I am only getting around 340 Mbps on a 2014 Macbook pro which is 3x3 mimo.