[Cerowrt-devel] [Bloat] fq_codel is two years old
michawe at ifi.uio.no
Fri May 16 05:38:36 EDT 2014
I completely agree that this service differentiation was wrong from the beginning. The idea of using bits to implement a trade-off that doesn't involve prioritization between users is old (*), and has always been the right approach in my opinion.
At least one proposal in this direction is currently being made in the IETF, and I definitely think that this is the right way to go: http://tools.ietf.org/html/draft-lai-tsvwg-normalizer-02
(*) - the oldest example I know of is the Alternative Best Effort Service http://infoscience.epfl.ch/record/223 , slightly newer we have e.g.:
On 16. mai 2014, at 00:53, Jonathan Morton <chromatix99 at gmail.com> wrote:
> There is, I think, one good way to make Diffserv actually work. It does require several steps in tandem.
> Step one is to accept and admit that differential pricing based on scarcity economics does not work on the internet. That's going to be tough to swallow for the big commercial players.
> Step two is to define service levels in such a way that asking for a bonus in one category inherently requires taking a deficit in some other category. This permits trusting the Diffserv field, wherever it happens to come from.
> That part is where the old TOS flags went wrong, because they tried to define mutually exclusive characteristics of traffic orthogonally. It was possible for traffic to request service that was simultaneously higher bandwidth, higher reliability, lower latency, *and* cheaper than service without any flags set. This was obviously nonsensical.
> My suggested definition is a straight trade-off of priority for bandwidth. If you want maximum bandwidth, you're going to have to put up with lower priority relative to traffic which has effectively requested low latency, which in turn will find itself throttled to some fraction of the available bandwidth in return for that priority. It forces whoever is setting the flags to make a genuine engineering trade-off, and happily it can trivially be made compatible with the legacy Precedence interpretation of the Diffserv field.
> Codepoint 000000, naturally, corresponds to full bandwidth, minimum priority traffic, and is the default.
> To implement it, we're going to need a throttled priority queue. This should be straightforward - a set of 64 TBFs with the special properties that higher priority buckets refill more slowly, and that spending from a bucket also spends the same amount from all lower-priority buckets. Then at dequeue, take a packet from the highest priority queue with a positive bucket and a waiting packet, then refill each bucket with the appropriate fraction of the dequeued packet size. (Implementation detail: what to do if no such packet exists; also, what fraction to use for each bucket.) Naturally, each TBF can and should support a child qdisc such as fq_codel.
> - Jonathan Morton
> Bloat mailing list
> Bloat at lists.bufferbloat.net
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Cerowrt-devel