Re: comments on QUIC Recovery -24.

G Fairhurst <gorry@erg.abdn.ac.uk> Sun, 17 November 2019 06:24 UTC

Return-Path: <gorry@erg.abdn.ac.uk>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 8E1BD120088 for <quic@ietfa.amsl.com>; Sat, 16 Nov 2019 22:24:28 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.897
X-Spam-Level:
X-Spam-Status: No, score=-1.897 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
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 P05c2G400gBu for <quic@ietfa.amsl.com>; Sat, 16 Nov 2019 22:24:25 -0800 (PST)
Received: from pegasus.erg.abdn.ac.uk (pegasus.erg.abdn.ac.uk [137.50.19.135]) by ietfa.amsl.com (Postfix) with ESMTP id 3EEC912007C for <quic@ietf.org>; Sat, 16 Nov 2019 22:24:24 -0800 (PST)
Received: from dhcp-8f24.meeting.ietf.org (dhcp-8f24.meeting.ietf.org [31.133.143.36]) by pegasus.erg.abdn.ac.uk (Postfix) with ESMTPSA id A91AB1B002B3; Sun, 17 Nov 2019 06:24:20 +0000 (GMT)
Message-ID: <5DD0E791.6000501@erg.abdn.ac.uk>
Date: Sun, 17 Nov 2019 14:24:17 +0800
From: G Fairhurst <gorry@erg.abdn.ac.uk>
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:12.0) Gecko/20120428 Thunderbird/12.0.1
MIME-Version: 1.0
To: Ian Swett <ianswett@google.com>
CC: "quic@ietf.org" <quic@ietf.org>
Subject: Re: comments on QUIC Recovery -24.
References: <5DCD3819.5050300@erg.abdn.ac.uk> <CAKcm_gNX8oMa=0q-RmCQXfwESksS+VH7ZEZhFB23uNM4LCHOLw@mail.gmail.com>
In-Reply-To: <CAKcm_gNX8oMa=0q-RmCQXfwESksS+VH7ZEZhFB23uNM4LCHOLw@mail.gmail.com>
Content-Type: text/plain; charset="UTF-8"; format="flowed"
Content-Transfer-Encoding: 8bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/1KIoGmQDq0CccLEupD9YY_5vE9E>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 17 Nov 2019 06:24:28 -0000

I now believe these will be fixed in the next revision.

Gorry

(P.S. The timer initialisation issue was tracked down to one word and 
other edit, rather than a real issue - both now resolved in new text 
from Jana.)

On 16/11/2019, 19:05, Ian Swett wrote:
> Thanks for the review, comments below and fixes in PR #3237 
> <https://github.com/quicwg/base-drafts/pull/3237>
>
> On Thu, Nov 14, 2019 at 6:19 AM G Fairhurst <gorry@erg.abdn.ac.uk 
> <mailto:gorry@erg.abdn.ac.uk>> wrote:
>
>     QUIC Recovery
>
>     I have comments on QUIC Recovery -24. These sets of come join two
>     parts,
>     this is the first. I hope most of the comments below are easy to
>     resolve:
>
>     Section 3, Para 1 last sentence. This sentence is true from the
>     sender
>     perspective, but the monotonic increase is not necessarily true at
>     the
>     receiver.
>
>
> Fixed.
>
>
>     Section 3.1.2, Para 1
>     /is declared is acknowledged/
>     - maybe would be easier to read as /is declared as acknowledged/.
>
> These were 3.1.3, not 3.1.3 FYI.  This has already been improved to
> "QUIC starts a loss epoch when a packet is lost and ends one when any 
> packet
> sent after the epoch starts is acknowledged." in the editor's copy.
>
>     Section 3.1.2, Para 1
>     /QUIC will do it correctly once/
>     - There is an inference that TCP does not, and I would argue with
>     that,
>     because TCP measures the TCP loss recovery, that is often a larger
>     interval than it could have been had TCP been designed
>     differently, but
>     this document is not a thesis on TCP. I would like to suggest / QUIC
>     will appropriately reduce once/ as a more neutral text.
>
>
>  Removed "correctly"
>
>     Section 3.1.6, Para 1
>     /allowing a peer to maintain a more accurate/ is I think an
>     unnecessary
>     judgment on TCP again, it would be fairer to say/allowing a peer to
>     maintain an accurate/
>
>
> I disagree.  This is a new mechanism(explicit ack delay in the ACK 
> frame) to improve the accuracy of RTT which TCP does not have.  If 
> it's not more accurate, QUIC is wasting bytes sending it.
>
>
>     The term /host delay/ appears several times, but there is no
>     discussion
>     of hosts, only endpoints. The term host delay seems odd, can we
>     call it
>     endpoint delay or perhaps even “ACK delay” which I think is closer to
>     the field used for this later in the spec?
>
>
> Good point.  It seems like ACK delay is a reasonable substitute, but 
> you can verify in my PR.
>
>
>     Section 4.1, final sentence
>     /Ensuring that RTT estimates retain sufficient history is an open
>     research question/
>     - This is fine for an IRTF experiment, but really rests very
>     uncomfortably in a standards track specification. I suggest this
>     alone
>     is not sufficient. An alternate could be to set some bound here
>     that at
>     least mitigates this - which could otherwise result in odd
>     pathologies.
>
>
> I'm not sure how to address this, but I also don't have a problem with 
> the existing text.  Do you have a specific suggestion?
>
>
>     Somewhere there is this (it's in several places):
>     /smoothed RTT = latest RTT/
>     - This needs to cite an RFC.
>
>
> RFC6298 is cited twice in section 4 "Estimating the Round-Trip Time", 
> particularly in regards to smoothed RTT.  Is there another RFC you 
> have in mind?
>
>     - I'm not a huge fan of just assigning a RTT (without taking
>     account of
>     the variance) as a starting timeout. We've in the past been caught so
>     many times with things being slightly or vastly different when the
>     next
>     flow starts and simply assigning the value seems like it could be the
>     wrong thing to do.
>
>
> The timeout is twice the initial RTT if there are no RTT samples or 
> the PTO(SRTT+4*RTTVAR) if there is an RTT sample.  Which of those 
> cases concerns you?
> I believe Issue #2789 
> <https://github.com/quicwg/base-drafts/issues/2789> is open for this?
>
>
>     Section 4 pseudo code uses both Ack_Delay and ack_delay, I don’t
>     understand the difference.
>
>
> I can't find a spot in the psuedocode where Ack_Delay is used, but I 
> do see the use of "Ack Delay" in some text and ack_delay in others.  
> Are you suggesting changes there?
>
>
>     Section 5
>     This uses /ack/ and /ACK/
>     - is there a difference?
>
>
> ACK frame is used in some cases and acknowledgement should be used in 
> others.  I tried to fix the issues I found in the PR.
>
>
>     Section 5.1.
>     /was sent long enough in the past/
>     - This isn’t clear, please improve the text here to explain what is
>     intended.
>
> Section 5.1.2 is referenced in this section and explains this in 
> detail.  Do you have a suggested reword for this sentence?
>
>     /sent later was delivered, while …. /
>     - Text should be improved. I suggest /while/ is reworked to avoid the
>     inference these occur in parallel.
>
>
> 'while' changed to 'and'.
>
>
>     Section 5.1.1
>     There is no minimum dupack threshold specified. Why not? I could be
>     persuaded that the recommendation was for 3, and that more is
>     possible,
>     but when would less than 3 fit with current other recommendations
>     in the
>     RFC series ?
>     - also mentioned in B.1
>
>
> Is there an RFC I can cite that specifies a minimum?  5681 specifies 
> 3, but I can't see any discussion of minimum.
>
>
>     Also 5.4 final sentence
>     - section 6 (last para -1) reads like this is intended as one “probe”
>     packet, XXX what does RACK do in this cased with respect to CC?
>
>
> Maybe you can quote the sentence and clarify your concerns?  I'm not 
> sure of the question here.
>
>
>     Section 5.3, final sentence:
>     /may never be/
>     - seems like it would avoid all possible ambiguity in whether this is
>     allowed by using /could/.
>
>
> It's certainly allowed.  Are you suggesting 'could never be'?
>
>
>     /Sending two packets on a PTO expiration increases resilience…/
>     - and arguably doubles the non-congestion-controlled load. 
>
>
>     Section 6.1
>     /endpoints are permitted to experiment/
>     - This is much more than intent of RFC8311. The intent was that
>     the IETF
>     can publish experimental specs for other behaviours. That’s not the
>     same, and I think the wording needs to be modified a little to
>     reflect
>     the actual consensus of the RFC.
>
>
> Do you have suggested text?
>
>
>     Section 6.2
>     /anytime/any time/
>
> Good call.
>
>     Section 6.9
>     - the new text on pacing seems to be heading in the correct
>     direction,
>     but I don’t really understand how the congestion window will be
>     managed
>     if pacing is used and the connection becomes application-limited. The
>     basic TCP spec would respond aggressively reducing the window; cwv
>     would
>     loosen this; what does QUIC say when pacing *is* used.
>
>
> I believe this is the relevant text:
>  A sender MAY implement alternative mechanisms to update its
>  congestion window after periods of under-utilization, such as those
>  proposed for TCP in [RFC7661].
>
> ie: You can reduce it, but you don't have to.
>
>
>     Section 7.3
>     /as having being marked/ should I think be /as having being
>     CE-marked or
>     lost/
>     - add loss.
>
> I believe "when the packet is acknowledged" takes care of this case, 
> since if a packet is acknowledged it is not lost.
>
>     section A.1 para 2.
>     - I suggest text is added that mentions the actual reordering
>     could be
>     larger and how QUIC handles this.
>
>
> Larger than what?  1RTT?
>
>
>     Section A4 - could the initialisation be clearer? - e.g. showing
>     initial
>     values for RTT etc.
>
>
> The initial RTT never changes during a connection, since it's only 
> used prior to measuring the RTT, so the pseudocode uses kIntialRtt and 
> smoothed_rtt is initialized to 0 to indicate its unknown.