Skip to content
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

Merged
merged 7 commits into from
Dec 18, 2018
Merged

Allow alternate restarts after idle #2187

merged 7 commits into from
Dec 18, 2018

Conversation

janaiyengar
Copy link
Contributor

Closes #2138.

Copy link
Contributor

@ianswett ianswett left a 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

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
Copy link
Contributor

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?

@janaiyengar
Copy link
Contributor Author

I've restructured the section a bit more.

@janaiyengar
Copy link
Contributor Author

@ianswett: Take a look again -- I've made some changes.

draft-ietf-quic-recovery.md Outdated Show resolved Hide resolved
draft-ietf-quic-recovery.md Outdated Show resolved Hide resolved

- 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}}).
Copy link
Member

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".

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pacing is the answer.

Copy link
Contributor

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.

Copy link
Contributor Author

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.


- 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.
Copy link
Contributor

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?

Copy link
Contributor

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."

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

better

Copy link
Contributor

@ianswett ianswett left a 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.


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.
Copy link
Contributor

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.

Copy link
Contributor Author

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.

Copy link
Contributor Author

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.


- 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.
Copy link
Contributor

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."


- 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}}).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pacing is the answer.

@ianswett ianswett added editorial An issue that does not affect the design of the protocol; does not require consensus. -recovery labels Dec 17, 2018
Copy link
Contributor

@ianswett ianswett left a 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.

martinthomson and others added 3 commits December 17, 2018 16:43
Co-Authored-By: janaiyengar <jri.ietf@gmail.com>
Co-Authored-By: janaiyengar <jri.ietf@gmail.com>
@janaiyengar
Copy link
Contributor Author

Ok, comments incorporated. I like @martinthomson's text, so I'm using that.

Copy link
Contributor

@ianswett ianswett left a 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


## Sending data after an idle period

A sender is considered idle if it has no bytes in flight. A sender can become
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or

Suggested change
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


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).
Copy link
Contributor

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?

Copy link
Contributor Author

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.

## 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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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


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).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
as lost (and therefore not in flight).
as lost, and therefore not in flight.

Copy link
Contributor

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."

Copy link
Contributor Author

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-recovery editorial An issue that does not affect the design of the protocol; does not require consensus.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants