I'm seeing the same issue across multiple R7800's: on 2.4Ghz, very slow TX speed from router but RX speed is reasonable. I don't see the issue on an Archer C7 v4 at the same router location (swapping between them). The R7800's 5Ghz speed is fine. Stock firmware 22.03.2 r19803-9a599fee93, default config.
This is not a particularly revealing test with respect to the wifi performance as it is likely CPU limited. iPerf3 testing on the router itself means that the router must source/sink packets rapidly. But, the CPU in most embedded routers is actually not that powerful for this purpose. Instead, it is designed to route traffic (not generate/terminate it) at high speeds.
The best way to test your wifi speed is to connect a computer via Ethernet and run iPerf3 (server) on that. Then, on one or more wireless devices, run iPerf3 (client, and client in reverse mode) to measure the performance of wired-wireless data transfer. This will give you the best indication of peak performance over wifi on your device (based on any given configuration as well as the environmental variables). You can also try running iPerf3 between two wireless devices, but that may have other bottlenecks.
Ok... although depending on the architecture, the CPU may need to do other things when running the radio. Regardless, the best practice is to run iPerf on a general purpose computer.
If you're using the OpenWrt snapshot or stable releases,
They do not include hardware flow offloading.
You could try one of the community releases with NSS core functionality.
e.g. apccv or ACwifidude and so on...
Unable to comment since I have not used the default OpenWrt releases for a while re: Qualcomm Atheros IPQ8064 routers.
I use apccv releases for NSS cores.
I found the source of the problem - "Maximum transmit power" defaults to "driver default" - the driver uses the maximum (30 dBm). Based on a related post I found here, this can inhibit TX performance. If I change the setting to 22 dBm then the negotiated TX rate increases from 45 Mbits/s to 150 Mbit/s, and my 2.4Ghz <-> WAN performance (TX from router, RX client) increases from 15.69 Mbits/s to 62.31 Mbits/s. My iPerf3 performance between router and client increases from < 12 Mbits/s to 78 Mbits/s.
These commands temporarily force both CPU cores to run at maximum frequency. The changes will be lost on a reboot, or can be reverted by executing the commands again with "ondemand" instead of "performance". See the R7800 performance and Netgear R7800 exploration (IPQ8065, QCA9984) threads for more discussion about R7800 performance tuning and making such changes more permanent.