General list for discussing Bufferbloat
 help / color / mirror / Atom feed
From: Jonathan Morton <chromatix99@gmail.com>
To: bloat@lists.bufferbloat.net
Subject: [Bloat] Thoughts on Stochastic Fair Blue
Date: Sun, 13 Mar 2011 03:40:03 +0200	[thread overview]
Message-ID: <AB70D849-EC48-438E-B009-E22223CAF5E2@gmail.com> (raw)

Having read some more documents and code, I have some extra insight into SFB that might prove helpful.  Note that I haven't actually tried it yet, but it looks good anyway.  In control-systems parlance, this is effectively a multichannel I-type controller, where RED is a single-channel P-type controller.

My first thought after reading just the paper was that unconditionally dropping the packets which increase the marking probability was suspect.  It should be quite possible to manage a queue using just ECN, without any packet loss, in simple cases such as a single bulk TCP flow.  Thus I am pleased to see that the SFB code in the debloat tree has separate thresholds for increasing the marking rate and tail-dropping.  They are fairly close together, but they are at least distinct.

My second observation is that marking and dropping both happen at the tail of the queue, not the head.  This delays the congestion information reaching the receiver, and from there to the sender, by the length of the queue - which does not appear to be self-tuned by the flow rate.  However, the default values appear to be sensible.

Another observation is that packets are not re-ordered by SFB, which (given the Bloom filter) is potentially a missed opportunity.  However, they can be re-ordered in the current implementation by using child qdiscs such as SFQ, with or without HTB in tandem to capture the queue from a downstream "dumb" device.  The major concern with this arrangement is the incompatibility with qdiscs that can drop packets internally, since this is not necessarily obvious to end-user admins.

I also thought of a different way to implement the hash rotation.  Instead of shadowing the entire set of buckets, simply replace the hash on one row at a time.  This requires that the next-to-minimum values for q_len and p_mark are used, rather than the strict minima.  It is still necessary to calculate two hash values for each packet, but the memory requirements are reduced at the expense of effectively removing one row from the Bloom filter.

 - Jonathan


             reply	other threads:[~2011-03-13  1:40 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-13  1:40 Jonathan Morton [this message]
2011-03-24  1:03 ` Juliusz Chroboczek
2011-03-24  5:30   ` Dave Hart
2011-03-24 20:44     ` richard
2011-03-24 22:22       ` [Bloat] Packet drops, ECN and ECN+ [was: Thoughts on Stochastic Fair Blue] Juliusz Chroboczek
2011-03-25 19:22         ` Richard Scheffenegger
2011-04-03 16:35       ` [Bloat] Thoughts on Stochastic Fair Blue Juliusz Chroboczek
2011-04-03 18:03         ` Jonathan Morton
2011-03-24 11:59   ` Jim Gettys
2011-03-24 12:40   ` Jonathan Morton
2011-03-24 13:32     ` Eric Dumazet
2011-03-24 13:31 Dave Taht

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://lists.bufferbloat.net/postorius/lists/bloat.lists.bufferbloat.net/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=AB70D849-EC48-438E-B009-E22223CAF5E2@gmail.com \
    --to=chromatix99@gmail.com \
    --cc=bloat@lists.bufferbloat.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox