It helps to have the codel mailing list cc'd on codel discussions.
Adding this message to the cc.

One of these days we do have to write up - after finishing - cake's
code-likel implementation.


Dave Täht
I just invested five years of my life to making wifi better. And,
now... the FCC wants to make my work, illegal for people to install.
https://www.gofundme.com/savewifi


On Tue, Nov 3, 2015 at 11:22 AM, Jeff Weeks <jwe...@sandvine.com> wrote:
> The drop rate is affected by sojourn time, yes, but a 2x sojourn time goes 
> through the same incremental reduction of interval size, as does a sojourn 
> time of x.
>
> In investigating codel, I've setup various worst case scenarios, and I feel 
> like the algorithm could be made better by having its response time more 
> dependent upon how far away from the target latency it is.
>
> For example, consider a disabled interface, with a large (or even 
> conceptually infinite queue), that's attached to a fairly small shaper.
>
> The interface is then enabled, and immediately starts seeing 100Mbps, and 
> tries to shape it to 1Mbps.
>
> The queue will obviously build up quickly, and codel will notice this, and 
> enter the drop state.  But it will start at count = 1.
>
> If the interface is receiving 64b udp packets, then it'll be receiving 
> 100,000,000/512 == 195,312 packets per second, and only transmitting 1953 
> packets per second.
>
> The default target is 5ms, which is about 10 packets.  So of those 195,312 
> packets/second, we should ideally be dropping 195,312 - (1953 + 10) == 
> 192,349 packets/second.
>
> But in order to drop that many packets, 'count' needs to ramp up to the point 
> where the drop interval is consistently 5,198 ns.
>
> I believe that means 'count' has to reach some nearly impossibly high value 
> of (100ms/5198ns)^2 == 370,107,128
>
> I say nearly impossible, because it will take minutes (hours?) to get that 
> high (if my math is correct, it'll take over 17 seconds just to reach 7500).
>
> In the meantime, the queue *isn't* being effectively managed, as packets with 
> extremely high latencies will be transmitted for far too long.
>
> Of course, as I stated earlier, simply increasing count more quickly, based 
> on how far away we are from the target latency effectively invalidates the 
> optimization which most (all?) codel implementations use (namely the newton 
> step integer-only sqrt approximation) as, at some point, the approximation 
> starts *diverging* from the appropriate value.
>
> One alternative which I've been investigating is the possibility of skewing 
> the precalculated 1/sqrt(count) value.
>
> If this is kept as a 32-bit all decimal fixed point number, then performing 
> the multiplication by intentionally miss-shifting will result in doubling 
> sqrt(count):
>
> eg, take the following accurate calculation of next interval:
>
>     codel->next_interval_start_ticks = base_time + ((interval * 
> codel->one_over_sqrt_count) >> 32)
>
> And intentionally miss-shift by 1 bit:
>
>     codel->next_interval_start_ticks = base_time + ((interval * 
> codel->one_over_sqrt_count) >> 33)
>
> Will effectively have the interval reduce twice as fast.
>
> Alternatively, (and similarly to how CAKE halves the count while re-entering 
> the drop interval), count can periodically be doubled, if the current value 
> is seen to not be adequately affecting traffic, and the pre-calculated 
> 1/sqrt(count) can then be divided by sqrt(2) (i.e., do not rely on the newton 
> step approximation for this modification of count).
>
> Cheers,
> --Jeff
>
>
>
> ________________________________
> /dev/jeff_weeks.x2936
> Sandvine Incorporated
> ________________________________
> From: aqm [aqm-boun...@ietf.org] on behalf of Andrew Mcgregor 
> [andrewm...@google.com]
> Sent: Sunday, October 25, 2015 6:44 PM
> To: Dave Dolson
> Cc: Kathleen Nichols; Bob Briscoe; Dave Taht; Van Jacobson; AQM IETF list
> Subject: Re: [aqm] CoDel's control law that determines drop frequency
>
> CoDel does have the form of a controller; drop rate (not probability) is a 
> function of sojourn time (not queue size) and history, encoded in the state 
> variables.
>
> Now, I don't take it as proven that the particular form of the controller is 
> the best we could do, but making it a rate and based on sojourn time are 
> clear wins. Yes, you can use size as a proxy for sojourn time if your link 
> really has a constant bit rate, but not even ethernet is exactly CBR in 
> practice (and in some hardware situations, knowing the size is much more 
> expensive than measuring sojourn; the opposite can also apply).  Yes, you can 
> use probability as a proxy for rate if you are doing a hardware 
> implementation or otherwise doing the rate the way CoDel does is hard.
>
> PIE is closely related; the controller is the biggest difference, and it uses 
> both those proxies because it was aimed at a situation where there was 
> hardware support for one set of choices.
>
> On 23 October 2015 at 07:07, Dave Dolson 
> <ddol...@sandvine.com<mailto:ddol...@sandvine.com>> wrote:
> Catching up...
>
> Bob said:
>> I meant to say in my mail to Andrew that the rate at which the control
>> law increases the dropping frequency ought to depend on how far the
>> queue is from target, or even how quickly it is diverging from target.
>> I've always said that this control law should not be just a hard-coded
>> thing that has no dependency on how the queue is moving.
>
> In other words, make it a PID controller, not just a PI controller?
> (Or is it currently just "I" ?)
> With consideration of the derivative term (how quickly the queue
> size is moving away from the target), a faster deviation from target
> queue size would cause a faster response.
>
>
> I find it unfortunate that neither CODEL nor PIE algorithms are formulated as 
> a
> controller. It's difficult to reason about.
> (They *are* controllers, just not explained that way.)
> IMHO, an explanation should begin with a linear controller,
> with drop probability as a function of queue size,
> and then explanations of why non-linear modifications were necessary.
>
>
> -----Original Message-----
> From: aqm [mailto:aqm-boun...@ietf.org<mailto:aqm-boun...@ietf.org>] On 
> Behalf Of Bob Briscoe
> Sent: Wednesday, September 30, 2015 9:09 AM
> To: Dave Taht; Andrew Mcgregor
> Cc: Kathleen Nichols; AQM IETF list; Van Jacobson
> Subject: Re: [aqm] CoDel's control law that determines drop frequency
>
> Dave,
>
> It says the point at which cake enters drop state depends on how quickly
> the queue is growing.
> But I don't see anything on the page you referenced about a better
> curve. I looked under AQM and under other possibly relevant headings.
>
> I meant to say in my mail to Andrew that the rate at which the control
> law increases the dropping frequency ought to depend on how far the
> queue is from target, or even how quickly it is diverging from target.
> I've always said that this control law should not be just a hard-coded
> thing that has no dependency on how the queue is moving.
>
> Also below I've restated a couple of points I made back in 2013 when I
> first posted this.
>
> On 12/11/13 22:30, Bob Briscoe wrote:
>> 5/ My analysis also shows that the rate of increase in drop probablity
>> is inversely proportional to the link rate. I don't believe this is
>> desirable, as it will require tuning for the expected number of flows
>> on the link. However it is probably OK for variable rate links.
>>
>> 6/ The rate of increase of drop probability is also inversely
>> proportional to the square of 'interval'. I suggest a new constant is
>> defined for the control law, rather than relating the control law to
>> interval in this way. Otherwise, when anyone tunes interval, they will
>> get undesirable changes to the control law (e.g. reducing interval 10x
>> [to 10ms] would make the control law 100x more sluggish).
>
> This last point is particularly important. If the control law is still
> to be hard-coded, it should relate to another variable RTT_ave, not
> interval. TO decide when to enter dropping state, interval should be set
> to the likely worst-case RTT (in the low hundreds of ms). But, If
> hard-coded, the dynamics of the control law will be correct most often
> if it depends on the /most likely/ RTT, which these days with CDNs is
> perhaps 10-25ms (depending on population density in a country).
>
> There's another reason for having two separate variables, not just
> 'interval' for both. I've said the following before somewhere as well:
> For ECN marking, 'interval' can be set much lower (or even zero) because
> being on a hair-trigger with ECN marks doesn't matter, whereas it does
> for drops.{Note 1} Then CoDel will signal ECN without the sluggish delay
> it has to have before it starts dropping. However, once it has entered
> dropping state, the ECN control law still needs to be based on the same
> RTT_ave as for drop, because the control law is trying to mimic the
> dynamics of the congestion control, which RFC3168 says should be the
> same for ECN as for drop.{Note 2}
>
>
> Bob
>
> {Note 1}: The faster dynamics won't affect the long-term stable rate
> between an ECN and a non-ECN flow, because by definition long-term
> stable means the dynamics have settled.
> {Note 2}: As suggested in draft-briscoe-aqm-dualq-coupled-00, if the
> congestion control were radically different, the packets would probably
> need another identifier to distinguish them from 'classic' ECN.
>
> On 30/09/15 10:00, Dave Taht wrote:
>> On Wed, Sep 30, 2015 at 1:50 AM, Bob Briscoe 
>> <i...@bobbriscoe.net<mailto:i...@bobbriscoe.net>> wrote:
>>> Andrew,
>>>
>>> I am also not so interested in an AQM dealing directly with unresponsive
>>> traffic - I prefer to keep policing and AQM as separately deployable
>>> functions, because AQM should be policy-neutral, whereas policing inherently
>>> involves policy.
>>>
>>> My concern was merely that CoDel's linear increase in drop probability can
>>> take a long time to reach where it intends to get to. I would have thought
>>> some form of exponential increase, or at least super-linear, would have been
>>> more responsive to changing traffic conditions. I.e., rather than have to
>>> answer the question "how quickly should drop probability increase?", make it
>>> increase increasingly quickly.
>>>
>>> Early on, Rong Pan showed that it takes CoDel ages to bring high load under
>>> control. I think this linear increase is the reason.
>> cake uses a better curve for codel, but we still need to do more
>> testing in the lab.
>>
>> http://www.bufferbloat.net/projects/codel/wiki/CakeTechnical
>>
>>> Bob
>>>
>>>
>>>
>>> On 30/09/15 01:42, Andrew Mcgregor wrote:
>>>
>>> Hmm, that's really interesting.
>>>
>>> Most interesting is that my understanding is that the control law was
>>> intended to deal with aggregates of mostly TCP-like traffic, and that an
>>> overload of unresponsive traffic wasn't much of a goal; this seems like
>>> vaguely reasonable behaviour, I suppose, given that pathological situation.
>>>
>>> But I don't have a way to derive the control law from first principles at
>>> this time (I haven't been working on that for a long time now).
>>>
>>> On 25 September 2015 at 06:27, Bob Briscoe 
>>> <i...@bobbriscoe.net<mailto:i...@bobbriscoe.net>> wrote:
>>>> Toke,
>>>>
>>>> Having originally whinged that no-one ever responded to my original 2013
>>>> posting, now it's my turn to be embarrassed for having missed your
>>>> interesting response for over 3 months.
>>>>
>>>> Cool that the analysis proves correct in practice - always nice.
>>>>
>>>> The question is still open whether this was the intention, and if so why
>>>> this particular control law was intended.
>>>> I would rather we started from a statement of what the control law ought
>>>> to do, then derive it.
>>>>
>>>> Andrew McGregor said he would have a go at this question some time ago...
>>>> Andrew?
>>>>
>>>>
>>>> Bob
>>>>
>>>>
>>>>
>>>> On 07/06/15 20:27, Toke Høiland-Jørgensen wrote:
>>>>
>>>> Hi Bob
>>>>
>>>> Apologies for reviving this ancient thread; been meaning to get around
>>>> to it sooner, but well... better late than never I suppose.
>>>>
>>>> (Web link to your original mail, in case Message-ID referencing breaks:
>>>> https://www.ietf.org/mail-archive/web/aqm/current/msg00376.html ).
>>>>
>>>> Having recently had a need to understand CoDel's behaviour in more
>>>> detail, your analysis popped out of wherever it's been hiding in the
>>>> back of my mind and presented itself as maybe a good place to start. :)
>>>>
>>>> So anyhow, I'm going to skip the initial assertions in your email and
>>>> focus on the analysis:
>>>>
>>>> Here's my working (pls check it - I may have made mistakes)
>>>> _________________
>>>> For brevity, I'll define some briefer variable names:
>>>>          interval =      I [s]
>>>>          next_drop =     D [s]
>>>>          packet-rate =   R [pkt/s]
>>>>          count =         n [pkt]
>>>>
>>>> >From the CoDel control law code:
>>>>          D(n) = I / sqrt(n)
>>>> And the instantaneous drop probability is:
>>>>          p(n) = 1/( R * D(n) )
>>>>
>>>> Then the slope of the rise in drop probability with time is:
>>>>          Delta p / Delta t       = [p(n+1) - p(n)] / D(n)
>>>>                                  = [1/D(n+1) - 1/D(n)] / [ R * D(n) ]
>>>>                                  = sqrt(n) * [sqrt(n+1) - sqrt(n)] /
>>>> [R*I*I]
>>>>                                  = [ sqrt(n(n+1)) - n ] / R*I^2
>>>>
>>>> I couldn't find anything wrong with the derivation. I'm not entirely
>>>> sure that I think it makes sense to speak about an "instantaneous drop
>>>> probability" for an algorithm that is not probabilistic in nature.
>>>> However, interpreting p(n) as "the fraction of packets dropped over the
>>>> interval from D(n) to D(n+1)" makes sense, I guess, and for this
>>>> analysis that works.
>>>>
>>>> At count = 1, the numerator starts at sqrt(2)-1 = 0.414.
>>>> Amd as n increases, it rapidly tends to 1/2.
>>>>
>>>> So CoDel's rate of increase of drop probability with time is nearly
>>>> constant (it
>>>> is always between 0.414 and 0.5) and it rapidly approaches 0.5 after a few
>>>> drops, tending towards:
>>>>          dp/dt = 1/(2*R*I^2)
>>>>
>>>> This constant increase clearly has very little to do with the square-root
>>>> law of
>>>> TCP Reno.
>>>>
>>>> In the above formula, drop probability increases inversely proportional to
>>>> the
>>>> packet rate. For instance, with I = 100ms and 1500B packets
>>>> at 10Mb/s =>    R = 833 pkt/s =>        dp/dt = 6.0% /s
>>>> at 100Mb/s =>   R = 8333 pkt/s =>       dp/dt = 0.6% /s
>>>>
>>>> I also tried to test this. I configured CoDel (on a Linux 4.0 box) on
>>>> 1Mbps, 2Mbps and 10Mbps links with interval settings of 1 second and
>>>> 500ms, and a total packet limit of 100k packets. This was to make it
>>>> deliberately slower to react (so the change in drop probability is more
>>>> visible), and to make sure no packets are dropped from queue overflow.
>>>>
>>>> I then sent an unresponsive UDP stream over the link at 110% of the link
>>>> capacity (as passed to Iperf, so approximately), and collected the
>>>> output of `tc -s qdisc` every 0.2 seconds.
>>>>
>>>> The attached plot is of 'pkts dropped / (pkts sent + pkts dropped)' in a
>>>> 2-second sliding window over the duration of the test (the plot is also
>>>> available here:
>>>> https://kau.toke.dk/ietf/codel-drop-rate/codel-drop-rate.svg ).
>>>>
>>>> I've included linear trend lines from the initial time to the point of
>>>> maximum drop probability, and as is apparent from the plot, got quite a
>>>> good fit (r>0.99 for all six data sets). The legend includes the slopes
>>>> of the linear fits for each of the data sets, which are not too far from
>>>> what your analysis predicts (and I'm guessing the difference can be
>>>> attributed to the difference in exact packet rates, but I haven't
>>>> checked).
>>>>
>>>> The Flent data files with the qdisc stats over time (readable by the
>>>> newest git version of Flent), as well as the Python script I used to
>>>> create the graph are available here:
>>>> https://kau.toke.dk/ietf/codel-drop-rate/
>>>>
>>>> So, in short: It seems that CoDel's "drop rate" does increase linearly
>>>> in the presence of a persistent queue, and that the rate of increase
>>>> depends on both the interval and the link rate.
>>>>
>>>> Now, I'll refrain from commenting on whether or not this is "bad", or
>>>> indeed if it is contrary to design. It was surprising to me at least, so
>>>> I thought I'd share my findings, in the hope that someone would either
>>>> find them useful or tell me how they're wrong (or both!). :)
>>>>
>>>> -Toke
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> aqm mailing list
>>>> a...@ietf.org<mailto:a...@ietf.org>
>>>> https://www.ietf.org/mailman/listinfo/aqm
>>>>
>>>>
>>>> --
>>>> ________________________________________________________________
>>>> Bob Briscoe                               http://bobbriscoe.net/
>>>>
>>>>
>>>> _______________________________________________
>>>> aqm mailing list
>>>> a...@ietf.org<mailto:a...@ietf.org>
>>>> https://www.ietf.org/mailman/listinfo/aqm
>>>>
>>>
>>>
>>> --
>>> Andrew McGregor | SRE | andrewm...@google.com<mailto:andrewm...@google.com> 
>>> | +61 4 1071 2221<tel:%2B61%204%201071%202221>
>>>
>>>
>>> --
>>> ________________________________________________________________
>>> Bob Briscoe                               http://bobbriscoe.net/
>>>
>>>
>>> _______________________________________________
>>> aqm mailing list
>>> a...@ietf.org<mailto:a...@ietf.org>
>>> https://www.ietf.org/mailman/listinfo/aqm
>>>
>>
>>
>
> --
> ________________________________________________________________
> Bob Briscoe                               http://bobbriscoe.net/
>
> _______________________________________________
> aqm mailing list
> a...@ietf.org<mailto:a...@ietf.org>
> https://www.ietf.org/mailman/listinfo/aqm
>
>
>
> --
> Andrew McGregor | SRE | andrewm...@google.com<mailto:andrewm...@google.com> | 
> +61 4 1071 2221
_______________________________________________
Codel mailing list
Codel@lists.bufferbloat.net
https://lists.bufferbloat.net/listinfo/codel

Reply via email to