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

Neal Cardwell <ncardwell@google.com> Thu, 24 September 2020 20:27 UTC

Return-Path: <ncardwell@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 C46033A129F for <tcpm@ietfa.amsl.com>; Thu, 24 Sep 2020 13:27:39 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -17.599
X-Spam-Level:
X-Spam-Status: No, score=-17.599 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, RCVD_IN_DNSWL_NONE=-0.0001, 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 UgNDXh8KBsSC for <tcpm@ietfa.amsl.com>; Thu, 24 Sep 2020 13:27:37 -0700 (PDT)
Received: from mail-vk1-xa29.google.com (mail-vk1-xa29.google.com [IPv6:2607:f8b0:4864:20::a29]) (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 3E2FE3A129D for <tcpm@ietf.org>; Thu, 24 Sep 2020 13:27:37 -0700 (PDT)
Received: by mail-vk1-xa29.google.com with SMTP id m8so105508vka.6 for <tcpm@ietf.org>; Thu, 24 Sep 2020 13:27:36 -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; bh=ayzAc5mGY9MSG4+5inrPTFf7XJkG6N1Sv4yQ/MVawX0=; b=iW8JQ3WljEqlhbbe+J7XRzNoOk4sUW59kPRF/SxmKB/JXuFDW9tQ3Zt8UZML4qkkZO w103y14x5APdzvXRYNxTpGSpRHrVrDZfRpmfkwC6FOLv0L3GeXqj7BLtPs3rIVBQjW2Y XltAVeAjAKIVaA1yktJOQN8jKg2hdVeTUNZrUwbGKsowCL6YulFKF+g7Oy3ppmVxxlh0 Pij2A8xYtvBkmubOGld3357YqyUEoavagXT/nDrbFGEWuvwi2zHg2x0iZKHwn3kUBoWH Ntsfu2LmvNzSbCUON30boHJ/Y5ijsaPTTw8zzuWGpr6RoNxGt7GF8C44+Ri1YS2xaNah l/ng==
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; bh=ayzAc5mGY9MSG4+5inrPTFf7XJkG6N1Sv4yQ/MVawX0=; b=IJqk4tiC/sEPKp0NrdASrjjzGb5tuI+1oai/eifBpPcNIeeKhz2W52+IeKe7k53JSu n39DAHySPI0dcuz7nuSrqgUjVoCtsj6CbPcsB32oAC43cDQWvtCWsJM9ZHpkS9AIon8Z xm3pdwTsZJ9PwLSiouQpFMwQjcn55lN3fsxYCEAvJtZHbszDTdenBOahKvNwEKB5Daui dSHxo4TI7q8ecSOtNHHG3owcjjFGQKAU7qAukDkArWViel1GuXkmfXgp8EkmIFwVaRw5 JQUmysCfxN6xvXoxlpqYQudhLuyC3zo0tUsMtv1+K7ZfHM7EBBLvi8pYIM6RsX21GVkK SoyQ==
X-Gm-Message-State: AOAM533685HCSsHYhwzp+j9+9qo/3Ojd19CWSoSMxk0kcgX0nEN/OM6c yKAEIwkZ3xZGXqsH6dxSefX/VLanUzst67hqIuiDO/a2PUt10w==
X-Google-Smtp-Source: ABdhPJy24Iq/v162H91wDim//PCLbYseuov+uwomf6KtMrxK2p8fri2cFTkoECEzBbl2EqkfHlrRMAL/8wyR8/XjYFE=
X-Received: by 2002:a1f:9c04:: with SMTP id f4mr973082vke.14.1600979255813; Thu, 24 Sep 2020 13:27:35 -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> <CAK6E8=fxHCE4vh3weFYsQ+CvzXQ6tBmJEfZnepOMdmza0gVZAA@mail.gmail.com> <BYAPR00MB0870DBCD83EC5F2F62D609D8C3391@BYAPR00MB0870.namprd00.prod.outlook.com>
In-Reply-To: <BYAPR00MB0870DBCD83EC5F2F62D609D8C3391@BYAPR00MB0870.namprd00.prod.outlook.com>
From: Neal Cardwell <ncardwell@google.com>
Date: Thu, 24 Sep 2020 16:27:19 -0400
Message-ID: <CADVnQymw8DNLnONnJZ1BquLGaDEi3M+wg_N-eKxhJTh0dtS4mg@mail.gmail.com>
To: Yi Huang <huanyi=40microsoft.com@dmarc.ietf.org>
Cc: Yuchung Cheng <ycheng@google.com>, Praveen Balasubramanian <pravb=40microsoft.com@dmarc.ietf.org>, "tcpm@ietf.org" <tcpm@ietf.org>
Content-Type: multipart/alternative; boundary="000000000000d6603805b0150704"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/GWZBiPf4MhXujW3Q8jq7hE1j9MM>
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 20:27:40 -0000

On Thu, Sep 24, 2020 at 4:15 PM Yi Huang <huanyi=
40microsoft.com@dmarc.ietf.org> wrote:

> Yes, this is much better. You could also change the loop condition to "For
> each unacknowledged and not lost segment, Segment:" and you wouldn't need
> INFINITE_TS, which sounds a bit more intuitive to me. Or even simpler "For
> each segment, Segment, not lost yet" since it is usually assumed that
> cumulatively ACKed segments are no longer being tracked. Anyway, the new
> pseudocode and text look pretty good.
>

Expressing this as "For each unacknowledged and not lost segment, Segment:"
or "For each segment, Segment, not lost yet" might be a little unclear or
ambiguous. The issue is that we do want to consider in this loop the
segments that were marked lost but then later retransmitted.  The way
Yuchung expressed the loop condition avoids that issue.

best,
neal



>
> -----Original Message-----
> From: Yuchung Cheng <ycheng@google.com>
> Sent: Thursday, September 24, 2020 9:30 AM
> To: Praveen Balasubramanian <pravb=40microsoft.com@dmarc.ietf.org>
> Cc: Yi Huang <huanyi@microsoft.com>; tcpm@ietf.org
> Subject: Re: [tcpm] [EXTERNAL] Re: A review of draft-ietf-tcpm-rack-10
>
> 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%40m
> > > > ic
> > > > ro
> > > > soft.com%7C71748af3b9ae4232346008d85e78d063%7C72f988bf86f141af91ab
> > > > 2d
> > > > 7c
> > > > d011db47%7C1%7C0%7C637363220297828477&amp;sdata=eHYh0FXRGNS8T2LFq8
> > > > sz
> > > > 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%40micr
> > > os
> > > oft.com%7C4cc0adb558a64fedcfac08d85e83dca9%7C72f988bf86f141af91ab2d7
> > > cd
> > > 011db47%7C1%7C0%7C637363267745119455&amp;sdata=GdXrtwnYavfLpVIYqrOTr
> > > Dx
> > > 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%40micr
> > > os
> > > oft.com%7C4cc0adb558a64fedcfac08d85e83dca9%7C72f988bf86f141af91ab2d7
> > > cd
> > > 011db47%7C1%7C0%7C637363267745119455&amp;sdata=GdXrtwnYavfLpVIYqrOTr
> > > Dx
> > > 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%7Chuanyi%40micro
> > soft.com%7C5ea6a38c3c0b4fb518a908d860a7379b%7C72f988bf86f141af91ab2d7c
> > d011db47%7C1%7C0%7C637365619031782885&amp;sdata=BZRLTHuxck9GSyKvC%2BSA
> > PIPbcEUU3MS0oC7%2Bd08Idgc%3D&amp;reserved=0
> _______________________________________________
> tcpm mailing list
> tcpm@ietf.org
> https://www.ietf.org/mailman/listinfo/tcpm
>