On 02/16/2011 05:49 PM, John W. Linville wrote:
This is an implementation of the eBDP algorithm as documented in Section IV of "Buffer Sizing for 802.11 Based Networks" by Tianji Li, et al. http://www.hamilton.ie/tianji_li/buffersizing.pdf This implementation timestamps an skb before handing it to the hardware driver, then computes the service time when the transmit status is reported back from the driver. An exponentially weighted moving average of per packet service times is used to restrict queueing delays in hopes of achieving a target packet transmission latency. Signed-off-by: John W. Linville<linville@xxxxxxxxxxxxx> --- This is preliminary, but it seems to put some limits on latencies for me. I haven't even really done much testing, so YMMV... I'm sure this isn't ideal. This should be combined with the ALT algorithm to yield the A* algorithm. There are parameters that probably should be tunable (or at least better researched). This may not be ideal for 802.11n -- it may even be detrimental to it. Still, it is an attempt at addressing buffer bloat. Plus, it should pertain to all mac80211-based drivers. So, feel free to test it, suggest different parameters, report real numbers, post patches, etc... :-)
+ /* test for queue admission qualifications */ + tserv_ns_avg = ewma_read(&sdata->tserv_ns_avg); + /* constants 2 msec and offset 5 should be tunable? */ + max_enqueued = 2 * NSEC_PER_MSEC / tserv_ns_avg + 5; + if (atomic_read(&sdata->enqueued)> max_enqueued) { + /* silently drop */ + dev_kfree_skb(skb); + return IEEE80211_TX_OK; + }
We should have some visible stat to increment when you drop on xmit, tx-fifo error or similar? Thanks, Ben -- Ben Greear <greearb@xxxxxxxxxxxxxxx> Candela Technologies Inc http://www.candelatech.com -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html