-
Notifications
You must be signed in to change notification settings - Fork 205
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Specify MaxAckDelay for TLP and RTO #991
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for writing this up. A few comments.
draft-ietf-quic-recovery.md
Outdated
|
||
(TODO: Add negotiability of delayed ack timeout.) | ||
MaxAckDelay is the maximum ack delay supplied in an incoming ack frame. | ||
Ack delays that are aren't used for an RTT sample or reference ack-only packets |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: It's not clear what it means to say Ack delays that reference ack-only packets... I would leave this at "aren't used for an RTT sample.", and remove "or reference ack-only packets"
was sent, and a bytes field indicating the packet's size. sent_packets is | ||
ordered by packet number, and packets remain in sent_packets until | ||
acknowledged or lost. | ||
was sent, a boolean indicating whether the packet is ack only, and a bytes |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/ack only/ackable. I think this constraint needs to be more than just ack only packets.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As discussed, in a future PR.
@@ -569,6 +573,7 @@ Pseudocode for OnPacketSent follows: | |||
largest_sent_packet = packet_number | |||
sent_packets[packet_number].packet_number = packet_number | |||
sent_packets[packet_number].time = now | |||
sent_packets[packet_number].ack_only = is_ack_only |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: is_ackable
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ack
@@ -602,6 +607,10 @@ Pseudocode for OnAckReceived and UpdateRtt follow: | |||
// Adjust for ack delay if it's plausible. | |||
if (latest_rtt - min_rtt > ack_delay): | |||
latest_rtt -= ack_delay | |||
// Only save into max ack delay if it's used | |||
// for rtt calculation and is not ack only. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ditto
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ack
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, let's leave the ackable discussion to later; I'm fine with ack only. There's one nit I'll leave you to address.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for adding more explanatory text. A few comments.
draft-ietf-quic-recovery.md
Outdated
exactly 1*SRTT may generate spurious probes, and 2*SRTT is simply the next | ||
integral value of RTT. | ||
QUIC diverges from TCP by calculating MaxAckDelay dynamically, instead of | ||
assuming a constant value for all connections. It includes this in all probe |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
TCP doesn't assume a constant value for all connections. I would say something like "instead of implicitly including it in the SRTT and RTTVAR estimates".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I state that below, but I updated this text to be a bit more specific.
draft-ietf-quic-recovery.md
Outdated
The values of 2 and 1.5 are based on | ||
{{?LOSS-PROBE=I-D.dukkipati-tcpm-tcp-loss-probe}}, but implementations MAY | ||
experiment with other constants. | ||
A PTO value of at least 1.5*SRTT ensures that the ACK is overdue. The of 1.5 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
missing word: "The value of".
draft-ietf-quic-recovery.md
Outdated
@@ -372,10 +366,17 @@ one significantly increases resilience to packet drop in both directions, thus | |||
reducing the probability of consecutive RTO events. | |||
|
|||
QUIC's RTO algorithm differs from TCP in that the firing of an RTO alarm is not | |||
considered a strong enough signal of packet loss. An RTO alarm fires only when | |||
considered a strong enough signal of packet loss, so does not result in an | |||
immediate change to CWND or recovery state. An RTO alarm fires only when |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is CWND defined by here? or should it be "congestion window"? I'd prefer spelling it out in any case.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
draft-ietf-quic-recovery.md
Outdated
there's a prolonged period of network silence, which could be caused by a change | ||
in the underlying network RTT. | ||
|
||
QUIC also diverges from TCP by including MaxAckDelay in the RTO period. QUIC is | ||
able to explicitly model the ack delay via the ack delay field in the ack frame. | ||
Because QUIC is subtracting this delay from both SRTT and it is expected to |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/is subtracting/subtracts/
It doesn't subtract this delay from SRTT... also this sentence is a bit of a run-on. Suggestion: "Since QUIC ignores this delay in its SRTT and RTTVAR computations, it is necessary to add this delay explicitly in the RTO computation.".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agreed, fixed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One comment I didn't fully address, but PTAL
draft-ietf-quic-recovery.md
Outdated
exactly 1*SRTT may generate spurious probes, and 2*SRTT is simply the next | ||
integral value of RTT. | ||
QUIC diverges from TCP by calculating MaxAckDelay dynamically, instead of | ||
assuming a constant value for all connections. It includes this in all probe |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I state that below, but I updated this text to be a bit more specific.
draft-ietf-quic-recovery.md
Outdated
@@ -372,10 +366,17 @@ one significantly increases resilience to packet drop in both directions, thus | |||
reducing the probability of consecutive RTO events. | |||
|
|||
QUIC's RTO algorithm differs from TCP in that the firing of an RTO alarm is not | |||
considered a strong enough signal of packet loss. An RTO alarm fires only when | |||
considered a strong enough signal of packet loss, so does not result in an | |||
immediate change to CWND or recovery state. An RTO alarm fires only when |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
draft-ietf-quic-recovery.md
Outdated
there's a prolonged period of network silence, which could be caused by a change | ||
in the underlying network RTT. | ||
|
||
QUIC also diverges from TCP by including MaxAckDelay in the RTO period. QUIC is | ||
able to explicitly model the ack delay via the ack delay field in the ack frame. | ||
Because QUIC is subtracting this delay from both SRTT and it is expected to |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agreed, fixed.
was sent, and a bytes field indicating the packet's size. sent_packets is | ||
ordered by packet number, and packets remain in sent_packets until | ||
acknowledged or lost. | ||
was sent, a boolean indicating whether the packet is ack only, and a bytes |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As discussed, in a future PR.
@@ -569,6 +573,7 @@ Pseudocode for OnPacketSent follows: | |||
largest_sent_packet = packet_number | |||
sent_packets[packet_number].packet_number = packet_number | |||
sent_packets[packet_number].time = now | |||
sent_packets[packet_number].ack_only = is_ack_only |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ack
@@ -602,6 +607,10 @@ Pseudocode for OnAckReceived and UpdateRtt follow: | |||
// Adjust for ack delay if it's plausible. | |||
if (latest_rtt - min_rtt > ack_delay): | |||
latest_rtt -= ack_delay | |||
// Only save into max ack delay if it's used | |||
// for rtt calculation and is not ack only. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ack
Also fixes #912 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
one nit, but lgtm
draft-ietf-quic-recovery.md
Outdated
integral value of RTT. | ||
QUIC diverges from TCP by calculating MaxAckDelay dynamically, instead of | ||
assuming a constant value for all connections. It includes this in all probe | ||
timeouts, because it assume the ack delay may come into play, regardless of |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/assume/assumes
draft-ietf-quic-recovery.md
Outdated
change in the underlying network RTT. | ||
|
||
QUIC also diverges from TCP by including MaxAckDelay in the RTO period. QUIC is | ||
able to explicitly model the ack delay via the ack delay field in the ack frame. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/model the ack delay/model delay at the receiver/
s/ack frame/ACK frame/
Closes #981