From ceab0e21afc6c181d40ca07ca34a8d86027da7e7 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 7 Aug 2018 14:58:55 -0400 Subject: [PATCH 01/11] Discuss Application-Limited Sending Fixes #1619 --- draft-ietf-quic-recovery.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 7100c15aa4..da4188ee93 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -966,7 +966,6 @@ congestion window is less than ssthresh, which typically only occurs after an RTO. While in slow start, QUIC increases the congestion window by the number of bytes acknowledged when each ack is processed. - ## Congestion Avoidance Slow start exits to congestion avoidance. Congestion avoidance in NewReno @@ -989,6 +988,13 @@ The recovery period limits congestion window reduction to once per round trip. During recovery, the congestion window remains unchanged irrespective of new losses or increases in the ECN-CE counter. +## Application Limited Sending + +If the sender is sufficiently application limited that the congestion window is +not fully utilized, the congestion window should not be increased in slow start +or congestion avoidance. Senders should consider themselves application limited +if bytes in flight when receiving an ACK frame are more than a max datgram size +less than the congestion window. ## Tail Loss Probe @@ -1115,6 +1121,9 @@ acked_packet from sent_packets. ~~~ InRecovery(packet_number): return packet_number <= end_of_recovery + + IsAppLimited(): + bytes_in_flight >= congestion_window - kMaximumDatagramSize OnPacketAckedCC(acked_packet): // Remove from bytes_in_flight. @@ -1122,6 +1131,9 @@ acked_packet from sent_packets. if (InRecovery(acked_packet.packet_number)): // Do not increase congestion window in recovery period. return + if (IsAppLimited()) + // Do not increase congestion_window if application limited. + return if (congestion_window < ssthresh): // Slow start. congestion_window += acked_packet.bytes From a38f3f9e44b95bed81592394ecbeb5f6eb0fa97a Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 7 Aug 2018 16:05:32 -0400 Subject: [PATCH 02/11] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index da4188ee93..0f2bd7883e 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -992,9 +992,7 @@ losses or increases in the ECN-CE counter. If the sender is sufficiently application limited that the congestion window is not fully utilized, the congestion window should not be increased in slow start -or congestion avoidance. Senders should consider themselves application limited -if bytes in flight when receiving an ACK frame are more than a max datgram size -less than the congestion window. +or congestion avoidance. ## Tail Loss Probe From f49e4a4707d2733b178079d2655dbe61a60b8ef9 Mon Sep 17 00:00:00 2001 From: ianswett Date: Fri, 11 Jan 2019 16:06:56 -0500 Subject: [PATCH 03/11] Rewrite and specifically note pacing --- draft-ietf-quic-recovery.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index a56ef11e03..a07b6a9f7c 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -944,12 +944,6 @@ The recovery period limits congestion window reduction to once per round trip. During recovery, the congestion window remains unchanged irrespective of new losses or increases in the ECN-CE counter. -## Application Limited Sending - -If the sender is sufficiently application limited that the congestion window is -not fully utilized, the congestion window should not be increased in slow start -or congestion avoidance. - ## Probe Timeout Probe packets MUST NOT be blocked by the congestion controller. A sender MUST @@ -968,8 +962,7 @@ response of collapsing the congestion window on persistent congestion is functionally similar to a sender's response on a Retransmission Timeout (RTO) in TCP {{RFC5681}}. - -## Pacing +## Pacing {#pacing} This document does not specify a pacer, but it is RECOMMENDED that a sender pace sending of all in-flight packets based on input from the congestion @@ -1003,6 +996,18 @@ paces the sending of any packets in excess of the initial congestion window. A sender MAY implement alternate mechanisms to update its congestion window after idle periods, such as those proposed for TCP in {{?RFC7661}}. +## Application Limited Sending + +The congestion window should not be increased in slow start or congestion +avoidance when it is not fully utilized. The congestion window could be +under-utilized due to insufficient application data to send or flow control +limits. + +When the sender is pacing(see {{pacing}}) packets, the sender may be unable +to use the full congestion window for a period of time after receiving an +ACK due to pacing. In this case, the sender should not consider themselves +application limited and should allow the congestion window to increase. + ## Discarding Packet Number Space State When keys for a packet number space are discarded, any in-flight packets From 10f9dedbf84d828cf2d49cf3dbe9ed367e89593d Mon Sep 17 00:00:00 2001 From: ianswett Date: Fri, 11 Jan 2019 16:08:33 -0500 Subject: [PATCH 04/11] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index a07b6a9f7c..ba988ad40a 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1005,7 +1005,7 @@ limits. When the sender is pacing(see {{pacing}}) packets, the sender may be unable to use the full congestion window for a period of time after receiving an -ACK due to pacing. In this case, the sender should not consider themselves +ACK, due to pacing. In this case, the sender should not consider themselves application limited and should allow the congestion window to increase. ## Discarding Packet Number Space State From fb13365635420b3d53dd2bff388afca10f4fcf68 Mon Sep 17 00:00:00 2001 From: Martin Thomson Date: Tue, 15 Jan 2019 11:44:30 -0500 Subject: [PATCH 05/11] Update draft-ietf-quic-recovery.md Co-Authored-By: ianswett --- draft-ietf-quic-recovery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index ba988ad40a..bd0d3eff01 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1003,7 +1003,7 @@ avoidance when it is not fully utilized. The congestion window could be under-utilized due to insufficient application data to send or flow control limits. -When the sender is pacing(see {{pacing}}) packets, the sender may be unable +When the sender is pacing (see {{pacing}}) packets, the sender may be unable to use the full congestion window for a period of time after receiving an ACK, due to pacing. In this case, the sender should not consider themselves application limited and should allow the congestion window to increase. From 3fb5df177679b5a410a865ec07d139aea26d72a2 Mon Sep 17 00:00:00 2001 From: ianswett Date: Wed, 16 Jan 2019 12:26:52 -0500 Subject: [PATCH 06/11] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index bd0d3eff01..ecaafdf4fb 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1004,9 +1004,10 @@ under-utilized due to insufficient application data to send or flow control limits. When the sender is pacing (see {{pacing}}) packets, the sender may be unable -to use the full congestion window for a period of time after receiving an -ACK, due to pacing. In this case, the sender should not consider themselves -application limited and should allow the congestion window to increase. +to use the full congestion window for a period of time after receiving +acknowledgements, due to pacing. In this case, the sender should not consider +themselves application limited and should allow the congestion window to +increase. ## Discarding Packet Number Space State From f9aaa9108f058ee0f17e7d6aa2b1916f3b558bd0 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 22 Jan 2019 22:13:36 -0500 Subject: [PATCH 07/11] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 998a8af5e0..151262160e 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1162,7 +1162,8 @@ acked_packet from sent_packets. // Do not increase congestion window in recovery period. return if (IsAppLimited()) - // Do not increase congestion_window if application limited. + // Do not increase congestion_window if application + // limited. return if (congestion_window < ssthresh): // Slow start. From bb96c700706574df8f4eef144f5b4505581d51c1 Mon Sep 17 00:00:00 2001 From: Jana Iyengar Date: Mon, 28 Jan 2019 21:03:37 -0500 Subject: [PATCH 08/11] Update draft-ietf-quic-recovery.md Co-Authored-By: ianswett --- draft-ietf-quic-recovery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 151262160e..e0c4fb8624 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1049,7 +1049,7 @@ after idle periods, such as those proposed for TCP in {{?RFC7661}}. The congestion window should not be increased in slow start or congestion avoidance when it is not fully utilized. The congestion window could be -under-utilized due to insufficient application data to send or flow control +under-utilized due to insufficient application data or flow control credit. limits. When the sender is pacing (see {{pacing}}) packets, the sender may be unable From c21ced5457920324dff55376db86455a83244f7f Mon Sep 17 00:00:00 2001 From: Jana Iyengar Date: Mon, 28 Jan 2019 21:03:50 -0500 Subject: [PATCH 09/11] Update draft-ietf-quic-recovery.md Co-Authored-By: ianswett --- draft-ietf-quic-recovery.md | 1 - 1 file changed, 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index e0c4fb8624..5d806892e0 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1050,7 +1050,6 @@ after idle periods, such as those proposed for TCP in {{?RFC7661}}. The congestion window should not be increased in slow start or congestion avoidance when it is not fully utilized. The congestion window could be under-utilized due to insufficient application data or flow control credit. -limits. When the sender is pacing (see {{pacing}}) packets, the sender may be unable to use the full congestion window for a period of time after receiving From 07ef7103a505acf980bc3acb4520a890d90d8190 Mon Sep 17 00:00:00 2001 From: ianswett Date: Mon, 28 Jan 2019 21:12:56 -0500 Subject: [PATCH 10/11] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 5d806892e0..81033d110a 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1051,6 +1051,11 @@ The congestion window should not be increased in slow start or congestion avoidance when it is not fully utilized. The congestion window could be under-utilized due to insufficient application data or flow control credit. +A sender that paces packets (see {{pacing}}) might delay sending packets +and not fully utilize the congestion window due to this delay. A sender +should not consider itself application limited if it would have fully +utilized the congestion window without pacing delay. + When the sender is pacing (see {{pacing}}) packets, the sender may be unable to use the full congestion window for a period of time after receiving acknowledgements, due to pacing. In this case, the sender should not consider From 06cf5b0b2f5cf03d4fec36fcf2ebc9ee9a3218e3 Mon Sep 17 00:00:00 2001 From: ianswett Date: Mon, 28 Jan 2019 21:13:40 -0500 Subject: [PATCH 11/11] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 81033d110a..65027c3084 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1056,12 +1056,6 @@ and not fully utilize the congestion window due to this delay. A sender should not consider itself application limited if it would have fully utilized the congestion window without pacing delay. -When the sender is pacing (see {{pacing}}) packets, the sender may be unable -to use the full congestion window for a period of time after receiving -acknowledgements, due to pacing. In this case, the sender should not consider -themselves application limited and should allow the congestion window to -increase. - ## Pseudocode ### Constants of interest {#cc-consts-of-interest}