-
Notifications
You must be signed in to change notification settings - Fork 204
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
Allow alternate restarts after idle #2187
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.
One small suggestion, but LGTM
draft-ietf-quic-recovery.md
Outdated
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 the sender uses pacing, the congestion window MUST not increase and does not |
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.
Possibly the "MUST not increase CWND" part should move a paragraph up, since it's really not pacing specific?
I've restructured the section a bit more. |
@ianswett: Take a look again -- I've made some changes. |
draft-ietf-quic-recovery.md
Outdated
|
||
- If the sender does not use pacing, it SHOULD reset its congestion window to | ||
the smaller of the current congestion window and the initial congestion | ||
window, as recommended for TCP (see Section 4.1 of {{?RFC5681}}). |
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.
Maybe ignore my suggestions and use this instead:
When sending data after becoming idle, a sender MUST reset its congestion window to the initial congestion window (see blah), unless it paces the sending of packets. A sender MAY retain its congestion window if it paces the sending of any packets in excess of the initial congestion window.
I realize that this changes the emphasis slightly, but I think that it's clearer and more succinct.
I still think that this is an abrupt transition, but I guess the answer to any complaint there is simply "pacing".
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.
Pacing is the answer.
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.
There is a degenerate case where traffic arrives in blocks just under init cwnd at a high rate. The application can then burst at a high frequency.
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 like this better. I'm using this.
draft-ietf-quic-recovery.md
Outdated
|
||
- If the sender uses pacing, it does not need to reduce its congestion | ||
window. It SHOULD however pace the congestion window and MAY allow an | ||
initial burst no larger than the initial congestion window. |
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 don't understand this. "MAY allow initial burst no larger", does this it MAY also allow larger?
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.
How about "It MAY allow an initial burst as large as the initial congestion window and MUST pace out the rest of the congestion window."
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.
better
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'm a bit worried we're subtly missing an important case we want to catch.
draft-ietf-quic-recovery.md
Outdated
|
||
A sender is considered idle if it has no bytes in flight and no pending | ||
ack-eliciting data to send. A sender can become idle when it is application | ||
limited or when it encounters a retransmission timeout. |
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.
Probe timeout? Also, we want the case after a PTO to be considered idle, correct? But one may have data to send, so this text doesn't catch that.
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've replaced retransmission with probe.
Actually I think this entire second point is wrong now. A sender does not become idle on a PTO, it might become idle once loss is established, when an ACK is received.
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.
Also, idle is when there's nothing in flight. I don't think we need the "pending data to send" bit.
draft-ietf-quic-recovery.md
Outdated
|
||
- If the sender uses pacing, it does not need to reduce its congestion | ||
window. It SHOULD however pace the congestion window and MAY allow an | ||
initial burst no larger than the initial congestion window. |
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.
How about "It MAY allow an initial burst as large as the initial congestion window and MUST pace out the rest of the congestion window."
draft-ietf-quic-recovery.md
Outdated
|
||
- If the sender does not use pacing, it SHOULD reset its congestion window to | ||
the smaller of the current congestion window and the initial congestion | ||
window, as recommended for TCP (see Section 4.1 of {{?RFC5681}}). |
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.
Pacing is the answer.
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 meant to un-approve this before.
Co-Authored-By: janaiyengar <jri.ietf@gmail.com>
Co-Authored-By: janaiyengar <jri.ietf@gmail.com>
Ok, comments incorporated. I like @martinthomson's text, so I'm using that. |
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.
This looks better, but I'm still a bit confused about the post-PTO case
draft-ietf-quic-recovery.md
Outdated
|
||
## Sending data after an idle period | ||
|
||
A sender is considered idle if it has no bytes in flight. A sender can become |
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.
A sender is considered idle if it has no bytes in flight. A sender can become | |
A sender is idle if it has no bytes in flight. A sender can become |
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.
Or
A sender is considered idle if it has no bytes in flight. A sender can become | |
A sender becomes idle if it has no bytes in flight. A sender can become |
draft-ietf-quic-recovery.md
Outdated
|
||
A sender is considered idle if it has no bytes in flight. A sender can become | ||
idle when it is application limited and has no data to send, or when it marks | ||
packets as lost (and therefore not in flight). |
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 this aiming at the PTO 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.
The text that was there was probably leftover from a while ago... at any rate there is no PTO case. There is nothing marked as lost on a PTO, and bytes in flight does not change on a PTO (modulo the two packets that are sent in response). So a sender cannot become idle on a PTO.
draft-ietf-quic-recovery.md
Outdated
## Sending data after an idle period | ||
|
||
A sender becomes idle if it has no bytes in flight. A sender can become idle | ||
when it is application limited and has no data to send, or when it marks 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.
when it is application limited and has no data to send, or when it marks packets | |
when it is application limited and has no data to send, or when it marks all packets |
draft-ietf-quic-recovery.md
Outdated
|
||
A sender becomes idle if it has no bytes in flight. A sender can become idle | ||
when it is application limited and has no data to send, or when it marks packets | ||
as lost (and therefore not in flight). |
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 lost (and therefore not in flight). | |
as lost, and therefore not in flight. |
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.
Can this also happen when all packets are acknowledged? I'm not sure what the preferred behavior is in that case. But the current text now properly captures the "my last PTO was acked and everything else was declared lost."
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.
Yes, that is a fine case ... this is what we've always had, the RTO text was incorrect. Basically the sender goes idle as soon as bytes in flight goes to 0. Maybe that's all we need to say. I've removed more text to make this clearer.
Closes #2138.