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 Time Threshold #2365

Merged
merged 30 commits into from Feb 25, 2019
Merged
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
a2ab05c
Persistent Congestion Time Threshold
nibanks Jan 23, 2019
8c4cfdb
Some of Ian's comments
nibanks Jan 23, 2019
d85c452
mikkelfj's suggestion
mikkelfj Jan 23, 2019
548e4e3
mikkelfj's suggestion
mikkelfj Jan 23, 2019
b61e20c
Jana's offline suggestions
nibanks Jan 28, 2019
ad66ac0
Merge branch 'pr/persistent-congestion' of https://github.com/nibanks…
nibanks Jan 28, 2019
d750a39
tab to spaces
nibanks Jan 28, 2019
c668cc1
Ian's suggestion
nibanks Jan 28, 2019
be43750
Ian's suggestion
ianswett Jan 28, 2019
08d85ed
More of Ian's suggestions
nibanks Jan 28, 2019
4ec8620
Merge branch 'pr/persistent-congestion' of https://github.com/nibanks…
nibanks Jan 28, 2019
1ecd70b
Fix build error
nibanks Jan 29, 2019
87b2c5b
Merge branch 'master' into pr/persistent-congestion
nibanks Jan 29, 2019
b5f342e
Ian's suggestion
ianswett Jan 29, 2019
e362345
Ian's suggestion
ianswett Jan 29, 2019
a0e507a
Ian's suggestion
ianswett Jan 29, 2019
6fa9b52
More of Ian's suggestions
nibanks Jan 29, 2019
f64efb8
Ian's suggestion
ianswett Jan 30, 2019
931c0cc
Ian's suggestions
nibanks Jan 30, 2019
ed4ad7e
Ian's suggestion
ianswett Jan 30, 2019
91481a3
Merge branch 'master' into pr/persistent-congestion
nibanks Feb 5, 2019
731211f
slight redesign and example
nibanks Feb 7, 2019
d0254cc
forgot to hit save first...
nibanks Feb 7, 2019
be6ce72
whitespace removal
nibanks Feb 8, 2019
4e4b4fb
editorial nits
janaiyengar Feb 8, 2019
68ec0b8
another nit
janaiyengar Feb 8, 2019
08da54a
Ian's suggestion
ianswett Feb 11, 2019
4857ee8
Marten's suggestion
nibanks Feb 12, 2019
a8510b1
Jana's suggestions
nibanks Feb 21, 2019
d81b39d
Change back to largest_lost_packet
ianswett Feb 25, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
18 changes: 10 additions & 8 deletions draft-ietf-quic-recovery.md
Expand Up @@ -680,8 +680,9 @@ The first three packets are determined to be lost when the ACK of packet 4 is
received at t=8. The congestion period is calculated as the time between the
oldest and newest lost packets: (3 - 0) = 3. The duration for persistent
nibanks marked this conversation as resolved.
Show resolved Hide resolved
congestion is equal to: (1 * ((2 ^ kPersistentCongestionThreshold) - 1)) = 3.
Because the threshold was reached, the network is considered to have experienced
persistent congestion.
Because the threshold was reached and because none of the packets between the
oldest and the newest packets are acknowledged, the network is considered to
have experienced persistent congestion.

When persistent congestion is established, the sender's congestion window MUST
be reduced to the minimum congestion window (kMinimumWindow). This response of
Expand Down Expand Up @@ -1314,26 +1315,27 @@ Invoked by loss detection from DetectLostPackets when new packets
are detected lost.

~~~
InPersistentCongestion(congestion_period):
InPersistentCongestion(newest_lost_packet):
pto = smoothed_rtt + 4 * rttvar + max_ack_delay
return congestion_period >
congestion_period =
pto * (2 ^ kPersistentCongestionThreshold - 1)
nibanks marked this conversation as resolved.
Show resolved Hide resolved
// Determine if all packets in the window before the
// newest lost packet, including the edges, are marked
// lost
return IsWindowLost(newest_lost_packet, congestion_period)

OnPacketsLost(lost_packets):
// Remove lost packets from bytes_in_flight.
for (lost_packet : lost_packets):
bytes_in_flight -= lost_packet.size
oldest_lost_packet = lost_packets.first()
newest_lost_packet = lost_packets.last()
Copy link
Contributor

Choose a reason for hiding this comment

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

Elsewhere we use largest(ie: largest_acked) and there are currently no uses of newest in the recovery draft, so I'm going to change this back to largest. If we want to start using newest, let's do that in a separate PR.

Copy link
Member Author

Choose a reason for hiding this comment

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

Fine with me. I might look at changing it later.


// Start a new congestion epoch if the last lost packet
// is past the end of the previous recovery epoch.
CongestionEvent(newest_lost_packet.time_sent)

// Collapse congestion window if persistent congestion
if (InPersistentCongestion(
newest_lost_packet.time_sent -
oldest_lost_packet.time_sent)):
if (InPersistentCongestion(newest_lost_packet)):
congestion_window = kMinimumWindow
~~~

Expand Down