Re: [tcpm] draft-ietf-tcpm-prr-rfc6937bis-03: set cwnd to ssthresh exiting fast recovery?

Yoshifumi Nishida <nsd.ietf@gmail.com> Fri, 05 May 2023 18:53 UTC

Return-Path: <nsd.ietf@gmail.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 77E3EC14CE5D for <tcpm@ietfa.amsl.com>; Fri, 5 May 2023 11:53:28 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.994
X-Spam-Level:
X-Spam-Status: No, score=-6.994 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, HTTPS_HTTP_MISMATCH=0.1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, 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 (2048-bit key) header.d=gmail.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 3U0t_282y4X3 for <tcpm@ietfa.amsl.com>; Fri, 5 May 2023 11:53:24 -0700 (PDT)
Received: from mail-oa1-x36.google.com (mail-oa1-x36.google.com [IPv6:2001:4860:4864:20::36]) (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 14FD3C16B5CE for <tcpm@ietf.org>; Fri, 5 May 2023 11:51:42 -0700 (PDT)
Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-19288cce249so1686983fac.0 for <tcpm@ietf.org>; Fri, 05 May 2023 11:51:42 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1683312700; x=1685904700; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=BJTBhxCNXJm/nRt4EZkSyiDL+bU3W8vNeovd2veiVRU=; b=W1g4oVWMq7XPYrV7kQC7ZuV9dqGzPpXhtDeDJ1RjsPUmrnAfEMJu1tSjLcMslKfyRo vMREqHQY1QSKZgYrA1fCeo5JJllznIuUGjVyEpCjGqizotlT23dzxwx1axi7vlTjeiz0 hKITEVgGOBo8StUB25+FIt/XU3Zev+FQxt85e9CMsm3Yy38cOrZdHXNpIaPzurUw/Exz CxlDmgL3MCjP7b3N38lyHUveEpJay8B/Gi+U+fEd5RDHySCw/9sm+Ts54EvrsWH3PTq3 mTeNS3vqz6Oq72r2+XlefX37oO+lkSQgHDVK99JCoc9zeo6fcCV1VEGVeuuH43ddszqk IqGA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683312700; x=1685904700; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=BJTBhxCNXJm/nRt4EZkSyiDL+bU3W8vNeovd2veiVRU=; b=iOMlqAc89+JAzUhr4B4Q9661PlFZTXRkJzhHKgJzT4FaXfe56yTwG9vdSAMeI3zT4/ G62VQDzmd2jnwh7jGL8SJ+k1VsDmdY4zEMxRRbWOWo43LHvOX2v9T7yRU1ZuQ3MLs6T3 mQ+9PxbSk5UcNbZWddHVwfWCEkWQ5wo0iSd2lLqA6+D+cqgMJeGWG8nUE4KiyGiAhRgd JsTr9XiCrHUrbZFOw/GP4d0SXrpDPQLyrVk03yFV5SMMzVwNFWY920aEo4AE1wex5dlt BcIC+rRXrfXXelz2qt6SNL8Wjf4bsnaH1nJ7XIdHNTMKQnt8t+TyPeb1ZP7SZewd0Q3h tpZg==
X-Gm-Message-State: AC+VfDwb/LNl83jyMIxabRFz5O9AGobS1vPoC+qPXkAZGbm44KK2JN4x xNhJBg0U3qlP1lIAbmV6dLwaQWsc2XzArDIFp9g=
X-Google-Smtp-Source: ACHHUZ6nSgAgbCB9RO0lPQhiVZoFLqb7hM8m+MRT/hkEurOD9vpp834yPx7S3lGCPejyViD6S/51W7mjcOGSgs8qmfs=
X-Received: by 2002:a05:6870:4294:b0:187:a330:81a2 with SMTP id y20-20020a056870429400b00187a33081a2mr1502801oah.54.1683312700523; Fri, 05 May 2023 11:51:40 -0700 (PDT)
MIME-Version: 1.0
References: <CADVnQy=rbTc1rb5PKA1mvSJm61UTb=T5xzOkMBBB2Yadoe691A@mail.gmail.com> <CAK6E8=ckFHoiRTmLEy6ZH8z2ovv9+7S_UzUqnO3W4xcumyA1Gg@mail.gmail.com> <CADVnQyk7nxmaoTHh5qo9XvhrWojoB2R78FK0zX5CcwoZq6c=hg@mail.gmail.com> <CAK6E8=cXXWfHd+T3GkDEhJ6TmbstygL=qD4nns3w50DTe2eaZw@mail.gmail.com> <CADVnQy=Q5cvN_+Fa0rbNc2a_Aqe=haROOd4SNpk9TbvE1MXVvQ@mail.gmail.com> <CADVnQymCZkqRw6f8JTuFXhNXEo1KJx4S48gXaBaOPRasOVCg+Q@mail.gmail.com> <CAAK044QCh_KyFugteUo1eaez_6LipCXtJKW1rxaHqhidfRRGmQ@mail.gmail.com> <F24D815E-4932-4A84-B6C6-ECBCEB487199@netflix.com> <CAAK044QvbVHs+eFfitxpDUQOM2_vtBei-p5+ZUcatXTyYYE++g@mail.gmail.com> <CADVnQyn-Oi+0XpZMa9KLPdSMwCYpB-PQNYb0f6xRB6FeCMteoA@mail.gmail.com>
In-Reply-To: <CADVnQyn-Oi+0XpZMa9KLPdSMwCYpB-PQNYb0f6xRB6FeCMteoA@mail.gmail.com>
From: Yoshifumi Nishida <nsd.ietf@gmail.com>
Date: Fri, 05 May 2023 11:51:29 -0700
Message-ID: <CAAK044RR1Vd3tNhsUXH4Ce66BVwg_z+O-vOrACmiOzf-+avS8A@mail.gmail.com>
To: Neal Cardwell <ncardwell@google.com>
Cc: Randall Stewart <rrs@netflix.com>, tcpm <tcpm@ietf.org>, Matt Mathis <mattmathis@measurementlab.net>
Content-Type: multipart/alternative; boundary="0000000000008f8aad05faf6c7bd"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/c3LEki6XN_9snI1KmCrOM45crlc>
Subject: Re: [tcpm] draft-ietf-tcpm-prr-rfc6937bis-03: set cwnd to ssthresh exiting fast recovery?
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: Fri, 05 May 2023 18:53:28 -0000

Hi Neal,

Yes, I think I understand your point.
I prefer the current logic in some ways as it's more conservative as I
think we cannot always presume that queue has been drained at the end of
recovery.
But, I also think it may look too conservative.
I am expecting that the authors provide some insights on this point.
--
Yoshi


On Tue, May 2, 2023 at 11:31 AM Neal Cardwell <ncardwell@google.com> wrote:

> Hi Yoshi,
>
> You are right that because PRR always sets cwnd to ssthresh at the end of
> recovery, there will be some cases where with PRR cwnd jumps up drastically
> at the end of the recovery.
>
> However, AFAIK cwnd jumping up drastically, per se, is not a problem. Big
> bursts of packets going into the network is a problem. And given the
> dynamics of the alternative loss recovery algorithms (RFC6675 and PRR),
> both can allow bursts of packets; just in different circumstances:
>
> (1) RFC6675: Because RFC6675 sets cwnd once at the start of fast recovery,
> using (4.2) from RFC6675:
>
> ssthresh = cwnd = (FlightSize / 2)
>
> ...that means RFC6675 allows big bursts at the moment any loss is
> detected: any time L packets are lost, the sender can burst L more packets.
>
> (2) PRR: PRR is specifically designed to avoid big bursts in response to
> packet losses; no matter the structure or timing of the losses, PRR only
> allows a big burst at the end of Fast Recovery after all holes have been
> plugged, and the algorithm sets cwnd to ssthresh.
>
> So in your example ("For example, many packets were lost before entering
> recovery"), AFAICT RFC6675 can allow a big burst at the beginning of
> recovery, when the lost packets are detected. AFAICT in this case PRR can
> allow a burst of packets at the end of recovery when it sets cwnd to
> ssthresh, but at least at this point the bottleneck queue has potentially
> drained somewhat.
>
> Please let me know if that analysis misses something important. :-)
>
> Thanks!
> neal
>
>
> On Mon, May 1, 2023 at 5:22 PM Yoshifumi Nishida <nsd.ietf@gmail.com>
> wrote:
>
>> Hi Randall,
>>
>> I might miss something, but here's what I've thought..
>> If we lost many packets in a RTT such as the Figure 5 in the 6937bis
>> draft, I think the window growth during the recovery period will be bound
>> by PRR-CRB or PRR-SSRB.
>> Hence, I think the cwnd at the end of recovery can be smaller than we
>> expect as shown in figure 5.
>> --
>> Yoshi
>>
>> On Mon, May 1, 2023 at 4:17 AM Randall Stewart <rrs@netflix.com> wrote:
>>
>>> Hi Neal and Yoshi:
>>>
>>> Neal: So the FreeBSD implementation in rack, like linux, does the same
>>> exact thing set cwnd to ssthresh at
>>> exit from recovery.
>>>
>>> Yoshi: I don’t see how this would cause cwnd to be larger, since at the
>>> entry to recovery you set ssthresh = cwnd *  Beta. But
>>>           maybe I am missing something, can you give an example like
>>> Neal did below?
>>>
>>>
>>> Thanks
>>>
>>> R
>>>
>>> On May 1, 2023, at 5:32 AM, Yoshifumi Nishida <nsd.ietf@gmail.com>
>>> wrote:
>>>
>>> Hi Neal,
>>>
>>> If we always set cwnd to ssthresh at the end of recovery, I am guessing
>>> there will be some cases where cwnd jumps up drastically at the end of the
>>> recovery. For example, many packets were lost before entering recovery.
>>> Or, am I missing something?
>>> --
>>> Yoshi
>>>
>>> On Wed, Apr 19, 2023 at 7:37 PM Neal Cardwell <ncardwell=
>>> 40google.com@dmarc.ietf.org> wrote:
>>>
>>>> Working through examples for the "draft-ietf-tcpm-prr-rfc6937bis-03 and
>>>> RecoverFS initialization" thread this evening, I ran into another potential
>>>> issue.
>>>>
>>>> The Linux TCP implementation of PRR explicitly/directly sets cwnd to
>>>> ssthresh at the end of fast recovery (in tcp_end_cwnd_reduction()). But
>>>> this behavior is not in the algorithm in the PRR RFC or draft, at least in
>>>> the figures in section 6, Algorithms. Maybe it is in the prose somewhere
>>>> and I missed it; but in that case I'd argue strongly to put this in the
>>>> figures in section 6, Algorithms.
>>>>
>>>> AFAICT in some cases this is strictly necessary to get cwnd to grow to
>>>> reach ssthresh. Without such a direct step, cwnd could end up far below
>>>> ssthresh at the end of recovery. Here's an example to illustrate:
>>>>
>>>> CC = CUBIC
>>>>
>>>> cwnd = 10
>>>>
>>>> The reordering degree was estimated to be large, so the connection will
>>>> wait for more than 3 packets to be SACKed before entering fast recovery.
>>>>
>>>> --- Application writes 10*MSS.
>>>>
>>>> TCP sends packets P1 .. P10.
>>>> pipe = 10 packets in flight (P1 .. P10)
>>>>
>>>> --- P2..P9 SACKed  -> do nothing
>>>>
>>>> (Because the reordering degree was previously estimated to be large.)
>>>>
>>>> --- P10 SACKed -> mark P1 as lost and enter fast recovery
>>>>
>>>> PRR:
>>>> ssthresh = CongCtrlAlg() = 7 packets // CUBIC
>>>> prr_delivered = 0
>>>> prr_out = 0
>>>> RecoverFS = snd.nxt - snd.una = 10 packets (P1..P10)
>>>>
>>>> DeliveredData = 1  (P10 was SACKed)
>>>>
>>>> prr_delivered += DeliveredData   ==> prr_delivered = 1
>>>>
>>>> pipe =  0  (all packets are SACKed or lost; P1 is lost, rest are SACKed)
>>>>
>>>> safeACK = false (snd.una did not advance)
>>>>
>>>> if (pipe > ssthresh) => if (0 > 7) => false
>>>> else
>>>>   // PRR-CRB by default
>>>>   sndcnt = MAX(prr_delivered - prr_out, DeliveredData)
>>>>          = MAX(1 - 0, 1)
>>>>          = 1
>>>>
>>>>   sndcnt = MIN(ssthresh - pipe, sndcnt)
>>>>          = MIN(7 - 0, 1)
>>>>          = 1
>>>>
>>>> cwnd = pipe + sndcnt
>>>>      = 0    + 1
>>>>      = 1
>>>>
>>>> retransmit P1
>>>>
>>>> prr_out += 1   ==> prr_out = 1
>>>>
>>>> --- P1 retransmit plugs hole; receive cumulative ACK for P1..P10
>>>>
>>>> DeliveredData = 1  (P1 was newly ACKed)
>>>>
>>>> prr_delivered += DeliveredData   ==> prr_delivered = 2
>>>>
>>>> pipe =  0  (all packets are cumuatively ACKed)
>>>>
>>>> safeACK = (snd.una advances and no further loss indicated)
>>>> safeACK = true
>>>>
>>>> if (pipe > ssthresh) => if (0 > 7) => false
>>>> else
>>>>   // PRR-CRB by default
>>>>   sndcnt = MAX(prr_delivered - prr_out, DeliveredData)
>>>>          = MAX(2 - 1, 1)
>>>>          = 1
>>>>   if (safeACK) => true
>>>>     // PRR-SSRB when recovery is in good progress
>>>>     sndcnt += 1   ==> sndcnt = 2
>>>>
>>>>   sndcnt = MIN(ssthresh - pipe, sndcnt)
>>>>          = MIN(7 - 0, 2)
>>>>          = 2
>>>>
>>>> cwnd = pipe + sndcnt
>>>>      = 0    + 2
>>>>      = 2
>>>>
>>>> So we exit fast recovery with cwnd=2 even though ssthresh is 7.
>>>>
>>>> As noted above, the Linux TCP implementation does not suffer this
>>>> problem because it explicitly/directly sets cwnd to ssthresh at the end of
>>>> fast recovery.
>>>>
>>>> I would recommend including this cwnd=ssthresh step at the end of
>>>> recovery in the draft, to ensure that cwnd reaches ssthresh at the end of
>>>> fast recovery, even in cases like this where there will be insufficient
>>>> delivered data in fast recovery to allow pipe to incrementally grow to
>>>> reach ssthresh using PRR-SSRB.
>>>>
>>>> Best regards,
>>>> neal
>>>>
>>>> _______________________________________________
>>>> tcpm mailing list
>>>> tcpm@ietf.org
>>>> https://www.ietf.org/mailman/listinfo/tcpm
>>>> <https://www.google.com/url?q=https://www.ietf.org/mailman/listinfo/tcpm&source=gmail-imap&ust=1683538345000000&usg=AOvVaw2cOITQpYcuP_M95396rEmw>
>>>>
>>> _______________________________________________
>>> tcpm mailing list
>>> tcpm@ietf.org
>>>
>>> https://www.google.com/url?q=https://www.ietf.org/mailman/listinfo/tcpm&source=gmail-imap&ust=1683538345000000&usg=AOvVaw2cOITQpYcuP_M95396rEmw
>>>
>>>
>>> ------
>>> Randall Stewart
>>> rrs@netflix.com
>>>
>>>
>>>
>>>