Page MenuHomeFreeBSD

tcp: Add PRR cwnd reduction for non-SACK loss
Needs ReviewPublic

Authored by rscheff on Mar 27 2021, 10:58 AM.

Details

Summary

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

Repository
rS FreeBSD src repository - subversion
Lint
Lint OK
Unit
No Unit Test Coverage
Build Status
Buildable 38108
Build 34997: arc lint + arc unit