Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and proposed text

Markku Kojo <kojo@cs.helsinki.fi> Wed, 20 July 2022 00:13 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 67225C131921 for <tcpm@ietfa.amsl.com>; Tue, 19 Jul 2022 17:13:36 -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 ouLAIYvYy8BV for <tcpm@ietfa.amsl.com>; Tue, 19 Jul 2022 17:13:32 -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 DE6BEC131920 for <tcpm@ietf.org>; Tue, 19 Jul 2022 17:13:29 -0700 (PDT)
X-DKIM: Courier DKIM Filter v0.50+pk-2017-10-25 mail.cs.helsinki.fi Wed, 20 Jul 2022 03:13:26 +0300
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.helsinki.fi; h=date:from:to:cc:subject:in-reply-to:message-id:references :mime-version:content-type; s=dkim20130528; bh=QsF6RCJcI8T/hv4Dg WdAH3PdpNnZa/ArFOn3fC/zMDQ=; b=ittA4vzUHvajYZnH0IVKP/IOZNNOPVGCQ TbiyxrWKt9dGvOyXpw3VJgZkvmsGbS+dWcACiv7w0hxTl30TWX1HoW09loS9zNAt A1vGnuvkbnDaEgNKMk/D/pXXS1g+LDeTW1M/4st4t5MlvjaocKuv4HKqmHULbCjR BSKTrtWkZI=
Received: from hp8x-60 (85-76-46-2-nat.elisa-mobile.fi [85.76.46.2]) (AUTH: PLAIN kojo, TLS: TLSv1/SSLv3,256bits,AES256-GCM-SHA384) by mail.cs.helsinki.fi with ESMTPSA; Wed, 20 Jul 2022 03:13:25 +0300 id 00000000005A011D.0000000062D748A5.000058DE
Date: Wed, 20 Jul 2022 03:13:25 +0300
From: Markku Kojo <kojo@cs.helsinki.fi>
To: Vidhi Goel <vidhi_goel=40apple.com@dmarc.ietf.org>
cc: Yuchung Cheng <ycheng@google.com>, "tcpm@ietf.org Extensions" <tcpm@ietf.org>, Neal Cardwell <ncardwell@google.com>, Gorry Fairhurst <gorry@erg.abdn.ac.uk>
In-Reply-To: <alpine.DEB.2.21.2207200157150.7292@hp8x-60.cs.helsinki.fi>
Message-ID: <alpine.DEB.2.21.2207200309010.7292@hp8x-60.cs.helsinki.fi>
References: <alpine.DEB.2.21.2207112026000.7292@hp8x-60.cs.helsinki.fi> <31DCA869-30FA-41C6-B21F-3D71E600FFF2@apple.com> <CAK6E8=ddwJK+e8f5Jxe8AW6CmHhvRFyPxb6nhpJ-jdEtXxp5UQ@mail.gmail.com> <alpine.DEB.2.21.2207150152210.7292@hp8x-60.cs.helsinki.fi> <CAK6E8=f63vORKoqDHTkXS=jiaHD_GM0Gw31CzdKbbdhmVeexmA@mail.gmail.com> <alpine.DEB.2.21.2207150229250.7292@hp8x-60.cs.helsinki.fi> <CAK6E8=djxYk4zMAyCGM+zhmXuZ25WvGLB1jA95Y24i2KMvK4+w@mail.gmail.com> <1A95963E-1BEB-4868-9C4F-0C75A4E5B904@apple.com> <alpine.DEB.2.21.2207200157150.7292@hp8x-60.cs.helsinki.fi>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=_script-22772-1658276006-0001-2"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/edyctZ3JiipqbVP6W1YlOG7TVMc>
Subject: Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and proposed text
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: Wed, 20 Jul 2022 00:13:36 -0000

Hi,

just wanted to add one question: I'm not sure if the following piece of 
text correctly characterizes RFC 7661 behaviour (Gorry?):

  "it would allow using a value between _cwnd_ and
    _flight_size_ to calculate the new _ssthresh_"

Thanks,

/Markku

On Wed, 20 Jul 2022, Markku Kojo wrote:

> Hi Vidhi (Cc'ing also Gorry because he has better insight into RFC 7661),
>
> Thanks for the text. I'll reply here to keep the discussion on the wg list so 
> that anyone interested can more easily follow the discussion (jumping back 
> and worth between ML and github may become intractable).
>
> First, I want to stress that I am not expecting nor insisting to stick with 
> my proposed text (with necessary changes to address the comments on the list) 
> but it could possibly result in faster conclusion(?).
>
> Second, I'd like to highlight that my proposed additional text was intended 
> just to bring up the caveats of simply using cwnd and give advise that is in 
> line with other standards track CC RFCs. It was not intended to specify any 
> algorithm (or a part of an algorithm).
>
> The new text in github IMO has the following issues:
>
> 1. It does not mention the caveat of letting cwnd to grow
>   beyond rwnd which is a known implementation problem in
>   the past (so it can easily be repeated by some new
>   implementors) nor does it explain why simply using
>   cwnd is incorrect.
>
> 2. Even though this draft is intended to be applicable
>   with QUIC, it misses the pointer to RFC 9002 that
>   articulates the corresponding requirement for QUIC.
>
> 3. It tries to create an ad-hoc algorithm in a single
>   sentence that captures the RFC 7661 algorithm for
>   those using cwnd. RFC 7661 is some 20 pages of which
>   several pages are used to specify the algorithm.
>   That is, the proposed text ignores several crucial
>   actions of RFC 7661. And, my proposal was not to
>   provide an algorithm for those using cwnd.
>
> 4. The sentence / rule "when flight_size is less than 1/2
>   of the cwnd" is not capturing what was discussed earlier
>   in github and now on the wg list, and it is also in
>   conflict with RFC 9002 and effectively also with RFC
>   5681. None of these effectively allows the sender not
>   reacting to a congestion event but the "new" rule would
>   allow it once the cwnd has grown more than 43% above the
>   flightsize.
>
> Apologies for finding so many issues with the proposed text.
>
> Thanks,
>
> /Markku
>
> On Sun, 17 Jul 2022, Vidhi Goel wrote:
>
>> Thank you everyone for the discussion. Since some of the text was becoming 
>> duplicate, I moved the below text a
>> few lines up and added a restriction for using cwnd directly. And the 
>> recommendation to use RFC 7661 now
>> applies to both approaches.
>> Some implementations of CUBIC currently
>> use *cwnd* ….
>> 
>> 
>> Here is the PR - https://github.com/NTAP/rfc8312bis/pull/148
>> 
>> I would really appreciate if folks can review it so that we can close this 
>> issue before meeting at IETF 114
>> next week.
>> 
>> Thanks,
>> Vidhi
>>
>>       On Jul 17, 2022, at 8:33 AM, Yuchung Cheng <ycheng@google.com> wrote:
>> 
>> Glad we agree on improving the text. I think Vidhi will come up with a good 
>> diff that captures our
>> discussion.
>> 
>> On Thu, Jul 14, 2022 at 4:47 PM Markku Kojo 
>> <kojo=40cs.helsinki.fi@dmarc.ietf.org> wrote:
>>       On Thu, 14 Jul 2022, Yuchung Cheng wrote:
>>
>>       > On Thu, Jul 14, 2022 at 4:12 PM Markku Kojo
>>       > <kojo=40cs.helsinki.fi@dmarc.ietf.org> wrote:
>>       >>
>>       >> Hi Yuchung,
>>       >>
>>       >> On Tue, 12 Jul 2022, Yuchung Cheng wrote:
>>       >>
>>       >>> AFAIK, the latest (and previous) Linux Cubic implementation does 
>> not follow
>>       >>> "The implementations that use _cwnd_ MUST use other measures to 
>> avoid
>>       >>> _cwnd_ from growing beyond the receive window"
>>       >>>
>>       >>> I don't see the need to add that check in Linux as the effective
>>       >>> window is always the min of cwnd and rwnd.
>>       >>
>>       >> That does not help. If cwnd is allowed to grow way beyond rwnd 
>> (more than
>>       >> 43% for CUBIC or more than 100% for Reno CC), a sender would not 
>> respond
>>       >> to an arriving congestion signal effectively at all (and may even
>>       >> increase the cwnd). That is against the very basic rule in 
>> congestion
>>       >> control principles we have.
>>       >>
>>       >>> On the other hand, Linux does restrict cwnd growth if flight size 
>> is
>>       >>> below cwnd but the
>>       >>> actual logic is more sophisticated than a "cwnd < inflight" check 
>> to
>>       >>> work w/ TSO chunking issue well.
>>       >>> 
>> https://elixir.bootlin.com/linux/latest/source/net/ipv4/tcp_output.c#L1881
>>       >>> (Neal cc'd here is the inventor of the advanced check)
>>       >>
>>       >> I'm not sure I follow your logic. Doesn't that effectively 
>> restrict cwnd
>>       >> from growing beyond rwnd? To my understanding with that check 
>> Linux
>>       >> applies "other measures to avoid _cwnd_ from growing beyond the 
>> receive
>>       >> window". It does not matter whether the conncetion is
>>       >> receiver-application limited via rwnd or sender-application 
>> limited. If
>>       >> rwnd limits flight size, cwnd will not grow more. Maybe I am 
>> missing
>>       >> something?
>>       > That's right. Limiting cwnd growth on flight size automatically
>>       > prevents cwnd goes far beyond rwnd for the congestion case you are
>>       > concerned about.
>>       >
>>       > Your suggested text "The implementations that use _cwnd_ MUST use
>>       > other measures to avoid _cwnd_ from growing beyond the receive 
>> window"
>>       > is easily interpreted as a line of code "cwnd = min(cwnd, rwnd)"
>>
>>       That was not the intent. So, I think we agree.
>>
>>       > What I am saying is that this sentence is not necessary and overly
>>       > strict. Limiting cwnd growth based on inflight which is based on 
>> the
>>       > effective sending window (= min(cwnd, rwnd)) already prevents cwnd
>>       > bloats over rwnd.
>>
>>       Sure, I misinterepted your previous text ;)
>>
>>       > I don't see why Cubic needs to have more strict
>>       > rules than other C.C.s.
>>
>>       It does not have to be more strict rule. So, to my understanding we 
>> just
>>       need to tweak the text such that it is not misinterpreted the way you
>>       thought but still clearly involves the message that the sender needs 
>> to
>>       prevent cwnd to grow beyond rwnd.
>>
>>       Maybe(?):
>>
>>         "... The implementations that use _cwnd_ MUST use 
>> [other|alternative]
>>          measures to not allow _cwnd_ to grow when bytes in flight is
>>          smaller than cwnd_. That also effectively avoids _cwnd_ from
>>          growing beyond the receive window. Such measures are important
>>          to prevent a CUBIC sender from using an arbitrarily ..."
>>
>>       Thanks,
>>
>>       /Markku
>>
>>       >>
>>       >> Thanks,
>>       >>
>>       >> /Markku
>>       >>
>>       >>> Just want to reflect a major implementation status.
>>       >>>
>>       >>>
>>       >>> On Tue, Jul 12, 2022 at 2:01 PM Vidhi Goel
>>       >>> <vidhi_goel=40apple.com@dmarc.ietf.org> wrote:
>>       >>>>
>>       >>>> Thank you Markku for proposing the text. Some of this is already 
>> covered in the latest
>>       draft but I can do some edits to your proposed text and create a PR.
>>       >>>> I spoke to other co-authors about this suggestion as well and we 
>> are mostly ok with it.
>>       >>>>
>>       >>>>
>>       >>>> Vidhi
>>       >>>>
>>       >>>>> On Jul 11, 2022, at 5:37 PM, Markku Kojo 
>> <kojo=40cs.helsinki.fi@dmarc.ietf.org> wrote:
>>       >>>>>
>>       >>>>> Hi all,
>>       >>>>>
>>       >>>>> I promised to propose some text to some of the remaining 
>> issues.
>>       >>>>> This thread starts the discussion on the issue 6 and proposes 
>> text to solve the issue:
>>       >>>>>
>>       >>>>> Issue 6) Flightsize:
>>       >>>>>
>>       >>>>>   The current text in Sec 4.6 w.r.t using FlightSize vs. cwnd 
>> for
>>       >>>>>   calculating multiplicative decrease is fine except that it 
>> does
>>       >>>>>   not quite correcly reflect what stacks that use cwnd instead 
>> of
>>       >>>>>   flightsize should do and actually do. AFAIK and what was
>>       >>>>>   discussed in github all stacks apply some sort of 
>> restrictions
>>       >>>>>   to not allow cwnd to grow beyond rwnd and to not use an
>>       >>>>>   arbitrarily high (old) cwnd value to calculate new cwnd
>>       >>>>>   when a congestion event occurs.
>>       >>>>>
>>       >>>>>
>>       >>>>> Current text in Sec 4.6::
>>       >>>>>
>>       >>>>>  Some implementations of CUBIC currently use _cwnd_ instead
>>       >>>>>  of _flight_size_ when calculating a new _ssthresh_ using 
>> Figure 5.
>>       >>>>>
>>       >>>>> Proposed new text:
>>       >>>>>
>>       >>>>>  Some implementations of CUBIC currently use _cwnd_ instead
>>       >>>>>  of _flight_size_ when calculating a new _ssthresh_ using 
>> Figure 5.
>>       >>>>>  The implementations that use _cwnd_ MUST use other measures to
>>       >>>>>  avoid _cwnd_ from growing beyond the receive window and to not
>>       >>>>>  allow _cwnd_ to grow when bytes in flight is smaller than
>>       >>>>>  _cwnd_. This prevents a CUBIC sender from using an arbitrarily
>>       >>>>>  high _cwnd_ value in calculating the new value for _ssthresh_
>>       >>>>>  and _cwnd_ when a congestion event is signalled, but it is not
>>       >>>>>  as robust as the mechanisms described in [RFC7661].
>>       >>>>>  [Many|Most|All] TCP implementations of CUBIC that use _cwnd_ 
>> apply
>>       >>>>>  such measures. Likewise, a QUIC sender that also uses 
>> congestion
>>       >>>>>  window to calculate a new value for the congestion window and
>>       >>>>>  slow-start threshold is required to apply similar mechanisms
>>       >>>>>  [RFC 9002].
>>       >>>>>
>>       >>>>>
>>       >>>>> Any comments and help in formulating the text are welcome.
>>       >>>>>
>>       >>>>> Need also some guidance from TCP implementations of CUBIC to 
>> finish up the second but
>>       last sentence.
>>       >>>>>
>>       >>>>> Thanks,
>>       >>>>>
>>       >>>>> /Markku
>>       >>>>>
>>       >>>>> _______________________________________________
>>       >>>>> tcpm mailing list
>>       >>>>> tcpm@ietf.org
>>       >>>>> https://www.ietf.org/mailman/listinfo/tcpm
>>       >>>>
>>       >>>> _______________________________________________
>>       >>>> tcpm mailing list
>>       >>>> tcpm@ietf.org
>>       >>>> https://www.ietf.org/mailman/listinfo/tcpm
>>       >>>
>>       >
>> 
>> 
>> 
>