Re: [aqm] I-D Action: draft-ietf-aqm-codel-03.txt

"Klatsky, Carl" <Carl_Klatsky@comcast.com> Thu, 07 July 2016 19:12 UTC

Return-Path: <Carl_Klatsky@comcast.com>
X-Original-To: aqm@ietfa.amsl.com
Delivered-To: aqm@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 9B1B912D0AC for <aqm@ietfa.amsl.com>; Thu, 7 Jul 2016 12:12:51 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -3.327
X-Spam-Level:
X-Spam-Status: No, score=-3.327 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RP_MATCHES_RCVD=-1.426, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id P0L0EENfe9gw for <aqm@ietfa.amsl.com>; Thu, 7 Jul 2016 12:12:49 -0700 (PDT)
Received: from pacdcmhout01.cable.comcast.com (PACDCMHOUT01.cable.comcast.com [68.87.31.167]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 78A6112B068 for <aqm@ietf.org>; Thu, 7 Jul 2016 12:12:49 -0700 (PDT)
X-AuditID: 44571fa7-fa76f98000001305-48-577ea9b064d5
Received: from PACDCEX48.cable.comcast.com (cas-umc02.ndceast.pa.bo.comcast.net [68.87.34.28]) (using TLS with cipher AES256-SHA256 (256/256 bits)) (Client did not present a certificate) by (SMTP Gateway) with SMTP id 40.0F.04869.0B9AE775; Thu, 7 Jul 2016 15:12:48 -0400 (EDT)
Received: from PACDCEX43.cable.comcast.com (24.40.2.142) by PACDCEX48.cable.comcast.com (24.40.2.147) with Microsoft SMTP Server (TLS) id 15.0.1130.7; Thu, 7 Jul 2016 15:12:46 -0400
Received: from PACDCEX43.cable.comcast.com ([fe80::3aea:a7ff:fe36:87a8]) by PACDCEX43.cable.comcast.com ([fe80::3aea:a7ff:fe36:87a8%19]) with mapi id 15.00.1130.005; Thu, 7 Jul 2016 15:12:46 -0400
From: "Klatsky, Carl" <Carl_Klatsky@comcast.com>
To: Jonathan Morton <chromatix99@gmail.com>, Michael Menth <menth@uni-tuebingen.de>
Thread-Topic: [aqm] I-D Action: draft-ietf-aqm-codel-03.txt
Thread-Index: AQHRfxb87A5LHxhy8060NvHhQsbonJ9iwUKAgAHv6ACAcwh1AIA2FogAgAAMhYCAABZcAIAAArgw
Date: Thu, 07 Jul 2016 19:12:45 +0000
Message-ID: <7ad383c30696497dae5dfd89ded5274f@PACDCEX43.cable.comcast.com>
References: <20160316000053.5163.88345.idtracker@ietfa.amsl.com> <56EEC35B.3000007@mti-systems.com> <56F0635A.7060004@student.kit.edu> <CAPRuP3k9NuTpK7WsRfOymJbTSup5aY7RgUtEDd-wsapXJxbKVg@mail.gmail.com> <1467892048445.64588@student.kit.edu> <577E4C53.9030909@uni-tuebingen.de> <88A51A3A-64EE-4A6C-99A5-7EA8DC33CC8B@gmail.com>
In-Reply-To: <88A51A3A-64EE-4A6C-99A5-7EA8DC33CC8B@gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ms-exchange-transport-fromentityheader: Hosted
x-originating-ip: [68.87.29.10]
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-CFilter-Loop: Forward
X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrBIsWRmVeSWpSXmKPExsXiEq4ko7thZV24QfseFYveY/PYLNbsk7RY uO0Ho8Wv70vYLCYdXchi8ebIWhaLxRM62Cw+TZjOanH9O7sDp8fOWXfZPRZsKvVYsuQnk8eC hTuYPU6e6mXz6Nrbwu7Rv/8hu8eEG48ZAziiuGxSUnMyy1KL9O0SuDIu/D/HVPBCrWLngXls DYwvVLsYOTkkBEwkDm9YwtbFyMUhJDCHSaLz53soZyejxL09N6GcE4wSn891MIG0sAkYSPy6 +5UFxBYRCJX4O+UAO0gRs8BxJonLE1+xgySEBawk1n/awwpRZC3Rt3oLG4QdJfGiYTZYDYuA isT3ufcZQWxeAS+Jhp2bmSG2nWOSWLh6BlARBwengK3EvEt2IDWMAmIS30+tATuCWUBc4taT +UwQPwhILNlznhnCFpV4+fgfK4RtILF16T4WCFte4siEfywgI5kFNCXW79KHGKMoMaX7ITvE CYISJ2c+gSoXlzh8ZAfrBEaJWUi2zULonoWkexaS7gWMLKsY5QoSk1OSczPyS0sMDPWSE5Ny UvWS83OTE4tLQPQmRnD8yy/fwXjvhdMhRgEORiUeXovWunAh1sSy4srcQ4wSHMxKIrycy4FC vCmJlVWpRfnxRaU5qcWHGKU5WJTEeV9NigkXEkhPLEnNTk0tSC2CyTJxcEo1MAb9ZHz895wP T9e8JjOmwMclR516vsyznLku0mkKv5z7ty0Prkq2/H2+VrqAJc5bY8bivIuBMYd5rdbr6Qpf Ep00w3D6+blZSUdibE54TJ2+RmzX0/3FLdnTIuU+fJDQcD2cJin75Wg9S7fzHIatHPxH3yca n1QUS/4702OKaP9X8cnyxYHH+pRYijMSDbWYi4oTAXquyHf7AgAA
Archived-At: <https://mailarchive.ietf.org/arch/msg/aqm/Io2hnrk5S89YLQEHBbpajMV3lN8>
X-Mailman-Approved-At: Thu, 07 Jul 2016 12:23:28 -0700
Cc: "Goltsman, Polina" <polina.goltsman@student.kit.edu>, Andrew Mcgregor <andrewmcgr@google.com>, Fabian Schwarzkopf <f.schwarzkopf@yahoo.de>, Wesley Eddy <wes@mti-systems.com>, Dave Taht <dave.taht@gmail.com>, Jana Iyengar <jri@google.com>, "Bless, Roland (TM)" <roland.bless@kit.edu>, "aqm@ietf.org" <aqm@ietf.org>
Subject: Re: [aqm] I-D Action: draft-ietf-aqm-codel-03.txt
X-BeenThere: aqm@ietf.org
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: "Discussion list for active queue management and flow isolation." <aqm.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/aqm>, <mailto:aqm-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/aqm/>
List-Post: <mailto:aqm@ietf.org>
List-Help: <mailto:aqm-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/aqm>, <mailto:aqm-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 07 Jul 2016 19:13:58 -0000

> On 7 Jul, 2016, at 15:34, Michael Menth <menth@uni-tuebingen.de> wrote:
> 
>> Based on our evaluations, with pure CoDel (without FQ-CoDel), 
>> "reentering" is actually a common case. I think Dave and Toke should 
>> have more experimental results to answer this question. (I included 
>> Dave in CC)
> 
> We also studied this issue about one or two years ago. The algorithm 
> controlling the reentering of the dropping mode may have a significant 
> impact on control variables, drop rates, drop pattern depending on the 
> traffic. It can also impact utilization. Most interesting is probably 
> Fig. 6 on page 7 in 
> https://atlas.informatik.uni-tuebingen.de/~menth/papers/Menth16e.pdf

That’s a very interesting paper for Codel enthusiasts.  IMHO, Codel-ACT performs much better on the important metrics than plain Codel, especially when faced with multiplexed flows.

[CK] I am familiar with CoDel and FQ-CoDel, but what is CoDel-ACT?

I had also noticed the potential for Codel’s count to increase unboundedly while working on Cake; in fact when implemented as a 16-bit counter, it would wrap around on certain workloads, causing apparently chaotic behaviour.  I therefore modified the variant of Codel that Cake used to *halve* the count on re-entry, a much more aggressive reduction than Codel-ACT uses, as well as using a saturating increment to prevent wraparound.  However, I kept the basic behaviour of waiting a full interval before re-entry.

More recently, I have changed Cake over to use COBALT, which is a combination of Codel and BLUE; Codel is intended to handle responsive flows which behave in a TCP-like manner, and BLUE to take over if the flow proves to be unresponsive (by running into the queue length limit).

COBALT uses a re-implemented version of Codel with a much simplified main loop.  It also has a novel re-entry behaviour: the count is reduced while the queue length is below target by running the algorithm in reverse, without marking or dropping.  This means that very short non-dropping periods result in a slight reduction in count, and longer periods result in a larger reduction; the reduction also occurs faster when count is high.

With your paper in mind, I may also change it to use the shorter re-entry delay of Codel-ACT, as you explain very clearly how it may be beneficial, and this shows in the graphs as a lower peak delay and a reduction in loss synchronisation between flows.  I also think it will allow Codel to adapt more cleanly to RTTs significantly shorter than it is configured for - this is important where the defaults are set for internet-scale traffic, and people unthinkingly rely on those defaults in a LAN environment.

Here is the relevant part of COBALT’s Codel implementation, showing the re-entry count reduction strategy:

if(next_due && vars->dropping) {
	/* Use ECN mark if possible, otherwise drop */
	drop = !(vars->ecn_marked = INET_ECN_set_ce(skb));

	vars->count++;
	if(!vars->count)
		vars->count--;
	cobalt_invsqrt(vars);
	vars->drop_next = cobalt_control_law(vars->drop_next, p->interval, vars->rec_inv_sqrt); } else {
	while(next_due) {
		vars->count--;
		cobalt_invsqrt(vars);
		vars->drop_next = cobalt_control_law(vars->drop_next, p->interval, vars->rec_inv_sqrt);
		schedule = now - vars->drop_next;
		next_due = vars->count && schedule >= 0;
	}
}

The full code can be found here:
	https://github.com/dtaht/sch_cake/blob/master/cobalt.c

 - Jonathan Morton

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