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

Persistent Congestion Requires Probes to be Sent #2356

Closed
nibanks opened this issue Jan 22, 2019 · 2 comments · Fixed by #2365
Closed

Persistent Congestion Requires Probes to be Sent #2356

nibanks opened this issue Jan 22, 2019 · 2 comments · Fixed by #2365
Labels
-recovery design An issue that affects the design of the protocol; resolution requires consensus. has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list.

Comments

@nibanks
Copy link
Member

nibanks commented Jan 22, 2019

Currently, persistent congestion is only determine when the required number of probes have been sent. But probes aren't sent if the app layer continues to send data. This likely means the persistent congestion determination should be time based instead of probe count based.

@ianswett
Copy link
Contributor

I agree this wasn't the intent of the text.

I'm not sure this is an important problem to solve in practice, but I'm happy to review if a PR if you want to write one up?

@martinthomson martinthomson added the design An issue that affects the design of the protocol; resolution requires consensus. label Jan 22, 2019
@nibanks
Copy link
Member Author

nibanks commented Jan 22, 2019

Fundamentally, I think we should separate persistent congestion determination from how many (if any) probes were actually sent. Persistent congestion is just an amount of time (since the oldest outstanding, retransmittable packet) we should wait before declaring "something really bad is going on" for this connection, and back off.

In good (non-edge) cases, the current logic works well and is fairly simple to implement. It just breaks down in the cases where any other traffic is getting periodically sent. I would propose just making a separate timer/timeout for persistent congestion. It would follow similar rules for RTO for TCP:

  1. When a new packet is sent, if the PC (persistent congestion) timer isn't running, start it.
  2. When you receive an ACK that acknowledged new data, restart the timer.

The next question is just how long to run the timer. Assuming we want to keep the current values (sum of 3 PTOs), I think it'd be something like:

(smoothed_rtt + 4 * rttvar + max_ack_delay) * ((2 ^ 3) - 1)

If this sounds reasonable, I can attempt to put together a PR.

@mnot mnot added the has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list. label Mar 5, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-recovery design An issue that affects the design of the protocol; resolution requires consensus. has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list.
Projects
No open projects
Development

Successfully merging a pull request may close this issue.

4 participants