Cake - FQ_codel the next generation
 help / color / mirror / Atom feed
From: Jonathan Morton <chromatix99@gmail.com>
To: Jeff Weeks <jweeks@sandvine.com>
Cc: "Luis E. Garcia" <luis@bitamins.net>,
	"cake@lists.bufferbloat.net" <cake@lists.bufferbloat.net>,
	"codel@lists.bufferbloat.net" <codel@lists.bufferbloat.net>
Subject: Re: [Cake] [Codel]  Proposing COBALT
Date: Tue, 24 May 2016 17:07:00 +0300	[thread overview]
Message-ID: <F7F264BD-DB15-4D2A-ABC8-181681C3D63A@gmail.com> (raw)
In-Reply-To: <274D3A0FA900FD47AA6B56991AAA32FDC5529FC8@wtl-exchp-1.sandvine.com>


> On 24 May, 2016, at 16:47, Jeff Weeks <jweeks@sandvine.com> wrote:
> 
>> In COBALT, I keep the drop-scheduler running in this phase, but without actually dropping packets, and *decrementing* count instead of incrementing it; the backoff phase then 
>> naturally ends when count returns to zero, instead of after an arbitrary hard timeout.  The loop simply ensures that count will reduce by the correct amount, even if traffic 
>> temporarily ceases on the queue.  Ideally, this should cause Codel’s count value to stabilise where 50% of the time is spent above target sojourn time, and 50% below.  (Actual 
>> behaviour won’t quite be ideal, but it should be closer than before.)
> 
> I tried this as well, at one point, but can't remember, off-hand, why I didn't stick with it; will have to see if I can find mention of it in my notes.
> What trigger are you using to decrement count?  I initially did a crude decrement of count every interval, but then you end up with a ramp-down time which is considerably slower then the ramp-up (and the ramp up is slow to begin with).
> I assume you're actually re-calculating the next drop, using the 1/sqrt(count) but instead of dropping and increasing count, you're simply decreasing count, so the time to get from 1->N is the same as the time to get to N->1?

That’s basically right.  In retrospect, it seems like a very obvious approach to the backoff problem.  :-)

Of course, due to the “priming” delay and the possibility of the signalling frequency exceeding the packet rate, it’s likely to take *less* time to ramp down than to ramp up; this is why the ramping down is guarded by a while loop.

>> As another simplification, I eliminated the “primed” state (waiting for interval to expire) as an explicit entity, by simply scheduling the first drop event to be at now+interval when 
>> entering the dropping state.  This also eliminates the first_above_time variable.  Any packets with sojourn times below target will bump Codel out of the dropping state anyway.
> 
> How do you handle the case where you're scheduled a drop event 100ms in the future, and we immediately see low latency; is the event descheduled?
> If not, what if we then see high latency again; can the still-scheduled-event cause us to start dropping packets earlier than 100ms?

The first drop event is scheduled by setting the “dropping” flag, ensuring that “count” is nonzero, and setting the “drop_next” timestamp to now+interval.  Any packet below the target sojourn time clears the “dropping” flag, which prevents marking or dropping from occurring - which is why the explicit “primed” state is eliminated.

Since the timestamp is set in this way whenever the “dropping” flag transitions from cleared to set, there are no spurious drop events.

The code is in the sch_cake repo if you want to examine the details.  I promise it’s a lot easier to read than the original Codel code.

 - Jonathan Morton


  reply	other threads:[~2016-05-24 14:07 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-20 10:04 [Cake] " Jonathan Morton
2016-05-20 11:37 ` moeller0
2016-05-20 12:18   ` 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
2016-05-20 16:37         ` Luis E. Garcia
2016-05-20 16:43           ` Jonathan Morton
2016-05-20 16:55             ` Luis E. Garcia
2016-05-23 18:30             ` Jonathan Morton
2016-05-23 19:11               ` Luis E. Garcia
2016-05-24 13:47               ` [Cake] [Codel] " Jeff Weeks
2016-05-24 14:07                 ` Jonathan Morton [this message]
2016-05-24 15:52                   ` Dave Täht
2016-05-24 15:56                     ` Jonathan Morton
2016-05-24 16:02                       ` Dave Taht
2016-05-25  6:40                         ` Loganaden Velvindron
2016-05-25 12:00                         ` Benjamin Cronce
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                                 ` Vincent Frentzel
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-06-27 15:18                                       ` Kevin Darbyshire-Bryant
2016-06-28  2:51                                         ` Jonathan Morton
2016-06-28  8:40                                           ` Kevin Darbyshire-Bryant
2016-06-28 15:33                                             ` Jonathan Morton
2016-06-28 17:37                                               ` Kevin Darbyshire-Bryant
2016-06-29 15:22                                                 ` Kevin Darbyshire-Bryant
2016-06-30  8:16                                                   ` Kevin Darbyshire-Bryant
2016-06-28 15:44                                             ` Dave Taht
2016-05-20 13:41     ` [Cake] " David Lang
2016-05-20 13:46       ` moeller0
2016-05-20 14:04         ` David Lang
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             ` [Cake] [Codel] " 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       ` [Cake] " 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/cake.lists.bufferbloat.net/

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

  git send-email \
    --in-reply-to=F7F264BD-DB15-4D2A-ABC8-181681C3D63A@gmail.com \
    --to=chromatix99@gmail.com \
    --cc=cake@lists.bufferbloat.net \
    --cc=codel@lists.bufferbloat.net \
    --cc=jweeks@sandvine.com \
    --cc=luis@bitamins.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