From: Jonathan Morton <chromatix99@gmail.com>
To: "Toke Høiland-Jørgensen" <toke@toke.dk>
Cc: bloat <bloat@lists.bufferbloat.net>
Subject: Re: [Bloat] The Confucius queue management scheme
Date: Wed, 14 Feb 2024 16:24:26 +0200 [thread overview]
Message-ID: <2F4A44B6-2347-4976-A933-7F547D63D167@gmail.com> (raw)
In-Reply-To: <87jzncs116.fsf@toke.dk>
> On 10 Feb, 2024, at 7:05 pm, Toke Høiland-Jørgensen via Bloat <bloat@lists.bufferbloat.net> wrote:
>
> This looks interesting: https://arxiv.org/pdf/2310.18030.pdf
>
> They propose a scheme to gradually let new flows achieve their fair
> share of the bandwidth, to avoid the sudden drops in the available
> capacity for existing flows that can happen with FQ if a lot of flows
> start up at the same time.
I took some time to read and think about this.
The basic idea is delightfully simple: "old" flows have a fixed weight of 1.0; "new" flows have a weight of (old flows / new flows) * 2^(k*t), where t is the age of the flow and k is a tuning constant, and are reclassified as "old" flows when this quantity reaches 1.0. They also describe a queuing mechanism which uses these weights, which while mildly interesting in itself, isn't directly relevant since a variant of DRR++ would also work here.
I noticed four significant problems, three of which arise from significant edge cases, and the fourth is an implementation detail which can easily be remedied. I didn't see any discussion of these edge cases in the paper, only the implementation detail. The latter is just a discretisation of the exponential function into doubling epochs, probably due to an unfamiliarity with fixed-point arithmetic techniques. We can ignore it when thinking about the wider design theory.
The first edge case is already fatal unless somehow handled: starting with an idle link, there are no "old" flows and thus the numerator of the equation is zero, resulting in a zero weight for any number of new flows which then arise. There are several reasonable and quite trivial ways to handle this.
The second edge case is the dynamic behaviour when "new" flows transition to "old" ones. This increases the numerator and decreases the denominator for other "new" flows, causing a cascade effect where several "new" flows of similar but not identical age suddenly become "old", and younger flows see a sudden jump in weight, thus available capacity. This would become apparent in realistic traffic more easily than in a lab setting. A formulation which remains smooth over this transition would be preferable.
The third edge case is that there is no described mechanism to remove flows from the "old" set when they become idle. Most flows on the Internet are in practice short, so they might even go permanently idle before leaving the "new" set. If not addressed, this becomes either a memory leak or a mechanism for the flow hash table to rapidly fill up, so that in practice all flows are soon seen as "old". The DRR++ mechanism doesn't suffice, because the state in Confucius is supposed to evolve over longer time periods, much longer than the sojourn time of an individual packet in the queue.
The basic idea is interesting, but the algorithmic realisation of the idea needs work.
- Jonathan Morton
next prev parent reply other threads:[~2024-02-14 14:24 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-10 17:05 Toke Høiland-Jørgensen
2024-02-10 19:42 ` Dave Taht
2024-02-14 14:24 ` Jonathan Morton [this message]
2024-02-14 16:23 ` Toke Høiland-Jørgensen
2024-02-14 16:25 ` 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=2F4A44B6-2347-4976-A933-7F547D63D167@gmail.com \
--to=chromatix99@gmail.com \
--cc=bloat@lists.bufferbloat.net \
--cc=toke@toke.dk \
/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