I have a Linksys WRT1900ACS and it's running LEDE Reboot 17.01.2 r3435-65eec8bd5f / LuCI lede-17.01 branch (git-17.152.82987-7f6fc16). The setup is, there is A that's connected to the router wired (1Gbps). And there is B that's connected to the router wirelessly (1300Mbps 5Ghz). The throughput (running dd | nc) between A and router is somewhere 40 MBps, and the throughput between B and router is somewhere 40 MBps as well. But the throughput between A and B is only 4 MBps, which is way too slow and problematic for me.
My guess is that the software bridge is the bottleneck. But when I open up top, the irqs take less than 1% of the CPU.
I wonder if anyone has any insight and can help me figure out more or solve this problem.
Thanks for the response. What am I specifically looking at? Currently A and B are in the same subnet (br-lan) so probably it is not governed by iptables?
I just tried splitting the bridge and creating two subnets for wireless and wired. This means now A and B is not layer-2-switched but layer-3-routed. But I still observe the same issue: slow performance between A and B.
Thanks for the advice. After testing with iperf3, I found a strangely asymmetric bandwidth behavior. I have three hosts (A, B, and router). Among all 6 (src, dst) pairs, only B->A and Router -> B is very slow. Everything else has normal speed.
One weird thing, while running Router->B, iperf3 reports cwnd also being ~32KB and not growing. (I couldn't get it to show cwnd for B->Router). But Retr is almost always 0.
Looks like by running iperf3 with -P flag (running multiple threads in parallel), I could get the expected performance. And in the case of Router -> B, even running with -P 2 will get me full speed and a growing cwnd. Now I wonder why cwnd is not growing in single threaded case.