I'm running an GL Inet AR300M with OpenWrt 21.02rc1 which uses ath9k driver.
I'm also experiencing the same symptom where the wifi dies or slow to a crawl with heavy traffic.
I ran iperf over wifi which causes it to crash within 1-3hrs. I have tried to diagnose the problem and have found a workaround where it stops the 2.4GHz wifi crashing without a wifi down/wifi commands.
For some reason, doing a quick scan stops the wifi dying and/or also recovers it should it dies. Your clients will stay connected.
You will need to add to /etc/rc.local,
while sleep 300; do iw dev $(iwinfo|grep -m 1 -B 2 'Master.*2\.4'|grep ESSID|awk '{print $1}') scan trigger freq 2447 flush >/dev/null 2>&1; done &
I have also monitored the wifi event without the workaround
iw event -f -t
and notice when things goes bad you get event number 64,84
64 = notify_cqm
84 = probe_client
1621413328.127835: wlan1 (phy #0): unknown event 60
1621413328.143278: wlan1 (phy #0): unknown event 60
1621413388.122103: wlan1 (phy #0): unknown event 60
1621413388.140276: wlan1 (phy #0): unknown event 60
1621413448.118700: wlan1 (phy #0): unknown event 60
1621413448.137628: wlan1 (phy #0): unknown event 60
1621413508.129351: wlan1 (phy #0): unknown event 60
1621413508.147463: wlan1 (phy #0): unknown event 60
1621413568.114870: wlan1 (phy #0): unknown event 60
1621413568.139285: wlan1 (phy #0): unknown event 60
1621413628.174945: wlan1 (phy #0): unknown event 60
1621413628.182307: wlan1 (phy #0): unknown event 60
1621413688.166942: wlan1 (phy #0): unknown event 60
1621413688.396813: wlan1 (phy #0): unknown event 60
1621413740.243602: wlan0 (phy #0): unknown event 64
1621413749.670027: wlan0 (phy #0): unknown event 64
1621413755.386236: wlan0 (phy #0): unknown event 64
1621413998.245463: wlan1 (phy #0): unknown event 84
1621414001.235986: wlan1 (phy #0): unknown event 60
1621414002.233819: wlan1: del station xxxxxxxxx
1621414002.234499: wlan1 (phy #0): unknown event 60
1621414039.392124: wlan0 (phy #0): unknown event 84
1621414039.845343: wlan1: del station xxxxxxxxxxx
1621414039.845921: wlan1 (phy #0): unknown event 84
1621414039.846183: wlan1 (phy #0): unknown event 60
1621414039.846339: wlan1 (phy #0): unknown event 60
1621414040.113765: wlan1: del station xxxxxxxxxxxxx
1621414040.114644: wlan1 (phy #0): unknown event 84
1621414040.114929: wlan1 (phy #0): unknown event 60
1621414040.115079: wlan1 (phy #0): unknown event 60
1621414040.437906: wlan1: del station xxxxxxxxxxxxxxx
1621414040.438638: wlan1 (phy #0): unknown event 84
1621414040.438917: wlan1 (phy #0): unknown event 60
1621414040.439070: wlan1 (phy #0): unknown event 60
1621414042.378414: wlan0 (phy #0): unknown event 60
1621414043.379161: wlan0: del station xxxxxxxxxxxxxxxx
1621414043.379591: wlan0 (phy #0): unknown event 60
Maybe a trigger scan can be implemented based on the event instead time period if it works.