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

Congestion control during application limited state #2554

Closed
pravb opened this issue Mar 26, 2019 · 7 comments · Fixed by #2605
Closed

Congestion control during application limited state #2554

pravb opened this issue Mar 26, 2019 · 7 comments · Fixed by #2605
Labels
-recovery design An issue that affects the design of the protocol; resolution requires consensus.

Comments

@pravb
Copy link

pravb commented Mar 26, 2019

The text in recovery draft 19 says "The congestion window should not be increased in slow start or
congestion avoidance when it is not fully utilized". This is a deviation from how congestion control works in deployed TCP implementation. We need a crisp definition of what is meant by "full utilization". I also have concern that this will make QUICs performance for bulk transfers poorer than TCP because application I/O patterns and scheduling of the sending thread will affect cwnd growth. After making the definition crisp and consensus that we need to include such a provision, the pseudo code will need to be updated to handle this as well.

@ianswett ianswett added design An issue that affects the design of the protocol; resolution requires consensus. -recovery labels Mar 26, 2019
@janaiyengar
Copy link
Contributor

@pravb: You're right, this needs to be made crisp and we need to add pseudo-code to handle this. Do you have a strawman proposal? How does Windows TCP do currently to handle growth during app limited periods?

The naive approach doesn't work, since it prevents growth in the second RTT during slow start. I don't remember anymore what Linux TCP does, but I can look into that.

@janaiyengar
Copy link
Contributor

FWIW, my read of the Linux code tells me that at ack receipt time, the sender considers itself app-limited if in slow-start and cwnd > 2 x inflight, or if in cong-avoid and cwnd > inflight.

@ianswett
Copy link
Contributor

ianswett commented Apr 3, 2019

Jana, your reading matches my memory, but I thought there was an extra "fq-pacing quantum" added to inflight in the second case?

@pravb
Copy link
Author

pravb commented Apr 6, 2019

So there is no standard mechanism defined for this in any of the TCP RFCs especially the ones describing modern congestion control like CUBIC and DCTCP. Instead of providing a particular algorithm I propose we leave the handling of this to the implementations? Maybe we can refer implementers to https://www.rfc-editor.org/rfc/rfc7661.txt for possible ideas.

@evolodina
Copy link

I’m not sure, but I guess RFC4960 & SCTP implementation may be useful in this case.

@ianswett
Copy link
Contributor

ianswett commented Apr 8, 2019

I found this in RFC4960(https://tools.ietf.org/html/rfc4960#section-7.2.1):
"When cwnd is less than or equal to ssthresh, an SCTP endpoint MUST
use the slow-start algorithm to increase cwnd only if the current
congestion window is being fully utilized, an incoming SACK
advances the Cumulative TSN Ack Point, and the data sender is not
in Fast Recovery. Only when these three conditions are met can
the cwnd be increased; otherwise, the cwnd MUST not be increased."

The current QUIC recovery text tries to clarify what fully utilized means, particularly in the presence of pacing.

@janaiyengar
Copy link
Contributor

I'm quite familiar with RFC 4960, and it does not have anything that is particularly helpful here. @ianswett: I didn't see an fq-quantum in the code, but I could also be missing something.

janaiyengar pushed a commit that referenced this issue Apr 17, 2019
* Reference RFC7661 for application limited

Fixes #2554

* Update draft-ietf-quic-recovery.md

* Update draft-ietf-quic-recovery.md

Co-Authored-By: ianswett <ianswett@users.noreply.github.com>

* Update draft-ietf-quic-recovery.md

Co-Authored-By: ianswett <ianswett@users.noreply.github.com>

* Update draft-ietf-quic-recovery.md

Co-Authored-By: ianswett <ianswett@users.noreply.github.com>

* Update draft-ietf-quic-recovery.md

* Update draft-ietf-quic-recovery.md
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.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants