Re: [aqm] New Version Notification for draft-baker-aqm-sfq-implementation-00.txt

"Fred Baker (fred)" <fred@cisco.com> Tue, 24 June 2014 07:41 UTC

Return-Path: <fred@cisco.com>
X-Original-To: aqm@ietfa.amsl.com
Delivered-To: aqm@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id EB56D1B2878 for <aqm@ietfa.amsl.com>; Tue, 24 Jun 2014 00:41:20 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -112.452
X-Spam-Level:
X-Spam-Status: No, score=-112.452 tagged_above=-999 required=5 tests=[BAYES_50=0.8, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_HI=-5, RP_MATCHES_RCVD=-0.651, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_WHITELIST=-100] autolearn=ham
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 UKizesAaIA5n for <aqm@ietfa.amsl.com>; Tue, 24 Jun 2014 00:41:12 -0700 (PDT)
Received: from rcdn-iport-9.cisco.com (rcdn-iport-9.cisco.com [173.37.86.80]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 938C81B286F for <aqm@ietf.org>; Tue, 24 Jun 2014 00:41:12 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=6421; q=dns/txt; s=iport; t=1403595672; x=1404805272; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=jZbxfEPKynxToF8y6jcOvo74uygwNFJe7UmYrHf1cs4=; b=iAQLCeEE/DkgGgkPKQw3xbAiyvmOHwJ5c6TUNTIkrY/oqHFnmMMcxPED JzApIHinw55j0+QFYLQcAvrCVZBZCo51pBCqXbDffsEn0U83n9jEGcZtW 4PRoQj9NuLiGtYo3vN9hCCobckOQKlB1zN4jP8A14kpVtFZnhfYiGzlXH 4=;
X-Files: signature.asc : 195
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: Ag4FAGYqqVOtJV2P/2dsb2JhbABagw2BLMN6AYEHFnWEBAEBBCdQAhACAQhGMiUCBAoEBQ6INMRTF4lGhTYHgy2BFgEDkgaBQYJ0hBGTY4IAgUKCMA
X-IronPort-AV: E=Sophos;i="5.01,536,1400025600"; d="asc'?scan'208";a="332111444"
Received: from rcdn-core-7.cisco.com ([173.37.93.143]) by rcdn-iport-9.cisco.com with ESMTP; 24 Jun 2014 07:41:11 +0000
Received: from xhc-aln-x07.cisco.com (xhc-aln-x07.cisco.com [173.36.12.81]) by rcdn-core-7.cisco.com (8.14.5/8.14.5) with ESMTP id s5O7fBDb017181 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=FAIL); Tue, 24 Jun 2014 07:41:11 GMT
Received: from xmb-rcd-x09.cisco.com ([169.254.9.143]) by xhc-aln-x07.cisco.com ([173.36.12.81]) with mapi id 14.03.0123.003; Tue, 24 Jun 2014 02:41:11 -0500
From: "Fred Baker (fred)" <fred@cisco.com>
To: "Scheffenegger, Richard" <rs@netapp.com>
Thread-Topic: [aqm] New Version Notification for draft-baker-aqm-sfq-implementation-00.txt
Thread-Index: AQHPj3+rNNCSeGKF8U2qCDwctFMKyw==
Date: Tue, 24 Jun 2014 07:41:11 +0000
Message-ID: <4A20A0BD-1DF4-49AC-856A-B0FD73AADFC1@cisco.com>
References: <20140613215207.11613.75352.idtracker@ietfa.amsl.com> <F8A92E62-4135-41F7-A069-711B27137BE5@cisco.com> <53A3A6B9.7030809@swin.edu.au> <4419FB4C-9410-41FB-A5FB-F46289F4E742@cisco.com> <98e111430e4b4e28ab7b86c860e665fc@hioexcmbx05-prd.hq.netapp.com>
In-Reply-To: <98e111430e4b4e28ab7b86c860e665fc@hioexcmbx05-prd.hq.netapp.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator:
x-originating-ip: [10.19.64.121]
Content-Type: multipart/signed; boundary="Apple-Mail=_03304157-1452-4EB9-AAA1-86B659DC798C"; protocol="application/pgp-signature"; micalg="pgp-sha1"
MIME-Version: 1.0
Archived-At: http://mailarchive.ietf.org/arch/msg/aqm/Kt7lmt5vwrMzp-gb-aMiejd2h5Y
Cc: "aqm@ietf.org" <aqm@ietf.org>, grenville armitage <garmitage@swin.edu.au>
Subject: Re: [aqm] New Version Notification for draft-baker-aqm-sfq-implementation-00.txt
X-BeenThere: aqm@ietf.org
X-Mailman-Version: 2.1.15
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: <http://www.ietf.org/mail-archive/web/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: Tue, 24 Jun 2014 07:41:21 -0000

On Jun 23, 2014, at 6:32 AM, Scheffenegger, Richard <rs@netapp.com> wrote:

> <as individual>
> 
> Hi Fred,
> 
> thank you for writing this down; one aspect that gets referred to, but not made completely explicit in sections 3.2 and 3.3 is the interaction of the AQM / Queue signals with the transport control loop.
> 
> IMHO, it should be made very clear, when the AQM action is done before the queueing, that the AQM signal is delayed for the outer control loop; obviously in a defensive loss situation, this will always be the case. In comparison, when the Queue prepends the AQM action, the AQM signal is delayed less to the outer control loop.
> 
> Depending on the depth of the queue / departure rate, that timing difference can be significant...
> 
> I don't know how to put that into better words that would fit into your draft though.
> 
> Best regards,
> 
> Richard Scheffenegger

I can go into that if you want.

My logic here goes something like this.

You can think of a TCP session as a control loop stuck into the middle of a larger stream. Imagine I’m moving a gigabyte file from here to there, the MSS is 1440 bytes (an IPv6 packet containing it is 1500 bytes), the bottleneck link between “here” and “there” is some specific rate, and the propagation delay between “here” and “there” is some non-trivial value. The least effective window that would maximize throughput is the number of segments that could fully use the bottleneck capacity; any additional quantum that is there sits in a queue and increases the RTT. So at any given point in time, we can think of the transfer as having several components:

     K segments that are actually “in flight” somewhere
     An additional K segments that hack been received and whose acks are in flight.
     cwnd-2*K segments sitting in a queue, probably at the bottleneck.
     Some number of bytes that haven’t been transmitted yet
          of those, the next cwnd segments will be transmitted as acks arrive.
     Some number of bytes that have already been received at the far end but not delivered yet to the application
     Zero or more segments that have been received out of order and are being held pending retransmission

Now, let’s mark a specific segment; I’ll call it segment N. I don’t really care what the value of N is. But it is the segment that the AQM algorithm will select and drop, by whatever algorithm it decides. In a tail-drop case, for the sake of argument, we can assert that the entire cwnd segments are between segment N and the receiver or are represented in acknowledgments on their way back. In a head-drop case, there are cwnd-2K segments sitting in the queue after segment N, K segments between it and the receiver, and K acks in flight.

  +------+      +--------+                      +--------+
  |      |      | Queue  |Data    K segments    |        |
  |      +----->+        +----> - - - - ------->+        |
  |Sender|      |Router 1|                      |Receiver|
  |      +<-----+        +<---- - - - - <-------+        |
  |      |      |        |Acks    K acks        |        |
  +------+      +--------+                      +--------+

So now, the whole thing rotates clockwise. 
1) K segments already in flight arrive and are acknowledged while K acks arrive at the sender and trigger new transmissions. The queue still has cwnd-2*K segments in it.
2) depending on whether it was head drop or tail drop, somewhere between zero and cwnd-2*K segments arrive and are acknowledged while as many acks are received at the sender and trigger new transmissions. The queue still has cwnd-2*K segments in it.
3) the missed packet is detected by the receiver, who starts responding with duplicate acks. However, there are still K acks in flight, so the sender is going to send another K new packets before he even sees the first dupack. The queue still has cwnd-2*K segments in it.
4) we now get a long stream of dupacks, and the sender presumably retransmits the dropped packet. AT THIS POINT, SENDER REDUCES CWND. If more than one packet got dropped, let’s hope the SACK logic retransmits it as well.
5) At long last, the retransmission arrives at the receiver, who sends a giant ack and starts sending a stream of acks, triggering new transmissions.

To determine the difference between head-drop and tail-drop, we have to ask ourselves how big cwnd-2*K is. If we are using traditional too-full-drop-something without AQM, it might be a largish number (it could be the size of the memory allocated to the queue if there is no competing traffic), and it is probably fair to say that head-drop would get the event back to the sender more rapidly than tail-drop.

If we are using any AQM technology - RED, WRED, ARED, PIE, CoDel, Blue, AVQ, or whatever else, the fundamental purpose of the logic is to keep the queue relatively shallow, even if it ha a large memory system behind it. In RED terms, we would estimate that the mean queue depth will approximate min-threshold or less; each of the other technologies has its counterpart to that and will similarly keep the latency and/or queue depth down.

Hence, cwnd-2*K is a function of the mean queue depth at the bottleneck, and is a relatively small number. Hence, if we’re using an AQM algorithm - any AQM algorithm as long as it works - the real differences between had-drop and tail-drop is a relatively small number.

Which makes me ask - what are we really talking about? Does it actually matter?