Page MenuHomeFreeBSD

tcp: make cubic the default cc.
ClosedPublic

Authored by rscheff on Sep 12 2022, 1:47 PM.
Tags
None
Referenced Files
Unknown Object (File)
Sat, Nov 9, 11:56 PM
Unknown Object (File)
Mon, Nov 4, 4:54 PM
Unknown Object (File)
Thu, Oct 17, 6:47 AM
Unknown Object (File)
Wed, Oct 16, 3:36 AM
Unknown Object (File)
Tue, Oct 15, 10:33 PM
Unknown Object (File)
Tue, Oct 15, 6:50 PM
Unknown Object (File)
Tue, Oct 15, 6:50 PM
Unknown Object (File)
Tue, Oct 15, 12:47 PM

Details

Summary

As discussed in the last transport call, changing the default
Congestion Control (CC) to Cubic. For small, transactional
exchanges (e.g. web objects <15kB), this will not have a material
effect. However, for long duration data transfers, Cubic allocates
a slightly higher fraction of the available bandwidth, when
competing against NewReno CC.

All major stacks operating in the internet have moved towards
the use of Cubic, this follows their lead.

Test Plan

verify that cubic is compiled as kernel module, and the default:

# sysctl net.inet.tcp.cc.available
net.inet.tcp.cc.available:
CCmod           D PCB count
cubic           * 12
# sysctl net.inet.tcp.cc.algorithm
net.inet.tcp.cc.algorithm: cubic

Diff Detail

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

Event Timeline

Why were there some configs setting CC_DEFAULT and some, which did not?

Why were there some configs setting CC_DEFAULT and some, which did not?

I presume that https://reviews.freebsd.org/D32964 did not touch all these more architecture specific ones....

CC_DEFAULT would nowadays be set by cc.c since then, thus wouldn't have been required in the old style...

share/man/man4/mod_cc.4
50

Is it properly "Cubic" or "CUBIC"?
[Or "cubic" as below?]

rscheff added a reviewer: cc.
rscheff edited the test plan for this revision. (Show Details)
share/man/man4/mod_cc.4
50

The RFC refers to the algorithm as CUBIC, to avoid confusion with the cubic function used for scaling up bandwidth; The naming convention is already non-uniform in the fbsd man/doc. I didn't use all-uppercase throughout here, as uppercase string tend to signify a compile option or other tunable.

Whatever style is preferred, I can redo the cubic / CUBIC related man pages accordingly. The mixed case here was in reflection of "NewReno", quite frankly.

share/man/man4/mod_cc.4
50

I would suggest to use CUBIC as the upcoming RFC 8312bis does.

share/man/man4/mod_cc.4
50

+1

50

I would suggest to use CUBIC as the upcoming RFC 8312bis does.

+1

rscheff edited the test plan for this revision. (Show Details)
  • Use "CUBIC" when talking about the algorithm
This revision is now accepted and ready to land.Sep 12 2022, 6:51 PM
sys/conf/NOTES
653–654

I think "Generic" here means "GENERIC". If better, replace with "GENERIC".

In general, this looks good to me. Thanks

  • refer to GENERIC profile in uppercase
This revision now requires review to proceed.Sep 12 2022, 9:14 PM
This revision is now accepted and ready to land.Sep 12 2022, 9:22 PM

LGTM

I would suggest that the capitalization changes unrelated to making it the default e.g. sys/netinet/cc/cc_cubic.c be done as a separate commit first

Also include Relnotes: Yes in the commit message

mav accepted this revision.EditedSep 13 2022, 10:54 AM

Looks good to me, though I am not really qualified to choose. I just saw CUBIC recovering much faster after packet losses in datacenter environments without flow control and WAN/WiFi. With NewReno we saw regular pauses in a traffic up to a second IIRC.

  • remove comment updates, whitespace cleanup.
This revision now requires review to proceed.Sep 13 2022, 1:30 PM
This revision is now accepted and ready to land.Sep 13 2022, 1:34 PM