How OpenWrt Vanquishes Bufferbloat

A few notes on your questions in the original post:

  • Cake first appeared in 2015, according to the commit log and copyright notices in the out-of-tree repo. It was upstreamed in 2018.
  • The driver can be queried for support through iw list - look for TXQS, AIRTIME_FAIRNESS and AQL in the "Supported extended features" list at the end of the output for a given phy device.
  • The AQL limits can be tuned through debugfs:
 cat /sys/kernel/debug/ieee80211/phy0/aql_txq_limit 
AC	AQL limit low	AQL limit high
VO	5000		12000
VI	5000		12000
BE	5000		12000
BK	5000		12000

The values are in microseconds and can be written to using a "x y z" format, where x is the AC number (0-3), and y and z are the low and high limits. The high limit is used as a per-station limit if the total outstanding airtime for the interface is below the aql_threshold (tuned by the file of that name in the same directory, default 24ms), and the low limit is used once the limit goes over. So basically, the first two stations queueing can get 12ms each, and after that, each station is capped at 5ms (or some other combination that adds up to 24ms total).

3 Likes