Re: [tcpm] [EXTERNAL] Re: A review of draft-ietf-tcpm-rack-10

Yuchung Cheng <ycheng@google.com> Thu, 24 September 2020 16:31 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 C98253A105B for <tcpm@ietfa.amsl.com>; Thu, 24 Sep 2020 09:31:00 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -17.6
X-Spam-Level:
X-Spam-Status: No, score=-17.6 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=google.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Z100PpFtCfzT for <tcpm@ietfa.amsl.com>; Thu, 24 Sep 2020 09:30:58 -0700 (PDT)
Received: from mail-vs1-xe2f.google.com (mail-vs1-xe2f.google.com [IPv6:2607:f8b0:4864:20::e2f]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id AC5173A1002 for <tcpm@ietf.org>; Thu, 24 Sep 2020 09:30:58 -0700 (PDT)
Received: by mail-vs1-xe2f.google.com with SMTP id z193so1500311vsz.10 for <tcpm@ietf.org>; Thu, 24 Sep 2020 09:30:58 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=7s+fYaCuPKoq7+G26S8cdYsyT1WnlMODEsocCSTTVvE=; b=pxQPWHAAB8E89jnGJK7l8edBb2Uad4LOlby/TbENugrfmb+pEy4W9exeT+maLhVXOp FIK38dKfJPUszyV32ac0MlRCsKW1wUdoJo3XhREVWi7/k6uHrImSy1HS1lUURtObJW6q YbwQmEiVelvNV6niwNsMvbsINU6j3BUPVeES/Y9Q+WCrvIQ0T0BXhzG0iZQ3vJF3s5B4 3WcWBo5Wp06SezM19J/8e+kXPQ6RdTg6T1PPZdP5Uz6zWJIJikL9mZEghO4RP4tMsQrW 1tgeynQbLemyraxQwB3OcTtA5H6uFUxTGqZgS8AJSv0Jco/qUAl1iIJ7O95TxYZQNWi6 gaYQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=7s+fYaCuPKoq7+G26S8cdYsyT1WnlMODEsocCSTTVvE=; b=OKXXSgiV+klyq5R6nZ1W3DXXdrpp2nUNrT8zjvtD60umlRqvz3iH3/35gvgYEx5lSO DAG+F9gbnleCfnb+em/FLq41Q9YU+oKeLhTryZm05xEmJLUmgIuUqy7f+yy5AhmGyyiQ L8s5rEQ39JPLVk5lb1qm/TCqKh1A2J7Pawc+mJf3A7805p7HG/qefnNMoczIEybjOPR+ hBKLsb8ew83okHF4/JCjkSkTDlw13symytpYXQcuiS0kctSTCO2daRasOdn5yLpDBo+c aKMFqnGWoYvc/k7lf6a4EQmBZLnrC5bm/wncVjVHl8tzZPJWBfHn6GYBRIEbCAujjXNC 9r9A==
X-Gm-Message-State: AOAM532fi/TsQoprDqZnwCH5qvRPCFOay2vPoum7O2LkiblIwgWSTJyK t4ABOMnQYYNIjG1tqUsQKPDlqzf+fM43Vo7u6sGTzw==
X-Google-Smtp-Source: ABdhPJxTFzYFmj01vLTeGubvD1AvT8Q/nnLFEHRFl4MIYcDSqAl5ApbRzFTjlGsd8YJM+vtDCGz0Ujd2nskCaH6tJMc=
X-Received: by 2002:a67:fe81:: with SMTP id b1mr5266316vsr.5.1600965057322; Thu, 24 Sep 2020 09:30:57 -0700 (PDT)
MIME-Version: 1.0
References: <BN8PR00MB0865B2186EA60FE71BA6CBC9C33A1@BN8PR00MB0865.namprd00.prod.outlook.com> <CAK6E8=cUx56R1-By+4GbJsMtjsi+geJwH1PPwH=8A4Tbv=khDg@mail.gmail.com> <BN8PR00MB0865EDE924F6CFD1F7C36B3BC33A1@BN8PR00MB0865.namprd00.prod.outlook.com> <CAK6E8=eYYEhvVjgvPo4NMr63Lvwoi7XuDfxZoa2E6X2GNTJjwQ@mail.gmail.com> <DM6PR00MB0732DE0BE8715D001ACFD52EB63A1@DM6PR00MB0732.namprd00.prod.outlook.com>
In-Reply-To: <DM6PR00MB0732DE0BE8715D001ACFD52EB63A1@DM6PR00MB0732.namprd00.prod.outlook.com>
From: Yuchung Cheng <ycheng@google.com>
Date: Thu, 24 Sep 2020 09:30:20 -0700
Message-ID: <CAK6E8=fxHCE4vh3weFYsQ+CvzXQ6tBmJEfZnepOMdmza0gVZAA@mail.gmail.com>
To: Praveen Balasubramanian <pravb=40microsoft.com@dmarc.ietf.org>
Cc: Yi Huang <huanyi@microsoft.com>, "tcpm@ietf.org" <tcpm@ietf.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/XsIKrx7VBFVzSPM9YiVbuOUeZMo>
Subject: Re: [tcpm] [EXTERNAL] Re: A review of draft-ietf-tcpm-rack-10
X-BeenThere: tcpm@ietf.org
X-Mailman-Version: 2.1.29
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, 24 Sep 2020 16:31:01 -0000

On Mon, Sep 21, 2020 at 4:37 PM Praveen Balasubramanian
<pravb=40microsoft.com@dmarc.ietf.org> wrote:
>
> >> Segment.retransmitted is meant to reflect whether the most recent send is a retransmission or not
> The "most recent send" here is confusing. Why not just state that this reflects whether the segment was ever retransmitted?
We'll make the change based on your suggestions:

“Segment.retransmitted” is true if the segment has ever been
retransmitted. False otherwise.

Also RACK_detect_loss() can be further simplified by removing the
checks of Segment.retransmitted, as long as Segment.xmit_ts is
invalidated upon loss.

        “Segment.xmit_ts” is the time of the last transmission of a
data segment, including retransmissions, if any, with a clock
granularity specified in the Requirements section. A maximum value
INFINITE_TS indicates an invalid timestamp that represents that the
Segment is not currently in flight.

New RACK_detect_lost():
    timeout = 0
    RACK.reo_wnd = RACK_update_reo_wnd()

    For each segment, Segment, not acknowledged yet:
        // removed the old lines to check Segment.retransmitted
        //
        If RACK_sent_after(RACK.xmit_ts, RACK.end_seq,
                           Segment.xmit_ts, Segment.end_seq):
            remaining = Segment.xmit_ts + RACK.rtt +
                        RACK.reo_wnd - Now()
            If remaining <= 0:
                Segment.lost = TRUE
                Segment.xmit_ts = INFINITE_TS //<--- new line
            Else:
                timeout = max(remaining, timeout)
    Return timeout

So it's more clear and simpler :-)

>
> -----Original Message-----
> From: tcpm <tcpm-bounces@ietf.org> On Behalf Of Yuchung Cheng
> Sent: Monday, September 21, 2020 4:12 PM
> To: Yi Huang <huanyi=40microsoft.com@dmarc.ietf.org>
> Cc: Yuchung Cheng <ycheng=40google.com@dmarc.ietf.org>; tcpm@ietf.org
> Subject: Re: [tcpm] [EXTERNAL] Re: A review of draft-ietf-tcpm-rack-10
>
> On Mon, Sep 21, 2020 at 3:18 PM Yi Huang <huanyi=40microsoft.com@dmarc.ietf.org> wrote:
> >
> > Thanks Yuchung, I responded inline.
> >
> > -----Original Message-----
> > From: tcpm <tcpm-bounces@ietf.org> On Behalf Of Yuchung Cheng
> > Sent: Monday, September 21, 2020 2:53 PM
> > To: Yi Huang <huanyi=40microsoft.com@dmarc.ietf.org>
> > Cc: tcpm@ietf.org
> > Subject: [EXTERNAL] Re: [tcpm] A review of draft-ietf-tcpm-rack-10
> >
> > On Sun, Sep 20, 2020 at 6:16 PM Yi Huang <huanyi=40microsoft.com@dmarc.ietf.org> wrote:
> > >>
> > >> Hi,
> > >>
> > >> I reviewed the latest version of RACK-TLP draft and have a few comments/questions.
> > >>
> > >> 1. In section 5.1, "Segment.retransmitted is true if it was retransmitted in the most recent transmission."
> > >> There are also pseudo-code explaining how retransmitted flag is set. AFAICT, retransmitted is set if the segment is ever retransmitted since the flag is never reset. Is this variable supposed to mean ever retransmitted?
> > >Thanks for catching that. Segment.retransmitted MUST be reset upon a
> > >(re)transmission so it does not ever-retransmitted (i.e. it's only
> > >meant for the very last transmission)
> >
> > > RACK_transmit_data(Segment):
> > >           Segment.xmit_ts = Now()
> > >           Segment.lost = FALSE
> > >           Segment.retransmitted = FALSE
> >
> > >   RACK_retransmit_data(Segment):
> > >           RACK_transmit_data(Segment)
> > >           Segment.retransmitted = TRUE
> >
> > Sorry, I still don't quite get it. RACK_transmit_data is for previously unsent data (aka new data) right? If so, it will be only called once for a given segment. Then, RACK_retransmit_data only sets it to TRUE. So where do we reset it? Looks like we still just initialize it to FALSE and set it to TRUE upon retransmission.
>
> Apologize for this confusion. I now see better how the text and code confuse you. Segment.retransmitted is meant to reflect whether the most recent send is a retransmission or not. But since a segment can be (only) retransmitted N times consecutively, the flag is sticky throughout once set. To avoid future confusion, how about having two separate routines.
>
> /* Send newly unsent data */
> RACK_transmit_new_data(Segment):
>            Segment.xmit_ts = Now()
>            Segment.lost = FALSE
>            Segment.retransmitted = FALSE
>
> /* Retransmit previously sent data */
> RACK_retransmit_data(Segment)
>           Segment.xmit_ts = Now()
>           Segment.lost = FALSE
>           Segment.retransmitted = TRUE
>
>
> >
> > >>
> > >> 2. In section 6.2, p14,
> > >> "   If the sender has not yet observed any reordering based on the
> > >>    previous step, then RACK prioritizes quick loss recovery by using
> > >>    setting RACK.reo_wnd to 0 when the number of SACKed segments exceeds
> > >>    DupThresh, or during loss recovery.
> > >>
> > >>    Aside from those special conditions, RACK starts with a conservative
> > >>    reordering window of RACK.min_RTT/4.  This value was chosen because
> > >>    Linux TCP used the same factor in its implementation to delay Early
> > >>    Retransmit [RFC5827] to reduce spurious loss detections in the
> > >>    presence of reordering, and experience showed this worked reasonably
> > >>    well [DMCG11]."
> > >>
> > >> If I understand this correctly, if no reordering observed, TCP should still enter loss recovery when DupACK >= DupThresh (RFC6675). If reordering has been seen, this RFC6675 rule is not honored and TCP only enters loss recovery when RACK detects loss? I think it would be great to clarify this in the spec.
> >
> > > Your understanding is correct. will this text revision improves clarity"
> > > ""
> > > If no reordering has been observed based on the previous step, the sender enters Fast Recovery when the number of SACKed segments exceeds DupThresh (similar to RFC6675). The RACK.reo_wnd is set to 0 both upon entering and during the loss recovery.
> >
> > > Otherwise if some reordering has been observed, RACK does not honor
> > RFC6675 rule and starts with a conservative RACK.reo_wnd of RACK.min_RTT/4. This .... reasonably well [DMCG11].
> > > ""
> >
> > Yeah, that's pretty clear now.
> >
> > > "   If the sender has not yet observed any reordering based on the
> > >    previous step, then RACK prioritizes quick loss recovery by using
> > >    setting RACK.reo_wnd to 0 when the number of SACKed segments exceeds
> > >    DupThresh, or during loss recovery.
> > >
> > >    Aside from those special conditions, RACK starts with a conservative
> > >    reordering window of RACK.min_RTT/4.  This value was chosen because
> > >    Linux TCP used the same factor in its implementation to delay Early
> > >    Retransmit [RFC5827] to reduce spurious loss detections in the
> > >    presence of reordering, and experience showed this worked reasonably
> > >    well [DMCG11]."
> > >
> > > 3. [NIT] In section 8, " Zero window probe (ZWP) timer" -> "Zero Window Probe (ZWP) timer".
> > will fix thanks
> > >
> > > Thanks,
> > >
> > > Yi
> > >
> > > _______________________________________________
> > > tcpm mailing list
> > > tcpm@ietf.org
> > > https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.
> > > ietf.org%2Fmailman%2Flistinfo%2Ftcpm&amp;data=02%7C01%7Chuanyi%40mic
> > > ro
> > > soft.com%7C71748af3b9ae4232346008d85e78d063%7C72f988bf86f141af91ab2d
> > > 7c
> > > d011db47%7C1%7C0%7C637363220297828477&amp;sdata=eHYh0FXRGNS8T2LFq8sz
> > > gH
> > > x43Hsfwlrog%2BZxQwJyiq0%3D&amp;reserved=0
> >
> > _______________________________________________
> > tcpm mailing list
> > tcpm@ietf.org
> > https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.
> > ietf.org%2Fmailman%2Flistinfo%2Ftcpm&amp;data=02%7C01%7Cpravb%40micros
> > oft.com%7C4cc0adb558a64fedcfac08d85e83dca9%7C72f988bf86f141af91ab2d7cd
> > 011db47%7C1%7C0%7C637363267745119455&amp;sdata=GdXrtwnYavfLpVIYqrOTrDx
> > U%2FOrpC7ayXhtZSuzM%2B2U%3D&amp;reserved=0
> >
> > _______________________________________________
> > tcpm mailing list
> > tcpm@ietf.org
> > https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.
> > ietf.org%2Fmailman%2Flistinfo%2Ftcpm&amp;data=02%7C01%7Cpravb%40micros
> > oft.com%7C4cc0adb558a64fedcfac08d85e83dca9%7C72f988bf86f141af91ab2d7cd
> > 011db47%7C1%7C0%7C637363267745119455&amp;sdata=GdXrtwnYavfLpVIYqrOTrDx
> > U%2FOrpC7ayXhtZSuzM%2B2U%3D&amp;reserved=0
>
> _______________________________________________
> tcpm mailing list
> tcpm@ietf.org
> https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.ietf.org%2Fmailman%2Flistinfo%2Ftcpm&amp;data=02%7C01%7Cpravb%40microsoft.com%7C4cc0adb558a64fedcfac08d85e83dca9%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637363267745119455&amp;sdata=GdXrtwnYavfLpVIYqrOTrDxU%2FOrpC7ayXhtZSuzM%2B2U%3D&amp;reserved=0