Been chasing this one for over a week and I've hit the "ask the internet before I do something rash to a perfectly good AP" stage.
Setup is four MikroTik APs, two hAP ax S and two wAP ax, all on 7.23.2, wifiwave2, one of them running CAPsMAN with local forwarding, everything bridged onto a flat network. A FRITZ!Box does the routing and NAT. Nothing exotic.
The problem: any WiFi client pulling a download off the internet tops out around 150Mbit. Doesn't matter which client (tested a Linux laptop and a Galaxy phone, both land in the same 110-180 range), doesn't matter which AP or whether it's the MediaTek or the Qualcomm radio. Same story everywhere.
What makes it weird is it's ONLY WiFi + internet + download:
WiFi -> internet download ~150 Mbit
WiFi -> internet upload ~400 Mbit
WiFi -> LAN host (iperf3) 500 Mbit
wired -> internet 900 Mbit
So the air is clearly fine (500 to a local box), and the router and WAN are fine (900 over the wire through the same FRITZ and the same NAT). It's specifically wireless plus a high-RTT internet path pulling a download.
I ran a pile of tests and the one that cracked it open was this: I forced the client's TCP ACKs out over its ethernet port while the actual download data kept coming over WiFi. Same server, same minute. It jumped from 150 to 540. The only thing that moved off the air was the little return stream of ACKs. I checked the interface counters and all the actual payload still crossed the radio, only about 150k tiny ACK packets went to the wire, and that alone was worth 3.5x.
My read is it's an airtime thing. Half duplex, so every time the client grabs the medium to send its ACKs, that's airtime the AP isn't using to push the download down. Barely matters at 2ms LAN RTT because there are hardly any ACKs in flight, but at 15ms internet RTT the return stream is constant and it's stealing a big chunk of downlink airtime.
Stuff I've already ruled out, so nobody has to retype it:
- not the receive window (it autotunes to 3-5MB during the slow transfer, and forcing 32MB rmem changed nothing)
- not loss or retransmits (the slow internet runs have basically zero retransmits, while the fast 500Mbit LAN runs have thousands, so if anything it's backwards)
- not client bufferbloat (wlan0 is noqueue, mac80211 already runs fq_codel+AQL, and a ping from the client to the AP doesn't inflate at all under a saturating download. cake with ack-filter did nothing)
- not channel/width/DFS, not CPU (per-core stayed under 66% during the stall and was actually lower at 350Mbit on a LAN transfer), not the switch, not queue type (SFQ vs fq-codel identical), not CAPsMAN (a guy on the MikroTik forum reproduces it on a standalone hAP ax with no CAPsMAN at all), not congestion control (bbr vs cubic same)
UDP one direction over the same hop does 250-370Mbit no trouble, which again says the air carries way more than 150 the moment you take ACKs and RTT out of it.
So the actual question: is there anything in wifiwave2 that touches uplink airtime scheduling, TXOP, MU-EDCA, trigger frames / UL-OFDMA, anything that would let the AP hand the client airtime for its ACK stream more efficiently? I've been through /interface/wifi pretty thoroughly and can't find a knob for it. Or is this just where the driver is right now and I should stop looking and live with it?
I've got a support ticket open with MikroTik but figured I'd ask here too, redditors bailed me out before and you lot are usually quicker than the queue. Happy to post any config or test output if it helps.