Poor Wi-Fi performance, Up 3x faster than Down

I've build x86_64 Dumb AP with LEDE under KVM, it works fine, but performance it much lower that I was expecting.
Download speed is just around 10Mbps and upload is around 31Mbps (both with 100Mpbs Internet connection and with other local machine using iperf3).
My client device is Nexus 6P, I'm pretty sure it should be able to do more than this.

Here is network configuration:
root@LEDE:~# cat /etc/config/network

config interface 'loopback'
	option ifname 'lo'
	option proto 'static'
	option ipaddr ''
	option netmask ''

config globals 'globals'
	option ula_prefix 'fda5:1a38:d01d::/48'

config interface 'lan'
	option type 'bridge'
	option proto 'dhcp'
	option ifname 'eth0'

root@LEDE:~# cat /etc/config/wireless 

config wifi-device 'radio0'
	option type 'mac80211'
	option path 'pci0000:00/0000:00:04.7/usb1/1-2/1-2:1.0'
	option htmode 'HT40'
	option country 'UA'
	option txpower '20'
	option hwmode '11a'
	option channel '161'

config wifi-iface 'default_radio0'
	option device 'radio0'
	option network 'lan'
	option mode 'ap'
	option encryption 'psk2+ccmp'
	option wmm '0'
	option ssid '***'
	option hidden '1'
	option key '***'

Wireless adapter is based on RT3572, which theoretically should support up to 300Mbps, but definitely higher than miserable 30Mbps.

Signal strength is excellent, distance from 20cm to 5m doesn't make any substantial difference.
I've also tried 2.4GHz, results are slightly lower, but nothing major.

What am I missing here, how can I improve performance at least to 100Mpbs?

Can you try with 1 to see if it does any good?

I've set wmm to 0 because with 1 download was 2 times slower than currently. I've found that wmm set to 0 can improve performance in some other thread and it really did, but not to the extent I expect.

It looks like the speed is limited to 54.0 Mbit/s, 20MHz despite configured to 300.0 Mbit/s, 40MHz

That's strange because, correct me if I'm wrong, when you turn that off, you basically turn off Wireless N and probably fall to only up to Wireless G speed. From the Wiki:

wmm (default to 1): Enables WMM (802.11e) support. Required for 802.11n support

Max Theoretical Throughput for Wireless-G: 54 Mbps...

I've read that too and I think you're right, it was limited to 54Mbps.
However, I've just enabled WMM and got 7Mbps Up and 24Mbps Down. Clearly not faster. Connection speed was faster though.

Maybe try a full reset of wireless (backup settings before):


Are you using a USB 1.x ?

I've reset config, no luck in even reaching 30Mbps with WMM disabled.
USB 1.1 is limited to 12Mbps, since I was getting 30Mbps it should be full 2.0, will try to passthrough flash drive to confirm speeds.

Switched to USB 3.0 in KVM and got a slight bump with WMM on to 14Mbps Up and 30Mbps Down. Looks like KVM's USB passthrough performance is a limiting factor here.

Are you able to install LEDE as bare-metal instead of a VM on your rig?

I know that must be overkill :yum:

The other VM is pfSense, which does all of the heavy work and LEDE just bridges Wi-Fi to its network. Technically I could have just LEDE on bare metal, but it is not what I want.

Same story with my router. https://wiki.openwrt.org/toh/arc/freestation It has two radio: rt3050, which gives the rate of 40+ Mbps (this is the limit of my tablet) and usb adapter based on the rt3572, which gives the speed 12-13 MB/s. also plugged the usb adapter based on rt3070 - same result. If I allow traffic via the second ethernet speed is 80 Mbps .
root@LEDE:~# cat /sys/kernel/debug/usb/devices
T: Bus=01 Lev=02 Prnt=02 Port=02 Cnt=01 Dev#= 3 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=148f ProdID=3572 Rev= 1.01
S: Manufacturer=Ralink
S: Product=802.11 n WLAN