]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
[ath_rate_sample] Limit the tx schedules for A-MPDU ; don't take short retries
authorAdrian Chadd <adrian@FreeBSD.org>
Sat, 16 May 2020 05:07:45 +0000 (05:07 +0000)
committerAdrian Chadd <adrian@FreeBSD.org>
Sat, 16 May 2020 05:07:45 +0000 (05:07 +0000)
commit051ea90c43542d13e7cc634f0398d9b5481d3f92
tree84f2b00ea1cd253d4bbcc0e50dcbe7dcda7c3392
parent880ff10ba9d62f763375d9cad3a4e35599ca5a62
[ath_rate_sample] Limit the tx schedules for A-MPDU ; don't take short retries
into account and remove the requirement that the MCS rate is "higher" if we're
 considering a new rate.

Ok, another fun one.

* In order for reliable non-software retried higher MCS rates, the TX schedules
  (inconsistently!) use hard-coded lower rates at the end of the schedule.
  Now, hard-coded is a problem because (a) it means that aggregate formation
  is limited by the SLOWEST rate, so I never formed large AMDU frames for
  3 stream rates, and (b) if the AP disables lower rates as base rates, it
  complains about "unknown rix" every frame you transmit at that rate.

  So, for now just disable the third and fourth schedule entry for AMPDUs.
  Now I'm forming 32k and 64k aggregates for the higher density MCS rates
  much more reliably.

  It would be much nicer if the rate schedule stuff wasn't fixed but instead
  I'd just populate ath_rc_series[] when I fetch the rates.  This is all a
  holdover of ye olde pre-11n stuff and I really just need to nuke it.

  But for now, ye hack.

* The check for "is this MCS rate better" based on MCS itself is just garbage.
  It meant things like going MCS0->7 would be fine, and say 0->8->16 is fine,
  (as they're equivalent encoding but 1,2,3 spatial streams), BUT it meant
  going something like MCS7->11 would fail even though it's likely that
  MCS11 would just be better, both for EWMA/BER and throughput.

  So for now just use the average tx time.  The "right" way for this comparison
  would be to compare PHY bitrates rather than MCS / rate indexes, but I'm not
  yet there.  The bit rates ARE available in the PHY index, but honestly
  I have a lot of other cleaning up to here before I think about that.

* Don't include the RTS/CTS retry count (and thus time) into the average tx time
  caluation.  It just makes temporarily failures make the rate look bad by
  QUITE A LOT, as RTS/CTS exchanges are (a) long, and (b) mostly irrelevant
  to the actual rate being tried.  If we keep hitting RTS/CTS failures then
  there's something ELSE wrong on the channel, not our selected rate.
sys/dev/ath/ath_rate/amrr/amrr.c
sys/dev/ath/ath_rate/onoe/onoe.c
sys/dev/ath/ath_rate/sample/sample.c
sys/dev/ath/if_ath_tx.c
sys/dev/ath/if_athrate.h