>From my perspective, the way to address this is to go back to first principles.

Van/Sally's congestion control algorithms, both the loss sensitive ones and 
ECN, depend heavily on Jain's work in the 1980's, his patent dated 1994, and 
the Frame Relay and CLNS work on FECN and "Congestion Experienced". Jain worked 
from a basic concept, that of a "knee" and a "cliff":

In concept:

      A |
     g| |     "capacity" or "bottleneck bandwidth"
     o| |- - - - - - - - - - - - - - - - - - - - -
     o  |            .'        \
     d  |          .' knee      \ cliff
     p  |        .'              \
     u  |      .'                 \
     t  |    .'                    \
        |  .'                       \
        |.'                          \
        +-----------------------------------------
                window -->

More likely reality:
        |
        |     "capacity" or "bottleneck bandwidth"
     g  |- - - - - - - - - - - - - - - - - - - - -
     o  |              __..,--=
     o  |           _,'        `.
     d  |        _,' |<-->|   |<-->|,
     p  |      ,'     knee     cliff \
     u  |    ,'                       \
     t  |  ,'                          `.._
        | /                                `'-----'
        +`-----------------------------------------
                window  -->

In short, the "knee" corresponds with the least window that maximizes goodput, 
and the cliff corresponds with the largest window value that maximizes goodput 
*plus*one* - the least window that results in a reduction of goodput. In real 
practice, it's more approximate than the theory might suggest, but the concept 
measurably works.

The question is how you measure whether you have reached it. Van's question of 
mean queue depth, from my perspective, is a good approximation but misses the 
point. You can think about the knee in another way; if it is least window that 
maximizes goodput, it is a point at which increasing your window is unlikely to 
increase your goodput. From the network's perspective, that is the point at 
which the queue always has something in it. There are lots of interesting ways 
to measure and state that, but it's what it comes down to. There is no more 
unused bandwidth at the bottleneck that adding another packet to the mix will 
take advantage of. At that point, it's a zero sum game: if one session manages 
to increase its share of the available capacity, some other session or set of 
sessions has to slow down.

>From that perspective, one could argue that the simplest approach is to note 
>the wall-clock time whenever a class or queue's depth falls below some 
>threshold. If the class or queue goes longer than <mumble> without doing that, 
>flagging an ECN CE or dropping a packet is probably in order. The thing is - 
>you want <mumble> to be variable, so that your mark/drop rate can track a 
>reasonable number. If you do that, the queue will remain somewhere in the 
>neighborhood of the knee, and all of its sessions will as well. The question 
>isn't "what is the magic mean queue depth for min-threshold to be set to"; 
>it's "what mark/drop rate is sufficient to keep the queue somewhat shallow 
>most of the time".  
_______________________________________________
Bloat mailing list
[email protected]
https://lists.bufferbloat.net/listinfo/bloat

Reply via email to