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
Attempt to define slow start/congestion avoidance #4005
Merged
Merged
Changes from 1 commit
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
2a9cb75
Attempt to define slow start/congestion avoidance
martinthomson 2f3927e
detected/increased
martinthomson 755f59a
Integrate the changes from #3978
martinthomson 2775fdd
ssthresh being initiallly infinite means that you start in slow start
martinthomson bb96175
Reword congestion signal response
martinthomson 4478c2b
Merge branch 'master' into define-ss-ca
martinthomson 72c57b9
Merge remote-tracking branch 'origin/ianswett-must-new-reno' into def…
martinthomson fb99434
Merge branch 'master' into define-ss-ca
martinthomson 3ad13ce
Sprinkle some NewReno pixie dust
martinthomson File filter
Filter by extension
Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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 just realising this now but this is actually not how TCP works. When you enter recovery you halve the ssthresh (basically to remember the right value for later). Then what TCP does is that is keeps sending one new packet for each ACK received (conservation principle: not know which or how many packets have been ACKed but know there must be at least one successful received and leaving the network) and then when all losses are repaired it sets the cwnd to ssthresh and leaves recovery. If you halve cwnd immediately when entering recovery, you can't send data for half an RTT until you received enough ACKs to be below the cwnd. This is usually not what you want.
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 think you're correct, do you have a good RFC reference handy? I couldn't easily find this text.
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.
https://tools.ietf.org/html/rfc5681#section-4.3
"Finally, after all loss in the given window of segments
has been successfully retransmitted, cwnd MUST be set to no more than
ssthresh and congestion avoidance MUST be used to further increase
cwnd."
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.
@janaiyengar just explained to me why this difference exists, and I found the argument convincing. I don't know whether this is worth calling out though, it seems like it might be a little tricky to get down in text.
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 think the MUST requirement is that the cwnd is set to ssthresh when LEAVING recovery. In order to decrement the cwnd gradually we could say that only one new packet for two ACKed ones should be send which then would be mostly inline with TCP or we can leave the detailed scheme to the implementation and just put some warnings to not overload the link in recovery. Alternatively you could also e.g. halve the cwnd and then pace out packets over one RTT (which is assume is what implementation do right now?)
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.
If we're going to make a change, I think it needs to be on #3978, which is a design PR that's going to be sent out for consensus call soon.
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. This PR is intended to be a strictly editorial conversion. I hope that I have faithfully translated the text from #3978.
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 is being discussed in #3978.)