Page MenuHomeFreeBSD

Cubic: prevent abrupt cwnd jumps after slow start
Needs ReviewPublic

Authored by rscheff_gmx.at on Wed, Feb 12, 8:46 PM.

Details

Summary

This Diff changes the initial Wmax dragging to a single flag.

Another flag keeps track of when slow start is exited, to start the
t_last_cong only then.

This prevents sudden jumps in the caluclated cwnd by cubic, especially
when the flow is application limited during slow start (cwnd can not
grow as fast as expected). The downside is that cubic may remain
slightly longer in the concave region before starting the convex
region beyond Wmax again.

The rationale for this change is in RFC 8312 section 4.7 (timeout):
'''

During the first congestion avoidance after a timeout, CUBIC
increases its congestion window size using Eq. 1, where t is the
elapsed time since the beginning of the current congestion avoidance,
K is set to 0, and W_max is set to the congestion window size at the
beginning of the current congestion avoidance.

'''
This is effectively applied for any slow start scenario (initial
growth, retransmission timeout, and after_idle)

Test Plan

set up uperf for an initially application-limited flow,
before increasing the amout of data available to send. Monitor the
evolution of cwnd after slow start, after idle and past a
retransmission timeout

Diff Detail

Lint
Lint OK
Unit
No Unit Test Coverage
Build Status
Buildable 29331
Build 27232: arc lint + arc unit

Event Timeline

rscheff_gmx.at created this revision.Wed, Feb 12, 8:46 PM