Bob,

Sorry for the late reply. I have been traveling. Please see inlineŠ

Rong

On 3/23/17, 5:01 PM, "aqm on behalf of Bob Briscoe" <aqm-boun...@ietf.org
on behalf of i...@bobbriscoe.net> wrote:

>Rong, Preethi, Greg, Fred, and others involved in PIE,
>
>You may recall that when we wrote PI2 we didn't include any of PIE's
>heuristics. Mostly because PI2 solved the issues they addressed
>intrinsically. But we left some until we had checked their benefit,
>which is what I'm doing now...
>
>My first question is about this heuristic in PIE:
>
>          //Safeguard PIE to be work conserving
>          if ( (PIE->qdelay_old_ < QDELAY_REF/2 && PIE->drop_prob_ < 0.2)
>                || (queue_.byte_length() <= 2 * MEAN_PKTSIZE) ) {
>               return ENQUE;
>          }
>
>If it tests true, this block doesn't stop the calculation of drop_prob_
>evolving, but it disables it being able to lead to any random packet drop.
>
>I can understand why you want to disable packet drop when the queue is
>no more than 2 packets.
>My question is about the first half of the logical OR. The drop_prob_ <
>20% test will be true under normal non-overloaded conditions. So I have
>just realized that the qdelay_old_ < QDELAY_REF/2 test will turn off
>random drop very often. I would expect this to radically impact the
>behaviour of PIE. It seems to be overriding the PI controller as if you
>are thinking "actually we don't really trust the PI controller to leave
>it to do its thing, so we've overridden it a lot of the time." For
>instance, whenever a single long-running TCP flow with RTT about the
>same as the target delay is saw-toothing, this test will disable random
>drop completely during the lower half of every saw-tooth in the queue.
>Maybe that's OK, but...
>
>Without this test, the PI controller should reduce drop probability as
>the queue sawtooths down anyway. If another flow causes the queue to
>rise rapidly while it is under half the target, the PI controller is
>designed to detect such an increase and translate it into drop. But this
>heuristic suppresses any drop until the queue has exceeded half the
>target.
>
>So my questions are:
>
>Q1. What were the reasons for introducing such a frequent suppression of
>the PI algorithm (the RFC just says what this code does, not why)?


To be work conserving and avoid any unnecessary drops are the main reasons
behind it. 
Cisco had a not so successful algorithm before that is not work
conserving. So we are
extra cautious about being work conserving...


>
>Q2. Why use qdelay_old_ in the test? This seems to drive suppression of
>drop using stale state.

qdelay_old_ is the latency state currently stored. This is for
implementation
Considerations as we don¹t want to calculate qdelay_ on per packet basis.

>
>Q3. Having said that it looks like this heuristic will significantly
>alter PIE's behaviour, in tests under a very wide range of traffic
>conditions, link rates, mixed RTTs, traffic models etc, we have found
>that removing the heuristics makes no measurable difference to PIE's
>performance. So if you added this heuristic for a specific scenario,
>please describe it, so we can test for it.

Again, to be work conserving and avoid drops are our goal. I don¹t
think it would be hurtful to add those safeguards.


>
>
>Cheers
>
>
>Bob
>
>
>
>
>-- 
>________________________________________________________________
>Bob Briscoehttp://bobbriscoe.net/
>
>_______________________________________________
>aqm mailing list
>aqm@ietf.org
>https://www.ietf.org/mailman/listinfo/aqm

_______________________________________________
aqm mailing list
aqm@ietf.org
https://www.ietf.org/mailman/listinfo/aqm

Reply via email to