Re: [quicwg/base-drafts] Add more context and text around ACK frequency (#3706)

Martin Thomson <notifications@github.com> Thu, 28 May 2020 03:57 UTC

Return-Path: <noreply@github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 3F8723A0BC4 for <quic-issues@ietfa.amsl.com>; Wed, 27 May 2020 20:57:54 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -3.101
X-Spam-Level:
X-Spam-Status: No, score=-3.101 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=github.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 NVw5U2Bniwpg for <quic-issues@ietfa.amsl.com>; Wed, 27 May 2020 20:57:52 -0700 (PDT)
Received: from out-20.smtp.github.com (out-20.smtp.github.com [192.30.252.203]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 26B4E3A0BD2 for <quic-issues@ietf.org>; Wed, 27 May 2020 20:57:52 -0700 (PDT)
Received: from github-lowworker-943b171.ac4-iad.github.net (github-lowworker-943b171.ac4-iad.github.net [10.52.22.59]) by smtp.github.com (Postfix) with ESMTP id 679868C05A7 for <quic-issues@ietf.org>; Wed, 27 May 2020 20:57:51 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1590638271; bh=FhohoURhALYySB13kGx6jQzqtb/MinOpkzphLuopt/I=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=bbq6aAT3a7WTuSoMKYvMo6miL4SpjEnM5j+7SSTlWxCFDM9N4wzxi4CvQVmfBMH5I OYFok8qijK2ZRlDhqTMOToOHYLT0Vh7Gi1x3O3XKldON0wpnTEF/Gm6cb0xoOPTdHm vz6cfbhEAKzrHkTSXaLEkfv8bRtgBUrXidJJcQ7M=
Date: Wed, 27 May 2020 20:57:51 -0700
From: Martin Thomson <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+AFTOJKYL7PLHPHTPFBVIB4N43ML37EVBNHHCKUVTR4@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/pull/3706/review/419755966@github.com>
In-Reply-To: <quicwg/base-drafts/pull/3706@github.com>
References: <quicwg/base-drafts/pull/3706@github.com>
Subject: Re: [quicwg/base-drafts] Add more context and text around ACK frequency (#3706)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5ecf36bf56db9_6fe53fc836ccd95c185182"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: martinthomson
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/-GbHbtgeEyLujxJWWPfpkHPIAHM>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 28 May 2020 03:58:01 -0000

@martinthomson commented on this pull request.

This is a little too strong in its current form, I think.

> @@ -3413,17 +3421,10 @@ Similarly, packets marked with the ECN Congestion Experienced (CE) codepoint in
 the IP header SHOULD be acknowledged immediately, to reduce the peer's response
 time to congestion events.
 
-As an optimization, a receiver MAY process multiple packets before sending any
-ACK frames in response.  In this case the receiver can determine whether an
-immediate or delayed acknowledgement should be generated after processing
-incoming packets.
-
-Packets containing PADDING frames are considered to be in flight for congestion
-control purposes {{QUIC-RECOVERY}}. Sending only PADDING frames might cause the
-sender to become limited by the congestion controller with no acknowledgments
-forthcoming from the receiver. Therefore, a sender SHOULD ensure that other
-frames are sent in addition to PADDING frames to elicit acknowledgments from
-the receiver.
+The algorithms in {{QUIC-RECOVERY}} are resilient to receivers that do not

do we want to add "generally" to "resilient"?  Or, "in principle"?  Or "in theory"?

> +which could prevent the connection from ever becoming idle. Note that
+non-ack-eliciting packets are eventually acknowledged when the endpoint sends an
+ACK frame in response to other events.

```suggestion
which could prevent the connection from ever becoming idle.
Non-ack-eliciting packets are eventually acknowledged when the endpoint sends an
ACK frame in response to other events.
```

> +A receiver determines how frequently to send acknowledgements in response to
+ack-eliciting packets. Under normal circumstances, reducing the frequency of
+acknowledgement packets can improve connection and endpoint performance in
+several ways, such as reducing computational cost at both endpoints, and
+improving connection throughput on severely asymmetric links.

You need to phrase this more as a trade-off.  This is concentrated on the benefits of reducing acknowledgments.  But the introduction here also needs to recognize that generating acknowledgments in a timely fashion is critical for performance.

> -one ACK-frame-only packet in response to receiving an ack-eliciting packet.  An
-endpoint MUST NOT send a non-ack-eliciting packet in response to a
-non-ack-eliciting packet, even if there are packet gaps which precede the
-received packet. Limiting ACK frames avoids an infinite feedback loop of
-acknowledgements, which could prevent the connection from ever becoming idle.
-However, the endpoint acknowledges non-ACK-eliciting packets when it sends an
-ACK frame.
+### Acknowledgement Frequency
+
+A receiver determines how frequently to send acknowledgements in response to
+ack-eliciting packets. Under normal circumstances, reducing the frequency of
+acknowledgement packets can improve connection and endpoint performance in
+several ways, such as reducing computational cost at both endpoints, and
+improving connection throughput on severely asymmetric links.
+
+However, there are undesirable consequences to a receiver simply reducing the

If you balance the first paragraph out, then you don't need a "however" here.  You can just talk in more detail about the advantages of more frequent acknowledgment.

> +acknowledgement frequency, especially to an arbitrary fixed value. A sender
+relies on receipt of acknowledgements to determine the amount of data in flight
+and to detect loss; see {{QUIC-RECOVERY}}. Loss detection can be delayed with
+late acknowledgements. Window-based congestion controllers, such as the one
+defined in {{QUIC-RECOVERY}}, rely on receipt of acknowledgments to increase
+their sending rate. Consequently, a connection can suffer performance penalties

If you move the general statement at the end of this to the first paragraph, then you can probably shorten this paragraph to: 

> Endpoints rely on timely acknowledgment to detect loss; see Section X of {{QUIC-RECOVERY}}.  Window-based congestion controllers, such as the one in Section X of {{QUIC-RECOVERY}} rely on acknowledgments to manage their sending rate.  In both cases, delaying acknowledgment can adversely affect performance.

We don't need the specific dig regarding the "arbitrary fixed value".

> +Further research and experimentation will yield effective mechanisms to balance
+this tradeoff. Meanwhile, this document provides the following guidance:
+{{sending-acknowledgements}}, a receiver SHOULD generate an ACK frame for at
+least every second ack-eliciting packet. This recommendation is in keeping with

A receiver SHOULD send an ACK frame after receiving at least two ack-eliciting packets.  Better knowledge of network conditions or further research and experimentation might suggest alternative acknowledgment strategies with better performance characteristics.  This recommendation is general in nature and consistent with recommendations for TCP endpoint behavior {{?RFC5681}}.

> @@ -3555,6 +3566,16 @@ messages are delayed or lost.  Note that the same limitation applies to other
 data sent by the server protected by the 1-RTT keys.
 
 
+### Other Considerations

I'm sure that we can do better than "Other Considerations" here.

```suggestion
### PADDING Frames Consume Congestion Window
```

> @@ -3555,6 +3566,16 @@ messages are delayed or lost.  Note that the same limitation applies to other
 data sent by the server protected by the 1-RTT keys.
 
 
+### Other Considerations
+
+Packets containing PADDING frames are considered to be in flight for congestion
+control purposes {{QUIC-RECOVERY}}. Sending only PADDING frames might cause the
+sender to become limited by the congestion controller with no acknowledgments
+forthcoming from the receiver. Therefore, a sender SHOULD ensure that other
+frames are sent in addition to PADDING frames to elicit acknowledgments from

```suggestion
frames are sent periodically in addition to PADDING frames to elicit acknowledgments from
```

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3706#pullrequestreview-419755966