Page MenuHomeFreeBSD

tcp: clean PRR state after ECN congestion recovery.
ClosedPublic

Authored by rscheff on Dec 23 2023, 5:54 PM.
Tags
None
Referenced Files
Unknown Object (File)
Mon, Apr 8, 9:04 PM
Unknown Object (File)
Mar 30 2024, 3:50 PM
Unknown Object (File)
Mar 30 2024, 3:50 PM
Unknown Object (File)
Mar 2 2024, 4:41 PM
Unknown Object (File)
Feb 29 2024, 2:02 PM
Unknown Object (File)
Feb 19 2024, 10:12 PM
Unknown Object (File)
Jan 14 2024, 6:40 AM
Unknown Object (File)
Jan 8 2024, 6:57 PM

Details

Summary

During Loss Recovery, all SACK and PRR state is properly
initialized so that Proportional Rate Reduction can work
properly. However, on many consecutive ECN CE marks without
intermediate loss events, the PRR state was never properly
cleaned. This can cause unintended jumps in the congestion
window on subsequent, pure ECN congestion responses.

MFC to stable/14 and stable/13

MFC after: 3 days

Test Plan

set up a dummynet pipe to inject IP CE marks:

ipfw pipe 1 config bw 10Mbit/s delay 10 codel target 5 interval 10 ecn
ipfw add 100 pipe 1 ip from any to any out xmit vmx0

start a iperf3 / uperf test.

sample snd_cwnd using convinient tools (dtrace, siftr, bblog) - validate that on the 2nd and subsequent CWR (CONGRECOVERY) the cwnd is shrinking when PRR is enabled, until ssthresh is met (or cwnd is smaller then ssthresh). Also validate that cwnd / ssthresh are "sane" values and not larger then the receive window, or unexpectely large...

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

  • undo prr accounting changes on error
This revision is now accepted and ready to land.Jan 5 2024, 2:15 PM
sys/netinet/tcp_input.c
2986

If "sackhint.prr_delivered" is zeroed after EXIT_RECOVERY, I am wondering shall it be zeroed in cc_post_recovery() as well?

rscheff marked an inline comment as done.
  • clear prr in cc_post_recovery() instead
This revision now requires review to proceed.Jan 6 2024, 12:21 AM
sys/netinet/tcp_input.c
2986

You are absolutely correct.

This revision is now accepted and ready to land.Jan 8 2024, 2:23 PM