Page MenuHomeFreeBSD

Improve NewReno after_idle ssthresh per RFC2861 Sec.2

Authored by rscheff on Nov 18 2019, 5:28 PM.



This fix was originally included in the set of patches for
Cubic (,
but when splitting them up into D18954, D18982, D19118 this was
unfortuately missed.

The rationale for adjusting ssthresh to 3/4 of the value
of cwnd before an idle period is given in RFC2861 - provided
that cwnd did not grow beyond bounds due to the flow being
application limited (see D21798, discovered later)

As cc_newreno is the default "fall-through" reaction, most tcp
variants will see a benefit from this.

Using cwnd-cwnd/4 arithmetic to stay within the integer boundaries of
cwnd, instead of (3*cwnd)/4

Test Plan

This change has been part of the internal Cubic patch set, and
yields significant performance improvements for request-response
IO workloads with frequent tcp idle periods.

Diff Detail

Lint OK
No Unit Test Coverage
Build Status
Buildable 27620
Build 25831: arc lint + arc unit

Event Timeline

This revision is now accepted and ready to land.Nov 18 2019, 7:10 PM
tuexen requested changes to this revision.Dec 1 2019, 9:06 PM
tuexen added inline comments.

Can you add a comment describing where this modification comes from? Right now, the above comment does not describe what you added.

This revision now requires changes to proceed.Dec 1 2019, 9:06 PM
tuexen added 1 blocking reviewer(s): transport.
  • adding comment referencing relevant RFC

expanded the comment to reference RFC2861 as for the rationale to adjust the ssthresh here also. Since this is dependent on D21798 (restrict unbounded cwnd growth), should this be mentioned also?

This revision is now accepted and ready to land.Sep 24 2020, 2:19 PM
This revision was automatically updated to reflect the committed changes.