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

Polina Goltsman <polina.goltsman@student.kit.edu> Mon, 21 March 2016 21:10 UTC

Return-Path: <polina.goltsman@student.kit.edu>
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 9A2D412DA1C for <aqm@ietfa.amsl.com>; Mon, 21 Mar 2016 14:10:49 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.2
X-Spam-Level:
X-Spam-Status: No, score=-4.2 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, RP_MATCHES_RCVD=-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 c9upke0N1AyU for <aqm@ietfa.amsl.com>; Mon, 21 Mar 2016 14:10:46 -0700 (PDT)
Received: from scc-mailout-kit-01.scc.kit.edu (scc-mailout-kit-01.scc.kit.edu [IPv6:2a00:1398:9:f712::810d:e751]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 91D9212D851 for <aqm@ietf.org>; Mon, 21 Mar 2016 14:10:45 -0700 (PDT)
Received: from kit-msx-28.kit.edu ([2a00:1398:9:f612::28]) by scc-mailout-kit-01.scc.kit.edu with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (envelope-from <polina.goltsman@student.kit.edu>) id 1ai761-0000Fb-NT; Mon, 21 Mar 2016 22:10:43 +0100
Received: from localhost.localdomain (84.179.106.108) by smtp.kit.edu (129.13.50.106) with Microsoft SMTP Server (TLS) id 15.0.1156.6; Mon, 21 Mar 2016 22:10:39 +0100
To: Wesley Eddy <wes@mti-systems.com>, aqm@ietf.org, Wesley Eddy <wes@mti-systems.com>
References: <20160316000053.5163.88345.idtracker@ietfa.amsl.com> <56EEC35B.3000007@mti-systems.com>
From: Polina Goltsman <polina.goltsman@student.kit.edu>
Message-ID: <56F0635A.7060004@student.kit.edu>
Date: Mon, 21 Mar 2016 22:10:50 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0
MIME-Version: 1.0
In-Reply-To: <56EEC35B.3000007@mti-systems.com>
Content-Type: multipart/alternative; boundary="------------070305000409070807020009"
X-Originating-IP: [84.179.106.108]
Archived-At: <http://mailarchive.ietf.org/arch/msg/aqm/50pY3mW2DMIim3RN_LBDAfwA16g>
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: Mon, 21 Mar 2016 21:10:49 -0000

Dear Wesley, Dear All,

First of all our feedback regarding different "re-entering dropping 
state" in the document and in the Linux implementation 
(http://www.ietf.org/mail-archive/web/aqm/current/msg01686.html) was not 
addressed.

As FQ-CoDel  relies on CoDel, this issue is also (partly) relevant for 
the FQ-CoDel document. In the introduction FQ-CoDel references ns-3 and 
Linux implementations where the first one uses the re-entering logic 
from the CoDel document while the second from CoDel Linux 
implementation. The algorithm that has seen widespread testing according 
to Section 7 is (I suppose) the Linux version. Is this situation 
acceptable for an algorithm specification?

/[since this comment was supposed to be sent before the end of 2015, 
feel free to (silently) ignore it]/
Second, unlike Rasool Al-Saadi (see 
http://www.ietf.org/mail-archive/web/aqm/current/msg01693.html) I do not 
like the document. Although I agree that the pseudocode is sufficient to 
create a working implementation, however, in my opinion, the rest of the 
document makes implementing CoDeL more confusing (at least without 
reading [CODEL2012] first). Is it normal for a RFC, which, as I assume, 
should primarily contain an algorithm specification to contain the 
algorithm specification ONLY in form of pseudocode?
These are two items that I found the most confusing:
(1) section 3 introduces estimator, setpoint, and control loop which are 
not clearly distinguishable in pseudocode. It would be nice if section 4 
explained how the three entities transition into the routines in 
pseudocode.
(2) IMHO, there is some missing explanations. For example, the document 
never says how exactly "bad"/persistent queue is determined. The 
document says in Section 3.1 that the minimum is tracked, but it never 
says that persistent queue is when the minimum is above setpoint/target 
for at least an interval. As another example, Section 3.3 could say how 
the controller looks like exactly.

I also have some small comments and nits regarding the latest version (-03):

---

in the whole document there are several places of using "we" to 
(supposedly) refer to the authors. According to Bob Briscoe's message 
(http://www.ietf.org/mail-archive/web/aqm/current/msg01805.html), "we" 
do not necessary refer to the authors in a rfc. Are these "we"s ok?

---

abstract:

This document describes a general*framework*  called CoDel

IMHO the word "framework" is too overloaded and too broad. It might be 
better to call CoDel an AQM or something that has "queue" in it. Other 
ways (e.g., http://queue.acm.org/detail.cfm?id=2839461) probably also 
use it to control a queue.

---

section 1:

(nit)
    Despite this
    awareness, the problem has only gotten worse as Moore's Law growth in
    memory density fueled an exponential increase in buffer pool size.
    Efforts to deploy AQM have been frustrated by difficult configuration
    and negative impact on network utilization. *This problem,* recently
    christened "bufferbloat", [TSV2011] [BB2011] has become increasingly
    important throughout the Internet but particularly at the consumer
    edge.

it reads like "this problem" refers to "efforts to deploy AQM" and not 
to "increase in buffer pool size"

---

(nit)

    To understand
    queue management, it is critical to understand the difference between
    the necessary, useful*"good" queue*, and the counterproductive*"bad" queue*.

strictly speaking "good" and "bad" queue were not defined either before 
or in this sentence (it is explained in section 3 or in [CODEL2012])

---

(nit)

    o  treat "good queue" and "bad queue" differently, that is, keep
       delay low while permitting necessary bursts of traffic

(1) see above
(2) I would say that the goal is "to keep delay low while ..." and to 
treat good/bad queue differently is a mechanism used to achieve the goal

---

section 2:

(nit)
       In this document, *the characters ">>" preceding an indented line(s)*
    indicates a compliance requirement statement using the key words
    listed above.  This convention aids reviewers in quickly identifying
    or finding the explicit compliance requirements of this RFC.

I maybe missing something, but I can't find any use of "characters ">>"" 
anywhere except this line in any (txt,html, pdf) of the versions.

---

section 3:

generally IMHO it would be nice to introduce /interval/ and /target/ so 
it is more obvious that these are parameters (or some other kind of 
variables). Interval is more or less obvious (although imho should be 
more explicit). The target is first introduced at the end of section 3.2 as:

    This results in a particularly simple form for the
    setpoint: the ideal range for the permitted standing queue is between
    5% and 10% of the TCP connection's RTT.  Thus*target*  is simply 5% of
    the interval ofsection 3.1 
<https://tools.ietf.org/html/draft-ietf-aqm-codel-03#section-3.1>.

It was not previously defined that /target/ is a parameter with a 
meaning of /setpoint/. I don't think that this is clear for people who 
do not know what target is in advance.

[It seems that it was intended to introduce /interval/ and /target/ 
parameters in section 4]

---

    Instead of averages
    *we recommend*  tracking the minimum sojourn time, then,

"we recommend" or "CoDeL does"? According to the last paragraph in 
Section 3.1, tracking minimum is a core part of CoDeL:

    These two innovations, use of sojourn time as observed values*and the local minimum as the statistic to monitor queue congestion*  are key to
    CoDel's estimator building block.

---

    Since the peak queue delay*is simply f r*, power is solely a function

is it f/r ?

---
(nit)

    The only remaining building block needed for a basic AQM is a
    'control loop' algorithm to effectively drive the queueing system
    from any*'persistent queue above target'*  state to a state where the
    *persistent queue is below target*.

It would be nice to explicitly state that the "persistent queue above 
target" is indication of "bad" queue/congestion somewhere above or in 
this line. I think that these terms are used in [codel2012] but were not 
used before in the document. See also the next item.

---
In section 3.3 there are three "states":

  *

    'persistent queue above target' state

  *

    'has persistent queue' state

  *

      dropping state

It would be nice to a) use the same one b) explain how CoDeL gets in/out 
of there

---

(probably nit)

    When
    *the minimum sojourn time first crosses the target*  and*CoDel drops a packet*, the earliest the controller could see the effect of the drop

from current sentence it could be inferred that the two events occur at 
the same time which is not the case. Maybe " when persistent queue above 
target is detected" would be better.

---

    variation is less than the target, and so the*initial drop spacing SHOULD be set to the estimator's interval plus 
twice the target (i.e., initial drop spacing = 1.1 * interval)*  to ensure that the

this contradicts the pseudocode:

    dodequeue_result codel_queue_t::dodequeue(time_t now)

	...
	first_above_time_ = now + interval_;

section 4:

    To keep from
    making drops when it would starve the output link, CoDel makes
    another check before dropping to see if at least an MTU worth of
    bytes remains in the buffer. If not, the packet SHOULD NOT be
    dropped and,*currently*, CoDel exits the drop state.

what is the meaning of "currently" ? in the current experimental version?

---
(nit)

    In practice, this value is not known or measured*(*though see
    Section 6.2 
<https://tools.ietf.org/html/draft-ietf-aqm-codel-03#section-6.2>  for an application where interval is measured.

missing closing bracket

Section 5 / pseudocode: (all nits)

The variables are introduced as first_time_above, dropping, but are used 
as first_time_above_, dropping_ (with underscores at end).

---

*Packet** CoDelQueue::dequeue()

a pointer to current packet was introduced as packet_t

*--- double*  now = clock();;

time units were supposed to be of type time_t

*--- dodequeueResult*  r = dodequeue(now);

compare with: typedef struct { ... } *dodequeue_result* below (present 
in two routines)

---

dodequeueResult r = {*NULL, queue_t::dequeue() *};

shouldn't it be {queue_t::dequeue(), false} ?


Best Regards,
Polina


* note the reply by Dave Taht: 
http://www.ietf.org/mail-archive/web/aqm/current/msg01687.html

On 03/20/2016 04:35 PM, Wesley Eddy wrote:
> It looks like the WGLC feedback on the document body is incorporated, 
> so this is good.
>
> Is there a reason to stay with Informational and not Experimental like 
> we've done with PIE an d FQ-CoDel?
>
> Also, idnits has some problems with the references that should be 
> fixed (e.g. "NATAL2010" is probably supposed to be "NETAL2010"):
> https://tools.ietf.org/idnits?url=https://tools.ietf.org/id/draft-ietf-aqm-codel-03.txt