From d2eae3ff88e64a67ad605f58a6f981b14fd26739 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sun, 21 Jul 2019 15:43:39 -0400 Subject: [PATCH 01/16] MinRTT for the congestion control context Also explains what happens to MinRTT if the path RTT changes. Fixes #2908 --- draft-ietf-quic-recovery.md | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index fc55bb4f33..8c8782c797 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -326,10 +326,10 @@ the peer. For Initial and Handshake packets, a max_ack_delay of 0 is used. At a high level, an endpoint measures the time from when a packet was sent to when it is acknowledged as a round-trip time (RTT) sample. The endpoint uses RTT samples and peer-reported host delays ({{host-delay}}) to generate a -statistical description of the connection's RTT. An endpoint computes the +statistical description of the path's RTT. An endpoint computes the following three values: the minimum value observed over the lifetime of the -connection (min_rtt), an exponentially-weighted moving average (smoothed_rtt), -and the variance in the observed RTT samples (rttvar). +congestion control context (min_rtt), an exponentially-weighted moving average +(smoothed_rtt), and the variance in the observed RTT samples (rttvar). ## Generating RTT samples {#latest-rtt} @@ -371,9 +371,11 @@ retain sufficient history is an open research question. ## Estimating min_rtt {#min-rtt} -min_rtt is the minimum RTT observed over the lifetime of the connection. -min_rtt is set to the latest_rtt on the first sample in a connection, and to the -lesser of min_rtt and latest_rtt on subsequent samples. +min_rtt is the minimum RTT observed for a given congestion control context. +min_rtt is set to the latest_rtt on the first RTT sample, and to the lesser +of min_rtt and latest_rtt on subsequent samples. min_rtt is used to reject +implausible RTT samples, but is not used directly in congestion control or +loss recovery. An endpoint uses only locally observed times in computing the min_rtt and does not adjust for host delays reported by the peer ({{host-delay}}). Doing so @@ -381,6 +383,11 @@ allows the endpoint to set a lower bound for the smoothed_rtt based entirely on what it observes (see {{smoothed-rtt}}), and limits potential underestimation due to erroneously-reported delays by the peer. +The RTT for the path may change over time. If the real path RTT decreases, +it should be observed quickly. If the real path RTT increases, it will not +be observed, but the impact is limited to allowing some RTT samples that are +smaller than the new RTT be included in smoothed_rtt. + ## Estimating smoothed_rtt and rttvar {#smoothed-rtt} smoothed_rtt is an exponentially-weighted moving average of an endpoint's RTT @@ -410,11 +417,11 @@ endpoint: min_rtt. This limits the underestimation that a misreporting peer can cause to the smoothed_rtt. -On the first RTT sample in a connection, the smoothed_rtt is set to the +On the first RTT sample in a congestion control context, the smoothed_rtt is set to the latest_rtt. smoothed_rtt and rttvar are computed as follows, similar to {{?RFC6298}}. On -the first RTT sample in a connection: +the first RTT sample in a congestion control context: ~~~ smoothed_rtt = latest_rtt From eead856d0a445f35be1f55f0823c759a53ab9eab Mon Sep 17 00:00:00 2001 From: ianswett Date: Sun, 21 Jul 2019 15:45:16 -0400 Subject: [PATCH 02/16] Fix a long line --- draft-ietf-quic-recovery.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 8c8782c797..8408beb7b6 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -417,8 +417,8 @@ endpoint: min_rtt. This limits the underestimation that a misreporting peer can cause to the smoothed_rtt. -On the first RTT sample in a congestion control context, the smoothed_rtt is set to the -latest_rtt. +On the first RTT sample in a congestion control context, the smoothed_rtt is +set to the latest_rtt. smoothed_rtt and rttvar are computed as follows, similar to {{?RFC6298}}. On the first RTT sample in a congestion control context: From 32ee7e524d6582a317cb4ec3ffbd23263a6040d0 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sun, 21 Jul 2019 17:45:11 -0400 Subject: [PATCH 03/16] Update draft-ietf-quic-recovery.md Co-Authored-By: Jana Iyengar --- 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 8408beb7b6..04164c86eb 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -383,7 +383,7 @@ allows the endpoint to set a lower bound for the smoothed_rtt based entirely on what it observes (see {{smoothed-rtt}}), and limits potential underestimation due to erroneously-reported delays by the peer. -The RTT for the path may change over time. If the real path RTT decreases, +The RTT for a path may change over time. If a path's actual RTT decreases, it should be observed quickly. If the real path RTT increases, it will not be observed, but the impact is limited to allowing some RTT samples that are smaller than the new RTT be included in smoothed_rtt. From f0169fe1e0568effdc7307ea1613750e70b06056 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sun, 21 Jul 2019 17:45:58 -0400 Subject: [PATCH 04/16] Update draft-ietf-quic-recovery.md Co-Authored-By: Jana Iyengar --- 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 04164c86eb..f5f7a154d2 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -385,7 +385,7 @@ due to erroneously-reported delays by the peer. The RTT for a path may change over time. If a path's actual RTT decreases, it should be observed quickly. If the real path RTT increases, it will not -be observed, but the impact is limited to allowing some RTT samples that are +the min_rtt will not adapt to it, potentially causing future RTT samples that are smaller than the new RTT be included in smoothed_rtt. ## Estimating smoothed_rtt and rttvar {#smoothed-rtt} From 9c1e11a0221952729437f0692ca8a079b4102523 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sun, 21 Jul 2019 17:46:23 -0400 Subject: [PATCH 05/16] Update draft-ietf-quic-recovery.md Co-Authored-By: Jana Iyengar --- 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 f5f7a154d2..784d99087d 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -384,7 +384,7 @@ what it observes (see {{smoothed-rtt}}), and limits potential underestimation due to erroneously-reported delays by the peer. The RTT for a path may change over time. If a path's actual RTT decreases, -it should be observed quickly. If the real path RTT increases, it will not +the min_rtt will adapt immediately on the first low sample. If the path's actual RTT increases, the min_rtt will not adapt to it, potentially causing future RTT samples that are smaller than the new RTT be included in smoothed_rtt. From c1604ae7dcaed0cd4cf624c946e5470bb887efa4 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sun, 21 Jul 2019 17:47:24 -0400 Subject: [PATCH 06/16] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 784d99087d..fff9be1316 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -384,9 +384,9 @@ what it observes (see {{smoothed-rtt}}), and limits potential underestimation due to erroneously-reported delays by the peer. The RTT for a path may change over time. If a path's actual RTT decreases, -the min_rtt will adapt immediately on the first low sample. If the path's actual RTT increases, -the min_rtt will not adapt to it, potentially causing future RTT samples that are -smaller than the new RTT be included in smoothed_rtt. +the min_rtt will adapt immediately on the first low sample. If the path's +actual RTT increases, the min_rtt will not adapt to it, allowing future +RTT samples that are smaller than the new RTT be included in smoothed_rtt. ## Estimating smoothed_rtt and rttvar {#smoothed-rtt} From 691c21c96f7c4f364d0e80d1cc7f41a65acc0253 Mon Sep 17 00:00:00 2001 From: ianswett Date: Mon, 13 Jan 2020 16:17:41 -0500 Subject: [PATCH 07/16] Use path, not congestion control context --- draft-ietf-quic-recovery.md | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 370c803d1f..9e82efd589 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -250,9 +250,9 @@ At a high level, an endpoint measures the time from when a packet was sent to when it is acknowledged as a round-trip time (RTT) sample. The endpoint uses RTT samples and peer-reported host delays (see Section 13.2 of {{QUIC-TRANSPORT}}) to generate a statistical description of the path's RTT. -An endpoint computes the following three values observed during the congestion -control context: the minimum value (min_rtt), an exponentially-weighted moving -average (smoothed_rtt), and the variance in the observed RTT samples (rttvar). +An endpoint computes the following three values for each path: the minimum +value (min_rtt), an exponentially-weighted moving average (smoothed_rtt), +and the variance in the observed RTT samples (rttvar). ## Generating RTT samples {#latest-rtt} @@ -294,11 +294,10 @@ retain sufficient history is an open research question. ## Estimating min_rtt {#min-rtt} -min_rtt is the minimum RTT observed for a given congestion control context. -min_rtt is set to the latest_rtt on the first RTT sample, and to the lesser -of min_rtt and latest_rtt on subsequent samples. min_rtt is used to reject -implausible RTT samples, but is not used directly in congestion control or -loss recovery. +min_rtt is the minimum RTT observed for a given path. min_rtt is set to the +latest_rtt on the first RTT sample, and to the lesser of min_rtt and latest_rtt +on subsequent samples. min_rtt is used to reject implausible RTT samples, but +is not used directly in congestion control or loss recovery. An endpoint uses only locally observed times in computing the min_rtt and does not adjust for host delays reported by the peer. Doing so allows the endpoint @@ -339,11 +338,10 @@ endpoint: min_rtt. This limits the underestimation that a misreporting peer can cause to the smoothed_rtt. -On the first RTT sample in a congestion control context, the smoothed_rtt is -set to the latest_rtt. +On the first RTT sample for a path, the smoothed_rtt is set to the latest_rtt. smoothed_rtt and rttvar are computed as follows, similar to {{?RFC6298}}. On -the first RTT sample in a congestion control context: +the first RTT sample for a path: ~~~ smoothed_rtt = latest_rtt From 810bb972e7874c6d4d99f140ae5262ac7c5921f3 Mon Sep 17 00:00:00 2001 From: ianswett Date: Mon, 13 Jan 2020 16:25:31 -0500 Subject: [PATCH 08/16] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 9e82efd589..ebb5f35efe 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -296,8 +296,8 @@ retain sufficient history is an open research question. min_rtt is the minimum RTT observed for a given path. min_rtt is set to the latest_rtt on the first RTT sample, and to the lesser of min_rtt and latest_rtt -on subsequent samples. min_rtt is used to reject implausible RTT samples, but -is not used directly in congestion control or loss recovery. +on subsequent samples. In this document, min_rtt is used by loss detection to +reject implausibly small rtt samples. An endpoint uses only locally observed times in computing the min_rtt and does not adjust for host delays reported by the peer. Doing so allows the endpoint From a25ffdfa5a413decae02c948c1823c87ca11e98c Mon Sep 17 00:00:00 2001 From: ianswett Date: Mon, 13 Jan 2020 16:33:37 -0500 Subject: [PATCH 09/16] Update draft-ietf-quic-recovery.md Co-Authored-By: Jana Iyengar --- 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 2c66ecad6e..693c983404 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -244,7 +244,7 @@ more accurate round-trip time estimate (see Section 13.2 of {{QUIC-TRANSPORT}}). At a high level, an endpoint measures the time from when a packet was sent to when it is acknowledged as a round-trip time (RTT) sample. The endpoint uses RTT samples and peer-reported host delays (see Section 13.2 of -{{QUIC-TRANSPORT}}) to generate a statistical description of the path's RTT. +{{QUIC-TRANSPORT}}) to generate a statistical description of the network path's RTT. An endpoint computes the following three values for each path: the minimum value observed over the lifetime of the path (min_rtt), an exponentially-weighted moving average (smoothed_rtt), and the mean deviation From 5df69d1f1ee882f8aac9da6ed136caf886ba5c91 Mon Sep 17 00:00:00 2001 From: ianswett Date: Mon, 13 Jan 2020 16:33:44 -0500 Subject: [PATCH 10/16] Update draft-ietf-quic-recovery.md Co-Authored-By: Jana Iyengar --- 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 693c983404..9eb3f395ea 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -291,7 +291,7 @@ retain sufficient history is an open research question. ## Estimating min_rtt {#min-rtt} -min_rtt is the minimum RTT observed for a given path. min_rtt is set to the +min_rtt is the minimum RTT observed for a given network path. min_rtt is set to the latest_rtt on the first RTT sample, and to the lesser of min_rtt and latest_rtt on subsequent samples. In this document, min_rtt is used by loss detection to reject implausibly small rtt samples. From 742b7c7e1bbb5796e29902348780dd62893bc899 Mon Sep 17 00:00:00 2001 From: ianswett Date: Mon, 13 Jan 2020 16:33:51 -0500 Subject: [PATCH 11/16] Update draft-ietf-quic-recovery.md Co-Authored-By: Jana Iyengar --- 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 9eb3f395ea..21ffac0014 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -302,7 +302,7 @@ to set a lower bound for the smoothed_rtt based entirely on what it observes (see {{smoothed-rtt}}), and limits potential underestimation due to erroneously-reported delays by the peer. -The RTT for a path may change over time. If a path's actual RTT decreases, +The RTT for a network path may change over time. If a path's actual RTT decreases, the min_rtt will adapt immediately on the first low sample. If the path's actual RTT increases, the min_rtt will not adapt to it, allowing future RTT samples that are smaller than the new RTT be included in smoothed_rtt. From ce29f01d16cf897f8ee15523113329e9d2cfa386 Mon Sep 17 00:00:00 2001 From: ianswett Date: Mon, 13 Jan 2020 16:33:56 -0500 Subject: [PATCH 12/16] Update draft-ietf-quic-recovery.md Co-Authored-By: Jana Iyengar --- 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 21ffac0014..f8aa89582c 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -303,7 +303,7 @@ to set a lower bound for the smoothed_rtt based entirely on what it observes erroneously-reported delays by the peer. The RTT for a network path may change over time. If a path's actual RTT decreases, -the min_rtt will adapt immediately on the first low sample. If the path's +the min_rtt will adapt immediately on the first low sample. If the network path's actual RTT increases, the min_rtt will not adapt to it, allowing future RTT samples that are smaller than the new RTT be included in smoothed_rtt. From 676dbe63dd22f873e69f5717ac7027e1485ed3d8 Mon Sep 17 00:00:00 2001 From: ianswett Date: Mon, 13 Jan 2020 16:34:03 -0500 Subject: [PATCH 13/16] Update draft-ietf-quic-recovery.md Co-Authored-By: Jana Iyengar --- 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 f8aa89582c..39f7f4cc16 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -336,7 +336,7 @@ endpoint: min_rtt. This limits the underestimation that a misreporting peer can cause to the smoothed_rtt. -On the first RTT sample for a path, the smoothed_rtt is set to the latest_rtt. +On the first RTT sample for a network path, the smoothed_rtt is set to the latest_rtt. smoothed_rtt and rttvar are computed as follows, similar to {{?RFC6298}}. On the first RTT sample for a path: From ee320015687ecbce52b1883e745452391c073625 Mon Sep 17 00:00:00 2001 From: ianswett Date: Mon, 13 Jan 2020 16:34:10 -0500 Subject: [PATCH 14/16] Update draft-ietf-quic-recovery.md Co-Authored-By: Jana Iyengar --- 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 39f7f4cc16..b13381a952 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -339,7 +339,7 @@ endpoint: On the first RTT sample for a network path, the smoothed_rtt is set to the latest_rtt. smoothed_rtt and rttvar are computed as follows, similar to {{?RFC6298}}. On -the first RTT sample for a path: +the first RTT sample for a network path: ~~~ smoothed_rtt = latest_rtt From 68a16ddef6622da71f7b71f96a4308bdf30e2196 Mon Sep 17 00:00:00 2001 From: ianswett Date: Mon, 13 Jan 2020 16:36:12 -0500 Subject: [PATCH 15/16] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index b13381a952..d53c96b355 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -244,9 +244,9 @@ more accurate round-trip time estimate (see Section 13.2 of {{QUIC-TRANSPORT}}). At a high level, an endpoint measures the time from when a packet was sent to when it is acknowledged as a round-trip time (RTT) sample. The endpoint uses RTT samples and peer-reported host delays (see Section 13.2 of -{{QUIC-TRANSPORT}}) to generate a statistical description of the network path's RTT. -An endpoint computes the following three values for each path: the minimum -value observed over the lifetime of the path (min_rtt), an +{{QUIC-TRANSPORT}}) to generate a statistical description of the network +path's RTT. An endpoint computes the following three values for each path: +the minimum value observed over the lifetime of the path (min_rtt), an exponentially-weighted moving average (smoothed_rtt), and the mean deviation (referred to as "variation" in the rest of this document) in the observed RTT samples (rttvar). @@ -291,10 +291,10 @@ retain sufficient history is an open research question. ## Estimating min_rtt {#min-rtt} -min_rtt is the minimum RTT observed for a given network path. min_rtt is set to the -latest_rtt on the first RTT sample, and to the lesser of min_rtt and latest_rtt -on subsequent samples. In this document, min_rtt is used by loss detection to -reject implausibly small rtt samples. +min_rtt is the minimum RTT observed for a given network path. min_rtt is set +to the latest_rtt on the first RTT sample, and to the lesser of min_rtt and +latest_rtt on subsequent samples. In this document, min_rtt is used by loss +detection to reject implausibly small rtt samples. An endpoint uses only locally observed times in computing the min_rtt and does not adjust for ACK delays reported by the peer. Doing so allows the endpoint @@ -302,10 +302,11 @@ to set a lower bound for the smoothed_rtt based entirely on what it observes (see {{smoothed-rtt}}), and limits potential underestimation due to erroneously-reported delays by the peer. -The RTT for a network path may change over time. If a path's actual RTT decreases, -the min_rtt will adapt immediately on the first low sample. If the network path's -actual RTT increases, the min_rtt will not adapt to it, allowing future -RTT samples that are smaller than the new RTT be included in smoothed_rtt. +The RTT for a network path may change over time. If a path's actual RTT +decreases, the min_rtt will adapt immediately on the first low sample. If +the path's actual RTT increases, the min_rtt will not adapt to it, allowing +future RTT samples that are smaller than the new RTT be included in +smoothed_rtt. ## Estimating smoothed_rtt and rttvar {#smoothed-rtt} From dcc70434385bffcbbbcd741778f96c73341e676b Mon Sep 17 00:00:00 2001 From: ianswett Date: Mon, 13 Jan 2020 16:38:51 -0500 Subject: [PATCH 16/16] 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 d53c96b355..1a73f1c778 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -337,7 +337,8 @@ endpoint: min_rtt. This limits the underestimation that a misreporting peer can cause to the smoothed_rtt. -On the first RTT sample for a network path, the smoothed_rtt is set to the latest_rtt. +On the first RTT sample for a network path, the smoothed_rtt is set to the +latest_rtt. smoothed_rtt and rttvar are computed as follows, similar to {{?RFC6298}}. On the first RTT sample for a network path: