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

Yuchung Cheng <ycheng@google.com> Sun, 17 July 2022 15:34 UTC

Return-Path: <ycheng@google.com>
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 03A51C14CF0C for <tcpm@ietfa.amsl.com>; Sun, 17 Jul 2022 08:34:18 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -17.608
X-Spam-Level:
X-Spam-Status: No, score=-17.608 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, ENV_AND_HDR_SPF_MATCH=-0.5, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5] autolearn=unavailable autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=google.com
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 NjnQIrTWl8fr for <tcpm@ietfa.amsl.com>; Sun, 17 Jul 2022 08:34:13 -0700 (PDT)
Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [IPv6:2a00:1450:4864:20::331]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id D5ED7C14F734 for <tcpm@ietf.org>; Sun, 17 Jul 2022 08:34:13 -0700 (PDT)
Received: by mail-wm1-x331.google.com with SMTP id l22-20020a05600c4f1600b003a2e10c8cdeso6447206wmq.1 for <tcpm@ietf.org>; Sun, 17 Jul 2022 08:34:13 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=/WWcH/f6PinTISTjvs5rrf30fgAAETlLBDWsnGqusPI=; b=RyY++yjJVrkAsf5vpbBs8VeRMwEnf9Mw4skjl9QHLXMGNZOZRoGJlbCBmls7JsMtZ7 BK0IqpHQ+hSlOVHvvSSx6xH7qgMUfX4nynC6YyUtZb7qzl/I5zkmh6lhOufzqBMPYK6G Dvt7XL/pzOvg9WnEW+1oagLUPIsFiszqX42w/szTy8/jOokvhuXnE4qVQDg+IBZfQAxG D9mlX/kqHA5SC6gVWZUoclByPY9AJr6X3rRjDEGGXTmQpcqINHu3Vf6i1oIk1GQjr9VS ffBcVxepVJqmHkYwhyFAYlZYT7HdwsCEdFxIj2H/IkfVGehPKOCmjoo99YdbFXNWlRDm Q/Aw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=/WWcH/f6PinTISTjvs5rrf30fgAAETlLBDWsnGqusPI=; b=kcrhzHgib6YAy/dEuXQtNwcxbOOSRdOnfqMyDRBPpT1vxCsLthpvJH5UX8BPgT5nZT XJwA4+WnNZCldH1Pzl6KmS0ogpfnEZrWsPeC1SC+T10Omnps7O0kqz4Rgk0G3oAJv/fD BMDcL6B4ITRlzPci0xqZez0rGQqFVp/HeclyMjA5BlPDXDiRThrJXSUoyJy5LgcZWbPD DLaiKceN+ZuMau8mBBVMGfsmsD+PyE65KfisWd9h23/3L516JJZKLcelNka84AKLm+YO 3XFMEFGilOpkOo6NYazcAdEjiVy5MpXPRvsbe3qFbhFgP7AEuP8AT9AE4eof2HLXGvQc BlXg==
X-Gm-Message-State: AJIora97a8ZUTHld3YsEOHk0Guk5JbniMzY8aQrzDAM9iMiORsoT818/ gJ27AgdbjQbJEbQNdO7RBbXH2LeL12RlRNpGxINjeEEsmtk=
X-Google-Smtp-Source: AGRyM1tuhkISxMRCRfgq11cIIYlGNg/IPm5mKRwvMdrBvqMquXHGqdMWBSWeqVINncOavy02fJ4lmCU7RfjukUXrjOk=
X-Received: by 2002:a05:600c:a47:b0:39e:f953:84e2 with SMTP id c7-20020a05600c0a4700b0039ef95384e2mr28133570wmq.202.1658072052169; Sun, 17 Jul 2022 08:34:12 -0700 (PDT)
MIME-Version: 1.0
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>
In-Reply-To: <alpine.DEB.2.21.2207150229250.7292@hp8x-60.cs.helsinki.fi>
From: Yuchung Cheng <ycheng@google.com>
Date: Sun, 17 Jul 2022 08:33:35 -0700
Message-ID: <CAK6E8=djxYk4zMAyCGM+zhmXuZ25WvGLB1jA95Y24i2KMvK4+w@mail.gmail.com>
To: Markku Kojo <kojo=40cs.helsinki.fi@dmarc.ietf.org>
Cc: Vidhi Goel <vidhi_goel@apple.com>, "tcpm@ietf.org Extensions" <tcpm@ietf.org>, Neal Cardwell <ncardwell@google.com>
Content-Type: multipart/alternative; boundary="000000000000aedf9205e401fbd8"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/bWDAD7U4WgJXD8B9qxs2MzTFWZ0>
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: Sun, 17 Jul 2022 15:34:18 -0000

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
> >>>
> >
>