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
>> >>>
>> >
>>
>>
>>
>
- [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and propos… Markku Kojo
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Vidhi Goel
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Yuchung Cheng
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Vidhi Goel
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Markku Kojo
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Markku Kojo
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Markku Kojo
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Yuchung Cheng
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Markku Kojo
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Yuchung Cheng
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Vidhi Goel
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Markku Kojo
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Markku Kojo
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Vidhi Goel
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Markku Kojo
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Vidhi Goel
- Re: [tcpm] CUBIC rfc8312bis / WGLC Issue 6 and pr… Yuchung Cheng