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

Vidhi Goel <vidhi_goel@apple.com> Thu, 28 July 2022 17:44 UTC

Return-Path: <vidhi_goel@apple.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 BFA4FC13C524; Thu, 28 Jul 2022 10:44:05 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.088
X-Spam-Level:
X-Spam-Status: No, score=-4.088 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.582, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, MIME_HTML_ONLY=0.1, MIME_HTML_ONLY_MULTI=0.001, MIME_QP_LONG_LINE=0.001, MPART_ALT_DIFF=0.79, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_REMOTE_IMAGE=0.01, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=apple.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 YTLN7soFQWu3; Thu, 28 Jul 2022 10:44:02 -0700 (PDT)
Received: from rn-mailsvcp-ppex-lapp24.apple.com (rn-mailsvcp-ppex-lapp24.rno.apple.com [17.179.253.38]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id C4C50C1C50E2; Thu, 28 Jul 2022 10:43:56 -0700 (PDT)
Received: from pps.filterd (rn-mailsvcp-ppex-lapp24.rno.apple.com [127.0.0.1]) by rn-mailsvcp-ppex-lapp24.rno.apple.com (8.16.1.2/8.16.1.2) with SMTP id 26SHZZC9018153; Thu, 28 Jul 2022 10:43:55 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=apple.com; h=content-type : content-transfer-encoding : from : mime-version : subject : date : message-id : references : cc : in-reply-to : to; s=20180706; bh=teg/iM5mZrPNm6vz3rn9EVyGlPjhBs+scBA45hwGQeo=; b=F3XrcyTrV9CoMS6U4GuoG3n16Ua9di0DtzPHWXsHFGyNRIJn+BeuQ8s73S7yZeey4TP+ wDzk5yTFG5Qro+yIgPRma1UWPNF1QQtDiQiSirQt5/XX3XZI+AIGQC/twmWI1j7DE2VY ovaEBVI+zifnw8CmyrGXlslF0788X51bkmGeJ8EfyEStro545oen0IgCgayLG8B7MQLK pdizV8O7gfE/eXXRF6imv61NUE6WecP1LPf1uJLwlU1xawqTokErudsSpBJ/L7JIeR+e FGs3S9SKhl3u2lOjThgC7FuScSJBdH3sK7y/8bUq0YZlBY7vK0gVdM+NbW3TwN2WiUIA DQ==
Received: from ma-mailsvcp-mta-lapp04.corp.apple.com (ma-mailsvcp-mta-lapp04.corp.apple.com [10.226.18.136]) by rn-mailsvcp-ppex-lapp24.rno.apple.com with ESMTP id 3hgeka20e1-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO); Thu, 28 Jul 2022 10:43:55 -0700
Received: from ma-mailsvcp-mmp-lapp03.apple.com (ma-mailsvcp-mmp-lapp03.apple.com [17.32.222.16]) by ma-mailsvcp-mta-lapp04.corp.apple.com (Oracle Communications Messaging Server 8.1.0.18.20220407 64bit (built Apr 7 2022)) with ESMTPS id <0RFQ00KIIRX62W30@ma-mailsvcp-mta-lapp04.corp.apple.com>; Thu, 28 Jul 2022 10:43:55 -0700 (PDT)
Received: from process_milters-daemon.ma-mailsvcp-mmp-lapp03.apple.com by ma-mailsvcp-mmp-lapp03.apple.com (Oracle Communications Messaging Server 8.1.0.18.20220407 64bit (built Apr 7 2022)) id <0RFQ00200RK8X300@ma-mailsvcp-mmp-lapp03.apple.com>; Thu, 28 Jul 2022 10:43:54 -0700 (PDT)
X-Va-A:
X-Va-T-CD: 3995b166a75559493a3d304aae4b10d4
X-Va-E-CD: 41fd44ac25f22bdcc0fda8fbd071d110
X-Va-R-CD: 3f4bfd29cf6328474e486f6f244c64e7
X-Va-CD: 0
X-Va-ID: e224feb2-75f7-4d83-8bce-fb849c5902f8
X-V-A:
X-V-T-CD: 3995b166a75559493a3d304aae4b10d4
X-V-E-CD: 41fd44ac25f22bdcc0fda8fbd071d110
X-V-R-CD: 3f4bfd29cf6328474e486f6f244c64e7
X-V-CD: 0
X-V-ID: 14d93294-a807-4e07-9025-93a119d78eb0
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.517, 18.0.883 definitions=2022-07-28_06:2022-07-28, 2022-07-28 signatures=0
Received: from smtpclient.apple (unknown [17.10.80.131]) by ma-mailsvcp-mmp-lapp03.apple.com (Oracle Communications Messaging Server 8.1.0.18.20220407 64bit (built Apr 7 2022)) with ESMTPSA id <0RFQ00UE5RWYPJ00@ma-mailsvcp-mmp-lapp03.apple.com>; Thu, 28 Jul 2022 10:43:47 -0700 (PDT)
Content-type: multipart/alternative; boundary="Apple-Mail-8546C642-8D4E-4DD3-943B-314518AA7B0A"
Content-transfer-encoding: 7bit
From: Vidhi Goel <vidhi_goel@apple.com>
MIME-version: 1.0 (1.0)
Date: Thu, 28 Jul 2022 13:43:35 -0400
Message-id: <C1342BC5-CADA-4798-9A1E-52F953E71588@apple.com>
References: <391FCCC9-5653-4F0F-8C5F-73B1B4A997AF@apple.com>
Cc: Vidhi Goel <vidhi_goel=40apple.com@dmarc.ietf.org>, "tcpm@ietf.org Extensions" <tcpm@ietf.org>
In-reply-to: <391FCCC9-5653-4F0F-8C5F-73B1B4A997AF@apple.com>
To: Markku Kojo <kojo=40cs.helsinki.fi@dmarc.ietf.org>
X-Mailer: iPhone Mail (20A5312d)
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.517, 18.0.883 definitions=2022-07-28_06:2022-07-28, 2022-07-28 signatures=0
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/d_0Nqy4iovpCPzb_DeCai0uZdek>
X-Mailman-Approved-At: Fri, 29 Jul 2022 09:48:43 -0700
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: Thu, 28 Jul 2022 17:44:05 -0000

Hi Markku,

Can you review the PR? As I have adopted the change that you suggested, it might be an easy one. We would like to converge on this soon.



Thanks,
Vidhi

On Jul 24, 2022, at 2:09 PM, Vidhi Goel <vidhi_goel@apple.com> wrote:

Hi Markku,

I have updated the PR with your suggested text to converge faster. Can you take a look - https://github.com/NTAP/rfc8312bis/pull/148/" rel="nofollow">https://github.com/NTAP/rfc8312bis/pull/148/

Vidhi

On Jul 19, 2022, at 8:03 PM, Markku Kojo <kojo=40cs.helsinki.fi@dmarc.ietf.org> 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 mailing list
tcpm@ietf.org
https://www.ietf.org/mailman/listinfo/tcpm