I've been reading through the internet-drafts, and one paragraph struck
me as very illuminating.  This is therefor a sanity-check before I go
full-hog down a particular path...

The comment is from Baker and Fairhurst,
https://datatracker.ietf.org/doc/draft-ietf-aqm-recommendation/ and the
paragraph is [emphases added]

    The point of buffering in the network is to absorb data bursts and
    to transmit them during the (hopefully) ensuing bursts of silence.
    This is essential to permit the transmission of bursty data.
    Normally small queues are preferred in network devices, with
    sufficient queue capacity to absorb the bursts. The
    counter-intuitive result is that maintaining normally-small queues
    can result in higher throughput as well as lower end-to- end delay.
    In summary, queue limits should not reflect the steady state queues
    we want to be maintained in the network; i/nstead, they should
    reflect the size of bursts that a network device needs to absorb. /

All of a sudden we're talking about the kinds of queues I know a little
about (:-))
---

I'm going to suggest that these are queues and associated physical
buffers that do two things:

 1. hold packets that arrive at a bottleneck for a long as it takes to
    send them out a slower link that they came in on, and
 2. hold bursts of packets that arrive adjacent to each other until they
    can be sent out in a normal spacing, with some small amount of time
    between them


In an illustration of Dave Taht's, the first looks something like this

-------------------------+
    |X|            |X|      +-------------------
    |X|            |X|         |XXX|    |XXX|
    |X|            |X|      +-------------------
-------------------------+

At the choke-point there is a buffer at least big enough to give the
packet a chance to wheel from line into column (:-)) and start down the
smaller pipe.

The speed at which the acks come back,  the frequency of drops, and any
explicit congestion notifications slows the sender until they don't
overload the skinnier pipe, thus spacing the packets in the fatter pipe out.

Various causes [Leland] can slow or speed the packets in the fat pipe,
making it possible for several to arrive adjacent to each other,
followed by a gap.  The second purpose of a buffer is to hold  these
bursts while things space themselves back out.

They need to be big enough at minimum to do the speed matching,  and at
maximum,  big enough to spread a burst back into a normal progression,
always assuming that acks, drops and explicit congestion notifications
are slowing the sender to the speed of the slowest part of the network.
---

If I'm right about this, we can draw some helpful conclusions

  * buffer sizes can be set based on measurements:
      o speed differences, which are pretty static, plus
      o observed burstyness
  * drops and ECN can be done to match the slowest speed in the path

The latter suddenly sounds a bit like path MTU discovery, except it's a
bit more dynamic, and varies with both path and what's happening in
various parts of it.

To me, as a capacity/performance nerd, this sounds a lot more familiar
and manageable. My question to you, before I start madly scribbling on
the internet drafts is:

    /Am I blowing smoke?/

--dave

-- 
David Collier-Brown,         | Always do right. This will gratify
System Programmer and Author | some people and astonish the rest
dav...@spamcop.net           |                      -- Mark Twain
(416) 223-8968

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

Reply via email to