From: moeller0 <moeller0@gmx.de>
To: Jonathan Morton <chromatix99@gmail.com>
Cc: cake@lists.bufferbloat.net, codel@lists.bufferbloat.net
Subject: Re: [Codel] [Cake] Proposing COBALT
Date: Fri, 20 May 2016 13:37:41 +0200 [thread overview]
Message-ID: <22371476-B45C-4E81-93C0-D39A67639EA0@gmx.de> (raw)
In-Reply-To: <CEE3BB80-E6D4-4851-8406-54DBCC0B36AB@gmail.com>
Hi Jonathan,
interesting ideas.
> On May 20, 2016, at 12:04 , Jonathan Morton <chromatix99@gmail.com> wrote:
>
> With the recent debate over handling unresponsive flows in fq_codel, I had a brainwave involving constructing a hybrid AQM which preserves Codel’s excellent properties on responsive flows, while also reacting appropriately when faced with a UDP flood. The key difficulty was deciding when to switch over from the Codel behaviour to a PIE or RED like behaviour.
>
> It turns out that BLUE is a perfect fit for this job, because it activates when the queue is completely full - an unambiguous signal that Codel has lost the plot and is unable to control the queue alone. BLUE was one of the more promising AQMs in the days immediately prior to Codel’s ascendance, so it should be effective outside Codel’s speciality.
>
> The name COBALT, as well as referring to a nice shade of blue, can read “Codel-BLUE Alternate”.
That is important, alwas start with a good acronym ;) (now really there are some EU funding programs that actually require you to supply an acronym if applying for a grant).
>
> It is unnecessary to explicitly “switch over” between Codel and BLUE; they can work in parallel, since their operating characteristics are independent. It may be feasible to simplify the Codel implementation, since it will no longer need to handle overload conditions as robustly. For example, the Codel section should use ECN marking whenever possible, and never drop an ECN-Capable packet; the BLUE section should ignore ECN capability and simply drop packets, since the traffic is evidently not responding to any ECN signals if BLUE is triggered.
>
> One of the major reasons why Codel fails on UDP floods is that its drop schedule is time-based. This is the correct behaviour for TCP flows, which respond adequately to one congestion signal per RTT, regardless of the packet rate. However, it means it is easily overwhelmed by high-packet-rate unresponsive (or anti-responsive, as with TCP acks) floods, which an attacker or lab test can easily produce on a high-bandwidth ingress, especially using small packets.
In essence I agree, but want to point out that the protocol itself does not really matter but rather the observed behavior of a flow. Civilized UDP applications (that expect their data to be carried over the best-effort internet) will also react to drops similar to decent TCP flows, and crappy TCP implementations might not. I would guess with the maturity of TCP stacks misbehaving TCP flows will be rarer than misbehaving UDP flows (which might be for example well-behaved fixed-rate isochronous flows that simply should never have been sent over the internet).
>
> BLUE, by contrast, uses a drop *probability*, so its effectiveness on floods is independent of the packet rate. If necessary, its drop rate can increase to 100% in a reasonable amount of time.
>
> A couple of details are necessary to integrate BLUE with a flow-isolating qdisc:
>
> BLUE’s up-trigger should be on a packet drop due to overflow (only) targeting the individual subqueue managed by that particular BLUE instance. It is not correct to trigger BLUE globally when an overall overflow occurs. Note also that BLUE has a timeout between triggers, which should I think be scaled according to the estimated RTT.
That sounds nice in that no additional state is required. But with the current fq_codel I believe, the packet causing the memory limit overrun, is not necessarily from the flow that actually caused the problem to beginn with, and I doesn’t fq_codel actuall search the fattest flow and drops from there. But I guess that selection procedure could be run with blue as as well.
>
> BLUE’s down-trigger is on the subqueue being empty when a packet is requested from it, again on a timeout. To ensure this occurs, it may be necessary to retain subqueues in the DRR list while BLUE’s drop probability is nonzero.
Question, doesn’t this mean the affected flow will be throttled quite harshly? Will blue slowly decrease the drop probability p if the flow behaves? If so, blue could just disengage if p drops below a threshold?
>
> Note that this does nothing to improve the situation regarding fragmented packets. I think the correct solution in that case is to divert all fragments (including the first) into a particular queue dependent only on the host pair, by assuming zero for src and dst ports and a “special” protocol number.
I believe the RFC recommends using the SRC IP, DST IP, Protocol, Identity tuple, as otherwise all fragmented flows between a host pair will hash into the same bucket…
Best Regards
Sebastian
> This has the distinct advantages of keeping related fragments together, and ensuring they can’t take up a disproportionate share of bandwidth in competition with normal traffic.
>
> - Jonathan Morton
>
> _______________________________________________
> Cake mailing list
> Cake@lists.bufferbloat.net
> https://lists.bufferbloat.net/listinfo/cake
next prev parent reply other threads:[~2016-05-20 11:37 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-20 10:04 [Codel] " Jonathan Morton
2016-05-20 11:37 ` moeller0 [this message]
2016-05-20 12:18 ` [Codel] [Cake] " Jonathan Morton
2016-05-20 13:22 ` moeller0
2016-05-20 14:36 ` Jonathan Morton
2016-05-20 16:03 ` David Lang
2016-05-20 17:31 ` Jonathan Morton
[not found] ` <CALnBQ5mNgHgFoTcvLxppv2P9XODc4D-4NObKyqbZJ0PccVkwiA@mail.gmail.com>
2016-05-20 16:43 ` Jonathan Morton
2016-05-23 18:30 ` Jonathan Morton
2016-05-24 13:47 ` Jeff Weeks
2016-05-24 14:07 ` Jonathan Morton
2016-05-24 15:52 ` Dave Täht
2016-05-24 15:56 ` Jonathan Morton
2016-05-24 16:02 ` Dave Taht
2016-05-26 12:33 ` Jonathan Morton
2016-06-03 19:09 ` Noah Causin
2016-06-03 19:34 ` Jonathan Morton
2016-06-04 1:01 ` Andrew McGregor
2016-06-04 6:23 ` Jonathan Morton
2016-06-04 13:55 ` Jonathan Morton
2016-06-04 14:01 ` moeller0
2016-06-04 14:16 ` Jonathan Morton
2016-06-04 15:03 ` moeller0
2016-06-04 17:10 ` Noah Causin
2016-06-04 17:49 ` Eric Dumazet
2016-06-04 19:55 ` Jonathan Morton
2016-06-04 20:56 ` Eric Dumazet
2016-06-27 3:56 ` Jonathan Morton
2016-06-27 7:59 ` moeller0
2016-05-20 13:41 ` David Lang
2016-05-20 13:46 ` moeller0
2016-05-20 14:04 ` David Lang
2016-05-20 14:42 ` Kathleen Nichols
2016-05-20 15:11 ` Jonathan Morton
2016-05-20 15:12 ` Jonathan Morton
2016-05-20 16:05 ` David Lang
2016-05-20 17:06 ` Jonathan Morton
2016-05-20 16:20 ` Rick Jones
2016-05-20 16:35 ` Jonathan Morton
2016-05-20 17:01 ` Rick Jones
2016-05-20 17:07 ` Jonathan Morton
2016-05-20 17:21 ` Rick Jones
2016-05-20 17:26 ` David Lang
2016-05-20 17:33 ` Jonathan Morton
2016-05-20 14:09 ` Jonathan Morton
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/codel.lists.bufferbloat.net/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=22371476-B45C-4E81-93C0-D39A67639EA0@gmx.de \
--to=moeller0@gmx.de \
--cc=cake@lists.bufferbloat.net \
--cc=chromatix99@gmail.com \
--cc=codel@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