Page MenuHomeFreeBSD

cc_cubic: sync to the new specification of RFC9438 for TCP CUBIC.
Needs ReviewPublic

Authored by cc on Thu, Mar 27, 5:20 PM.
Tags
None
Referenced Files
Unknown Object (File)
Tue, Apr 22, 7:14 AM
Unknown Object (File)
Mon, Apr 21, 4:58 PM
Unknown Object (File)
Mon, Apr 21, 4:11 PM
Unknown Object (File)
Tue, Apr 8, 2:08 PM
Unknown Object (File)
Tue, Apr 8, 2:08 PM
Unknown Object (File)
Fri, Apr 4, 4:04 PM
Unknown Object (File)
Fri, Apr 4, 3:10 PM
Unknown Object (File)
Fri, Apr 4, 9:12 AM
Subscribers

Details

Reviewers
glebius
rrs
rscheff
tuexen
Group Reviewers
transport
Summary

highlighted changes

  1. change the type of these CUBIC windows to uint32_t from uint64_t
  2. sync to the updated formulas in RFC9438 and carefully handles these units (segments or bytes)
  3. remove un-used function reno_cwnd()

change detail in cc_cubic.h

  1. Updated cubic_k with the new formula in the RFC. It additionally uses cwnd_epoch for calculating K.
  2. Also updated these theoretical formula functions in userland.

change detail in cc_cubic.c

  1. cubic_cong_signal() now just flag the event and let the epoch start/re-start at the beginning of the current congestion avoidance phase in cubic_ack_received().
  2. Increase the cwnd only by (target - cwnd) / cwnd with a restrictive target formula from the RFC. This shall further smooth the cwnd growth, as observed in the default stack.
  3. Remove the obsolete hack for probing W_max in early congestion avoidance phase if used an old ssthresh from hostcache.
  4. Also remove the obsolete hack that aligns the concave region after the first congestion event.

reference: https://reviews.freebsd.org/D41715

Test Plan

The initial test coverage is in this wiki page. testD49540

I am also in progress testing this patch by using a 1GE router, which has Active Queue Management(AQM). Will update the test wiki page later if I found some performance difference than using a 1GE switch.

Please let me know if I missed anything or any additional test case to cover.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 63158
Build 60042: arc lint + arc unit