From 4149b3cf0b2048d8a235ab313094b1e636d91671 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 20 Nov 2018 13:34:55 -0500 Subject: [PATCH 1/5] Restarting from idle Fixes #2007 --- draft-ietf-quic-recovery.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 859c17415a..a289eaa7e4 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1040,6 +1040,21 @@ As an example of a well-known and publicly available implementation of a flow pacer, implementers are referred to the Fair Queue packet scheduler (fq qdisc) in Linux (3.11 onwards). +## Resumption from idle + +A connection is idle if bytes in flight is 0 and there is nothing retransmittable +to send. In order to limit the size of bursts sent into the network, the +behavior when restarting from idle depends upon whether pacing is used. + +If pacing is used, the connection should limit the initial burst of packets to +no more than the initial congestion window and subsequent packets SHOULD be paced. +The congestion window does not change while the connection is idle. + +If pacing is not used, the congestion window SHOULD be reset to the minimum of +the current congestion window and the initial congestion window. If the +slow start threshold is larger than the congestion window, the congestion window +will grow back to the congestion window prior to idle via slow start. + ## Pseudocode ### Constants of interest From 75482c7c90e0173ae771dcd509fa7c284b8ac670 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 20 Nov 2018 13:57:50 -0500 Subject: [PATCH 2/5] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index a289eaa7e4..8d5397e120 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1042,18 +1042,20 @@ in Linux (3.11 onwards). ## Resumption from idle -A connection is idle if bytes in flight is 0 and there is nothing retransmittable -to send. In order to limit the size of bursts sent into the network, the -behavior when restarting from idle depends upon whether pacing is used. +A connection is idle if bytes in flight is 0 and there is nothing +retransmittable to send. In order to limit the size of bursts sent into the +network, the behavior when restarting from idle depends upon whether pacing is +used. If pacing is used, the connection should limit the initial burst of packets to -no more than the initial congestion window and subsequent packets SHOULD be paced. -The congestion window does not change while the connection is idle. +no more than the initial congestion window and subsequent packets SHOULD be +paced. The congestion window does not change while the connection is idle. If pacing is not used, the congestion window SHOULD be reset to the minimum of the current congestion window and the initial congestion window. If the slow start threshold is larger than the congestion window, the congestion window -will grow back to the congestion window prior to idle via slow start. +will grow back to the congestion window prior to idle via slow start. This +recommendation is based on Section 4.1 of {{?RFC5681}}. ## Pseudocode From 5d9203fc67c1d562b7bd5afea1e365577007bda6 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 20 Nov 2018 14:25:18 -0500 Subject: [PATCH 3/5] 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 8d5397e120..2ab8167951 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1043,9 +1043,10 @@ in Linux (3.11 onwards). ## Resumption from idle A connection is idle if bytes in flight is 0 and there is nothing -retransmittable to send. In order to limit the size of bursts sent into the -network, the behavior when restarting from idle depends upon whether pacing is -used. +retransmittable to send. This occurs when the connection is application +limited and after a verified retransmission timeout. In order to limit the +size of bursts sent into the network, the behavior when restarting from idle +depends upon whether pacing is used. If pacing is used, the connection should limit the initial burst of packets to no more than the initial congestion window and subsequent packets SHOULD be From 2fde7b97b2b0c8251e9391c0ff4f4c612c27e6f2 Mon Sep 17 00:00:00 2001 From: janaiyengar Date: Tue, 20 Nov 2018 15:15:49 -0500 Subject: [PATCH 4/5] 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 2ab8167951..dd841fa8d4 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1040,7 +1040,7 @@ As an example of a well-known and publicly available implementation of a flow pacer, implementers are referred to the Fair Queue packet scheduler (fq qdisc) in Linux (3.11 onwards). -## Resumption from idle +## Restart after idle A connection is idle if bytes in flight is 0 and there is nothing retransmittable to send. This occurs when the connection is application From d776217a9834a9b0017ab9002634160c0e87a145 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 20 Nov 2018 15:23:39 -0500 Subject: [PATCH 5/5] Update draft-ietf-quic-recovery.md Jana's comments --- draft-ietf-quic-recovery.md | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index dd841fa8d4..381bdd8aa4 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1042,21 +1042,20 @@ in Linux (3.11 onwards). ## Restart after idle -A connection is idle if bytes in flight is 0 and there is nothing -retransmittable to send. This occurs when the connection is application -limited and after a verified retransmission timeout. In order to limit the -size of bursts sent into the network, the behavior when restarting from idle -depends upon whether pacing is used. - -If pacing is used, the connection should limit the initial burst of packets to -no more than the initial congestion window and subsequent packets SHOULD be -paced. The congestion window does not change while the connection is idle. - -If pacing is not used, the congestion window SHOULD be reset to the minimum of -the current congestion window and the initial congestion window. If the -slow start threshold is larger than the congestion window, the congestion window -will grow back to the congestion window prior to idle via slow start. This -recommendation is based on Section 4.1 of {{?RFC5681}}. +A connection is idle if there are no bytes in flight and there is no pending +retransmittable data to send. This can occur when the connection is +application limited or after a retransmission timeout. In order to limit +the size of bursts sent into the network, the behavior when restarting from +idle depends upon whether pacing is used. + +If the sender uses pacing, the connection should limit the initial burst of +packets to no more than the initial congestion window and subsequent packets +SHOULD be paced. The congestion window does not change while the connection +is idle. + +A sender that does not use pacing SHOULD reset its congestion window to the +minimum of the current congestion window and the initial congestion window. +This recommendation is based on Section 4.1 of {{?RFC5681}}. ## Pseudocode