[ath] modify cabq and per-node packet usage limits.
* limit cabq to 64 - in practice if this stays at ath_txbuf then all buffers can be tied up by a very busy broadcast domain (eg ARP storm, way too much MDNS/NETBIOS). It's been like this in the freebsd-wifi-build AP project for the longest time. * Now that I figured out the hilarity inherent in aggregate forming and AR9380 EDMA work, change the per-node to 64 frames by default. I'll do some more work to shorten the queue latency introduced when doing data so TCP isn't so terrible, but it's now no longer /always/ tens of milliseconds of extra latency when doing active iperf tests. Notes: The reason for the extra latency is partly tx/rx taskqueue handling and scheduling, and partly due to a lack of airtime/QoS awareness of per-node traffic. Ideally we'd have different limits/priorities on the QoS/TID levels per node so say, voice/video data got a better share of buffer allocations over best effort/bulk data, but we currently don't implement that. It's not /hard/ to do, I just need to do it. Tested: * AR9380 (STA), AR9580 (hostap) - both with the relevant changes. TCP is now at around 180mbit with rate control and RTS protection enabled. UDP stays at 355mbit at MCS23, no HT protection.
This commit is contained in:
parent
57af292d36
commit
5e2c0d2d47
@ -1028,12 +1028,16 @@ ath_attach(u_int16_t devid, struct ath_softc *sc)
|
||||
* otherwise) to be transmitted.
|
||||
*/
|
||||
sc->sc_txq_data_minfree = 10;
|
||||
|
||||
/*
|
||||
* Leave this as default to maintain legacy behaviour.
|
||||
* Shortening the cabq/mcastq may end up causing some
|
||||
* undesirable behaviour.
|
||||
* Shorten this to 64 packets, or 1/4 ath_txbuf, whichever
|
||||
* is smaller.
|
||||
*
|
||||
* Anything bigger can potentially see the cabq consume
|
||||
* almost all buffers, starving everything else, only to
|
||||
* see most fail to transmit in the given beacon interval.
|
||||
*/
|
||||
sc->sc_txq_mcastq_maxdepth = ath_txbuf;
|
||||
sc->sc_txq_mcastq_maxdepth = MIN(64, ath_txbuf / 4);
|
||||
|
||||
/*
|
||||
* How deep can the node software TX queue get whilst it's asleep.
|
||||
@ -1041,11 +1045,10 @@ ath_attach(u_int16_t devid, struct ath_softc *sc)
|
||||
sc->sc_txq_node_psq_maxdepth = 16;
|
||||
|
||||
/*
|
||||
* Default the maximum queue depth for a given node
|
||||
* to 1/4'th the TX buffers, or 64, whichever
|
||||
* is larger.
|
||||
* Default the maximum queue to to 1/4'th the TX buffers, or
|
||||
* 64, whichever is smaller.
|
||||
*/
|
||||
sc->sc_txq_node_maxdepth = MAX(64, ath_txbuf / 4);
|
||||
sc->sc_txq_node_maxdepth = MIN(64, ath_txbuf / 4);
|
||||
|
||||
/* Enable CABQ by default */
|
||||
sc->sc_cabq_enable = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user