Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 2

Markku Kojo <kojo@cs.helsinki.fi> Tue, 12 July 2022 00:55 UTC

Return-Path: <kojo@cs.helsinki.fi>
X-Original-To: tcpm@ietfa.amsl.com
Delivered-To: tcpm@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id B2319C16ECB6 for <tcpm@ietfa.amsl.com>; Mon, 11 Jul 2022 17:55:35 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.007
X-Spam-Level:
X-Spam-Status: No, score=-2.007 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=cs.helsinki.fi
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id QHocWqBUpjAk for <tcpm@ietfa.amsl.com>; Mon, 11 Jul 2022 17:55:31 -0700 (PDT)
Received: from script.cs.helsinki.fi (script.cs.helsinki.fi [128.214.11.1]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 396C4C15A733 for <tcpm@ietf.org>; Mon, 11 Jul 2022 17:55:30 -0700 (PDT)
X-DKIM: Courier DKIM Filter v0.50+pk-2017-10-25 mail.cs.helsinki.fi Tue, 12 Jul 2022 03:55:27 +0300
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.helsinki.fi; h=date:from:to:subject:in-reply-to:message-id:references :mime-version:content-type; s=dkim20130528; bh=07Oq6Eo8miNNN8OTS IpQsd24DkHn/SibxpcDHYss+EI=; b=UbbPIJ3hMAxKE7RcBqrPHFZpE0A3+t8o8 ngN/0qagnCp26NFO/PNA2Z2ML1FlgNUZhmi6JiQA52vzWrtuWSb2jhhB7V6EqU75 vkmFuDHZB/DNw4wls48dU0GkynubOszkE/nJb2LXNgHH+Fdal9WeqdvCgo/ODDV9 04HaKRcmGo=
Received: from hp8x-60 (85-76-35-95-nat.elisa-mobile.fi [85.76.35.95]) (AUTH: PLAIN kojo, TLS: TLSv1/SSLv3,256bits,AES256-GCM-SHA384) by mail.cs.helsinki.fi with ESMTPSA; Tue, 12 Jul 2022 03:55:27 +0300 id 00000000005A0148.0000000062CCC67F.0000625E
Date: Tue, 12 Jul 2022 03:55:21 +0300
From: Markku Kojo <kojo@cs.helsinki.fi>
To: tcpm@ietf.org
In-Reply-To: <alpine.DEB.2.21.2206141500480.7292@hp8x-60.cs.helsinki.fi>
Message-ID: <alpine.DEB.2.21.2207112144430.7292@hp8x-60.cs.helsinki.fi>
References: <alpine.DEB.2.21.2206141500480.7292@hp8x-60.cs.helsinki.fi>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; format="flowed"; charset="US-ASCII"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/jsH8gkoIGAlJa2S4MH__gePu5zA>
Subject: Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 2
X-BeenThere: tcpm@ietf.org
X-Mailman-Version: 2.1.39
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: <https://mailarchive.ietf.org/arch/browse/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: Tue, 12 Jul 2022 00:55:35 -0000

Hi all,

below please find proposed text to solve the Issue 2 a). I will propose 
text to solve 2 b) once we have come to conclusion with 2 a). For 
description and arguments for issues 2 a) and 2 b), please see the 
original issue descriptions below.

Sec 4.6. Multiplicative Decrease

Old:
    The parameter Beta__cubic_ SHOULD be set to 0.7, which is different
    from the multiplicative decrease factor used in [RFC5681] (and
    [RFC6675]) during fast recovery.


New:
    If the sender is not in slow start when the congestion event is
    detected, the parameter Beta__cubic_ SHOULD be set to 0.7, which
    is different from the multiplicative decrease factor used in
    [RFC5681] (and [RFC6675].
    This change is justified in the Reno-friendly region during
    congestion avoidance because a CUBIC sender compensates the higher
    multiplicative decrease factor than that of Reno by applying
    a lower additive increase factor during congestion avoidance.

    However, if the sender is in slow start when the congestion event is
    detected, the parameter Beta__cubic_ MUST be set to 0.5 [Jacob88].
    This results in the sender continuing to transmit data at the maximum
    rate that the slow start determined to be available for the flow.
    Using Beta__cubic_ with a value larger than 0.5 when the congestion
    event is detected in slow start would result in an overagressive send
    rate where the sender injects excess packets into the network and
    each such packet is guaranteed to be dropped or force a packet from
    a competing flow to be dropped at a tail-drop bottleneck router.
    Furthermore, injecting such undelivered packets creates a danger of
    congestion collapse (of some degree) "by delivering packets through
    the network that are dropped before reaching their ultimate
    destination." [RFC 2914]


    [Jacob88] V. Jacobson, Congestion avoidance and control, SIGCOMM '88.

Thanks,

/Markku

On Tue, 14 Jun 2022, Markku Kojo wrote:

> Hi all,
>
> this thread starts the discussion on the issue 2: CUBIC is specified to use 
> incorrect multiplicative-decrease factor for a congestion event that occurs 
> when operating in slow start. And, applying HyStart++ does not remove the 
> problem, it only mitigates it in some percentage of cases.
>
> I think it is useful to discuss this in two phases: 2 a) and 2 b) below.
> For anyone commenting/arguing on the part 2 b), it is important to first
> acknowledge whether (s)he thinks the original design and logic by Van 
> Jacobson is correct. If not, one should explain why Van's design logic is 
> incorrect.
>
> Issue 2 a)
> ----------
>
> To begin with, let's but aside a potential use of HyStart++ (also assume tail 
> drop router unless otherwise mentioned).
>
> The use of an MD factor larger than 0.5 is against the theory and original 
> design by Van Jacobson as explained in the congavoid paper [Jacob88]. Any MD 
> factor value larger then 0.5 will result sending extra packets during Fast 
> Recovery following the congestion event (drop). All extra packets will become 
> dropped at a tail-drop bottleneck (if a lonely flow).
>
> Note that at the time when the drop becomes signalled at the TCP sender, the 
> size of the cwnd is double the available network capacity that slow start 
> determined for the flow. That is, using MD=0.5 is already as aggressive as 
> possible, leaving no slack. Therefore, if MD=0.7 is used, the TCP sender 
> enters fast recovery with cwnd that is 40% larger that the determined network 
> capacity and all excess packets are guaranteed to become dropped, or even 
> worse, the excess packets are likely to force packets for any competing flows 
> to become unfairly be dropped.
>
> Moreover, if NewReno loss recovery is in use, a CUBIC sender will
> operate overagressively for a very long time. For example, if the
> available network capacity for the flow is 100 packets, cwnd will have
> value 200 when the congestion is signalled and the CUBIC sender enters
> fast recovery with cwnd=140 and injects 40 excess packets for each of
> the subsequent 100 RTTs it stays in fast recovery, forcing 4000 packets to 
> become inevitably and totally unnecessarily dropped.
>
> Even worse, this behaviour of sending 'undelivered packets' is against
> the congestion control principles as it creates a danger of congestion
> collapse (of some degree) "by delivering packets through the network
> that are dropped before reaching their ultimate destination." [RFC 2914]
>
> Such undelivered packets unnecessarily eat capacity from other flows
> sharing the path before the bottleneck.
>
> RFC 2914 emphasises:
>
> "This is probably the largest unresolved danger with respect to
>  congestion collapse in the Internet today."
>
> It is very easy to envision a realistic network setup where this creates a 
> degree of congestion collapse where a notable portion of useful network 
> capacity is wasted due to the undelivered packets.
>
>
> [Jacob88] V. Jacobson, Congestion avoidance and control, SIGCOMM '88.
>
>
> Issue 2 b)
> ----------
>
> The CUBIC draft suggests that HyStart++ should be used *everywhere* instead 
> of the traditional Slow Start (see section 4.10).
>
> Although the draft does not say it, seemingly the authors suggest using 
> HyStart++ instead of traditional Slow Start in order to avoid the problem of 
> over-aggressive behaviour discussed above. This, however, has several issues.
>
> First. it is directly in conflict with HyStart++ specification which says 
> that HyStart++ should be used only for the initial Slow Start. However, the 
> overaggressive behaviour after slow start is also a potential problem with 
> slow start during an RTO recovery; in case of sudden congestion that reduces 
> available capacity for a flow down to a fraction of the currently available 
> capacity, it is very likely that an RTO occurs. In such a case the RTO 
> recovery in slow start inevitably overshoots and it is crucial for all flows 
> not to be overaggressive.
>
> Second, the experimental results for initial slow start in HyStart++ draft 
> suggest that while HyStart++ achieves good results HyStart++ is unable to 
> exit slow start early and avoid overshoot in a significant percentage of 
> cases.
>
> Given the above issues, the CUBIC draft must require that MD of 0.5 is used 
> when the congestion event occurs while the sender is (still) in slow start. 
> The use of MD=0.5 is an obvious stumble in the original CUBIC and the 
> original CUBIC authors have already acknowledged this. It seems also obvious 
> that instead of correcting the actual problem (use of MD other than 0.5), 
> HyStart and HyStart++ have been proposed to address the design mistake. While 
> HyStart++ is a useful method also when used with MD=0.5, when used alone it 
> only mitigates the impact of the actual problem rather than solves the 
> problem.
>
> What should be done for the cases where HyStart++ exits slow start but
> is not able to avoid (some level of) overshoot and dropped packets is IMO an 
> open issue. Resolving it requires additional experiments and it should be 
> resolved separately when we have more data. For now when we do not have 
> enough data and understanding of the behaviour we should IMO follow the 
> general IETF guideline "be conservative in what you send" and specify that MD 
> = 0.5 should be used for a congestion event that occurs for a packet sent in 
> slow start.
>
> Thanks,
>
> /Markku
>