Page MenuHomeFreeBSD

tcp: Add PRR cwnd reduction for non-SACK loss

Authored by rscheff on Mar 27 2021, 10:58 AM.
Referenced Files
Unknown Object (File)
Wed, Sep 20, 5:40 AM
Unknown Object (File)
Aug 8 2023, 6:07 PM
Unknown Object (File)
Aug 8 2023, 6:07 PM
Unknown Object (File)
Aug 8 2023, 6:01 PM
Unknown Object (File)
Aug 5 2023, 5:58 PM
Unknown Object (File)
Aug 5 2023, 3:32 PM
Unknown Object (File)
Jul 2 2023, 2:12 AM
Unknown Object (File)
Jun 6 2023, 4:22 AM



This completes PRR cwnd reduction in all circumstances
for the base stack (SACK loss recovery, ECN window reduction,
non-SACK loss recovery), preventing the arriving ACKs to
clock out new data at the old, too high rate. This
reduces the chance to induce additional losses while
recovering from loss (during congested network conditions).

Overall, the probability to require a lengthy Retransmission
Timeout (currently at a minimum of 240 ms) is reduced,
thereby improving the high-percentile latencies for flow
completion time.

For non-SACK loss recovery, each ACK is assumed to have
one MSS delivered. In order to prevent ACK-split attacks,
where a client could clock out new data indefinitely at
a rate primarily choosen by the client, only one window
worth of ACKs is considered to actually have delivered
new data.

When an ACK is not delivering new data, PRR-CRB is
choosen. This allows PRR to catch up in case of ACK
reordering, but also prevents similar issues with
SACK loss recovery.

MFC after: 2 weeks

Diff Detail

rG FreeBSD src repository
Lint Not Applicable
Tests Not Applicable

Event Timeline


Are you sure this can never wrap?


Again, can t_dupacks * maxseg never wrap?

  • restricting t_dupacks calculations to not overflow
  • restrict further to a static comparison rather a dynamic

This addresses @jtl's comments.

This revision is now accepted and ready to land.Jun 17 2021, 3:15 PM