Re: [tcpm] Adoption of draft-zimmermann-tcpm-cubic?

"Zimmermann, Alexander" <Alexander.Zimmermann@netapp.com> Thu, 19 March 2015 16:06 UTC

Return-Path: <Alexander.Zimmermann@netapp.com>
X-Original-To: tcpm@ietfa.amsl.com
Delivered-To: tcpm@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id F23F71A1A32 for <tcpm@ietfa.amsl.com>; Thu, 19 Mar 2015 09:06:55 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.911
X-Spam-Level:
X-Spam-Status: No, score=-6.911 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] 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 IBPLOTUA_MvH for <tcpm@ietfa.amsl.com>; Thu, 19 Mar 2015 09:06:53 -0700 (PDT)
Received: from mx144.netapp.com (mx144.netapp.com [216.240.21.25]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 6F7461A1A11 for <tcpm@ietf.org>; Thu, 19 Mar 2015 09:06:53 -0700 (PDT)
X-IronPort-AV: E=Sophos;i="5.11,430,1422950400"; d="asc'?scan'208";a="30691924"
Received: from hioexcmbx08-prd.hq.netapp.com ([10.122.105.41]) by mx144-out.netapp.com with ESMTP; 19 Mar 2015 09:01:30 -0700
Received: from HIOEXCMBX06-PRD.hq.netapp.com (10.122.105.39) by hioexcmbx08-prd.hq.netapp.com (10.122.105.41) with Microsoft SMTP Server (TLS) id 15.0.995.29; Thu, 19 Mar 2015 09:01:30 -0700
Received: from HIOEXCMBX06-PRD.hq.netapp.com ([::1]) by hioexcmbx06-prd.hq.netapp.com ([fe80::6036:353f:66f7:c599%21]) with mapi id 15.00.0995.031; Thu, 19 Mar 2015 09:01:30 -0700
From: "Zimmermann, Alexander" <Alexander.Zimmermann@netapp.com>
To: Neal Cardwell <ncardwell@google.com>
Thread-Topic: [tcpm] Adoption of draft-zimmermann-tcpm-cubic?
Thread-Index: AdBhYjpPZb+rJ+RBQHOjk5FmqEicXAAAbAKgAA8umAAAHz5ZAAAevjIA
Date: Thu, 19 Mar 2015 16:01:29 +0000
Message-ID: <A5B4400E-33D0-42DB-B2C1-AE9DA2C40481@netapp.com>
References: <ae97de90f83c460f8cfd0273f47611dd@hioexcmbx05-prd.hq.netapp.com> <655C07320163294895BBADA28372AF5D16C60F4D@FR712WXCHMBA15.zeu.alcatel-lucent.com> <2235E611-C0A1-42A9-9B00-D584FF3C8B3B@netapp.com> <CADVnQyk-hqAf_2VDTx841yTRO3SaLJNZpi3XmnQcyKgcQ4nAPA@mail.gmail.com>
In-Reply-To: <CADVnQyk-hqAf_2VDTx841yTRO3SaLJNZpi3XmnQcyKgcQ4nAPA@mail.gmail.com>
Accept-Language: de-DE, en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.2070.6)
x-originating-ip: [10.120.60.36]
Content-Type: multipart/signed; boundary="Apple-Mail=_CB11BA13-DE59-4210-876E-830F22070C55"; protocol="application/pgp-signature"; micalg="pgp-sha1"
MIME-Version: 1.0
Archived-At: <http://mailarchive.ietf.org/arch/msg/tcpm/HvKoHCyHX4gWqzfmyH8r2SqnCZg>
Cc: "tcpm-chairs@tools.ietf.org" <tcpm-chairs@tools.ietf.org>, Eric Dumazet <edumazet@google.com>, "tcpm@ietf.org" <tcpm@ietf.org>
Subject: Re: [tcpm] Adoption of draft-zimmermann-tcpm-cubic?
X-BeenThere: tcpm@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: TCP Maintenance and Minor Extensions Working Group <tcpm.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/tcpm>, <mailto:tcpm-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/tcpm/>
List-Post: <mailto:tcpm@ietf.org>
List-Help: <mailto:tcpm-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tcpm>, <mailto:tcpm-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 19 Mar 2015 16:06:56 -0000

Hi Neal,

thank you so some much for this email. Especially for the summary of the
changes you folks did at Google!
See inline.

> Am 19.03.2015 um 02:20 schrieb Neal Cardwell <ncardwell@google.com>:
> 
> On Wed, Mar 18, 2015 at 6:26 AM, Zimmermann, Alexander
> <Alexander.Zimmermann@netapp.com> wrote:
>> Hi Michael,
>> 
>>> Am 18.03.2015 um 11:18 schrieb Scharf, Michael (Michael) <michael.scharf@alcatel-lucent.com>:
>>> 
>>> My understanding is that TCPM recharting is still pending and IESG waits for potential feedback until March 23 [1].
>>> 
>>> The chairs are well aware of the strong support for draft-zimmermann-tcpm-cubic during IETF 91.
>>> We plan to run a formal adoption call once our charter explicitly allows adoption in TCPM.
> 
> Regarding draft-zimmermann-tcpm-cubic-00:
> 
>  https://tools.ietf.org/id/draft-zimmermann-tcpm-cubic-00.txt
> 
> I support this draft.
> 
> But I did want to note that our experience with CUBIC at Google shows
> that (1) it's important to consider stretch ACKs, and (2) it's critical to
> carefully consider the maximum rate of cwnd increase for CUBIC
> in congestion avoidance.
> 
> I would suggest the following small diffs to the draft:


Ack. If you take a look at my CUBIC presentation at the last IETF
(https://tools.ietf.org/agenda/91/slides/slides-91-tcpm-3.pdf),
one goal of this exercise will be to incorporate all changes with made
to the Linux code so far. You save me a lot of time to scan the code
for changes and compare it again w/ the draft. Thanks!

> 
> Where the draft says (in sections "3.3. Concave region" and "3.4.
> Convex region"):
> 
>  In this region, cwnd MUST be incremented by (W(t+RTT) - cwnd)/cwnd
>  for each received ACK.
> 
> I'd suggest the following new text in these two spots:
> 
>  In this region, cwnd MUST be incremented by
>     min((W(t+RTT) - cwnd)/cwnd, 1/2)
>  for each newly-acknowledged packet.
> 
> Detailed rationale:
> 
> (1) First is the issue of the treatment of "stretch ACKs" covering
> more than 2 packets.  The CUBIC paper and the Linux code through v3.18
> cap the de facto maximum rate of cwnd increase (in congestion
> avoidance) at 1 packet for every alternate ACK. In Google's experience
> with high-BDP paths with receiver hosts using receive
> offload/aggregation mechanisms (LRO and GRO in Linux terminology), the
> ACKs for up to 40 or more packets at a time caused this cap of "1
> packet for every alternate ACK" to result in cwnd increases that were
> too slow, leading to underutilization. So our team at Google
> contributed some changes in v3.19 that changed the rate of increase to
> be expressed in terms of packets ACKed, rather than number of ACKs.
> This approach allows full utilization even with receiver offload
> mechanisms.

We may also then recommend ABC for CUBIC when byte based stacks are
used…

> 
> (2) Second is the issue of the maximum rate of increase of cwnd. As it
> stands, this document says in section "3.4. Convex region" that:
> 
>   In this region, cwnd MUST be incremented by (W(t+RTT) - cwnd)/cwnd
>   for each received ACK.
> 
> There is similar language in section "3.3. Concave region".
> 
> Since the rate of increase of a cubic function can be quite large, if
> we take this language literally then in steep sections of the curve
> this can require that the sender "MUST" increase cwnd by quite
> a large amount.
> 
> I am not sure what other CUBIC implementations do, but this does not
> match the CUBIC paper or the Linux implementation. As mentioned above,
> the CUBIC paper and the Linux code through v3.18 actually cap the de
> facto maximum rate of cwnd increase (in congestion avoidance) at 1
> packet for every alternate ACK.
> 
> In our recent experiments with using CUBIC for YouTube video traffic
> using the revised, stretch-ACK-savvy CUBIC logic in Linux v3.19 we saw
> retransmit rates double due to v3.19 allowing cwnd to increase by 1
> packet for every packet ACKed.
> 
> So in Linux v4.0 we set a limit of increasing cwnd by at most 1 packet
> for every 2 packets ACKed, which restored the retransmit rates to
> their previous low levels.
> 
> For reference:
> 
> (1) Commits in Linux v3.19 to make CUBIC stretch-ACK-savvy:
> 
>  http://git.kernel.org/cgit/linux/kernel/git/davem/net.git/commit/?id=e73ebb0881ea5534ce606c1d71b4ac44db5c6930
>  http://git.kernel.org/cgit/linux/kernel/git/davem/net.git/commit/?id=814d488c61260521b1b3cc97063700a5a6667c8f
>  http://git.kernel.org/cgit/linux/kernel/git/davem/net.git/commit/?id=9cd981dcf174d26805a032aefa791436da709bee
>  http://git.kernel.org/cgit/linux/kernel/git/davem/net.git/commit/?id=d6b1a8a92a1417f8859a6937d2e6ffe2dfab4e6d
> 
> (2) Commits slated for Linux v4.0 to fix excessive cwnd growth in CUBIC:
> 
>  http://git.kernel.org/cgit/linux/kernel/git/davem/net.git/commit/?id=9949afa42be0b76f5832db112ce51bb6b35b2abb
>  http://git.kernel.org/cgit/linux/kernel/git/davem/net.git/commit/?id=d578e18ce93f5d33a7120fd57c453e22a4c0fc37
> 
> neal