tcp: make CUBIC the default congestion control mechanism.

This changes the default TCP 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.

Reviewed By: tuexen, mav, #transport, guest-ccui, emaste
Relnotes: Yes
Sponsored by: NetApp, Inc.
Differential Revision: https://reviews.freebsd.org/D36537
This commit is contained in:
Richard Scheffenegger 2022-09-13 12:01:53 +02:00
parent ea6d0de299
commit bb1d472d79
14 changed files with 28 additions and 31 deletions

View File

@ -30,7 +30,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd May 13, 2021
.Dd September 13, 2022
.Dt CC_CUBIC 4
.Os
.Sh NAME
@ -39,6 +39,7 @@
.Sh DESCRIPTION
The CUBIC congestion control algorithm was designed to provide increased
throughput in fast and long-distance networks.
The CUBIC congestion control algorithm is the default for TCP.
It attempts to maintain fairness when competing with legacy NewReno TCP in lower
speed scenarios where NewReno is able to operate adequately.
.Pp

View File

@ -30,7 +30,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd May 13, 2021
.Dd September 13, 2022
.Dt CC_NEWRENO 4
.Os
.Sh NAME
@ -39,7 +39,6 @@
.Sh SYNOPSIS
.In netinet/cc/cc_newreno.h
.Sh DESCRIPTION
The NewReno congestion control algorithm is the default for TCP.
Details about the algorithm can be found in RFC5681.
.Sh Socket Options
The

View File

@ -29,7 +29,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd August 6, 2019
.Dd September 13, 2022
.Dt MOD_CC 4
.Os
.Sh NAME
@ -47,7 +47,7 @@ using the
.Xr kld 4
facility.
.Pp
The default algorithm is NewReno, and all connections use the default unless
The default algorithm is CUBIC, and all connections use the default unless
explicitly overridden using the
.Dv TCP_CONGESTION
socket option (see
@ -127,7 +127,7 @@ For further explanation please see the internet-draft.
.Pp
Each congestion control module may also expose other MIB variables
to control their behaviour.
Note that both newreno and cubic now support hystart++ based on the version 3 of the internet-draft.
Note that both NewReno and CUBIC now support Hystart++ based on the version 3 of the internet-draft.
.Sh Kernel Configuration
All of the available congestion control modules may also be loaded
via kernel configutation options.
@ -138,10 +138,10 @@ Compilation of the kernel will fail if these two conditions are not met.
The framework exposes the following kernel configuration options.
.Bl -tag -width ".Va CC_NEWRENO"
.It Va CC_NEWRENO
This directive loads the newreno congestion control algorithm and is included
in GENERIC by default.
This directive loads the NewReno congestion control algorithm.
.It Va CC_CUBIC
This directive loads the cubic congestion control algorithm.
This directive loads the CUBIC congestion control algorithm and is included
in GENERIC by default.
.It Va CC_VEGAS
This directive loads the vegas congestion control algorithm, note that
this algorithm also requires the TCP_HHOOK option as well.
@ -160,7 +160,7 @@ this algorithm also requires the TCP_HHOOK option as well.
This directive loads the htcp congestion control algorithm.
.It Va CC_DEFAULT
This directive specifies the string that represents the name of the system default algorithm, the GENERIC kernel
defaults this to newreno.
defaults this to CUBIC.
.El
.Sh SEE ALSO
.Xr cc_cdg 4 ,

View File

@ -22,6 +22,6 @@ options GEOM_PART_MBR
options GEOM_PART_GPT
# Default congestion control algorithm
options CC_NEWRENO # include newreno congestion control
options CC_CUBIC # include CUBIC congestion control
options NEW_PCIB

View File

@ -6,5 +6,5 @@
device mem
# Default congestion control algorithm
options CC_NEWRENO # include newreno congestion control
options CC_CUBIC # include CUBIC congestion control

View File

@ -8,8 +8,7 @@ options PREEMPTION # Enable kernel thread preemption
options VIMAGE # Subsystem virtualization, e.g. VNET
options INET # InterNETworking
options INET6 # IPv6 communications protocols
options CC_NEWRENO # include newreno congestion control
options CC_DEFAULT=\"newreno\" # define our default CC module it should be compiled in.
options CC_CUBIC # include CUBIC congestion control
options TCP_HHOOK # hhook(9) framework for TCP
device crypto # core crypto support
options IPSEC_SUPPORT # Allow kldload of ipsec and tcpmd5

View File

@ -8,8 +8,7 @@ options PREEMPTION # Enable kernel thread preemption
options VIMAGE # Subsystem virtualization, e.g. VNET
options INET # InterNETworking
options INET6 # IPv6 communications protocols
options CC_NEWRENO # include newreno congestion control
options CC_DEFAULT=\"newreno\" # define our default CC module it should be compiled in.
options CC_CUBIC # include CUBIC congestion control
options TCP_HHOOK # hhook(9) framework for TCP
device crypto # core crypto support
options IPSEC_SUPPORT # Allow kldload of ipsec and tcpmd5

View File

@ -14,6 +14,6 @@ options GEOM_PART_MBR
options GEOM_PART_GPT
# Default congestion control algorithm
options CC_NEWRENO # include newreno congestion control
options CC_CUBIC # include CUBIC congestion control
options NEW_PCIB

View File

@ -11,8 +11,7 @@ options PREEMPTION # Enable kernel thread preemption
options VIMAGE # Subsystem virtualization, e.g. VNET
options INET # InterNETworking
options INET6 # IPv6 communications protocols
options CC_NEWRENO # include newreno congestion control
options CC_DEFAULT=\"newreno\" # define our default CC module it should be compiled in.
options CC_CUBIC # include CUBIC congestion control
options IPSEC_SUPPORT # Allow kldload of ipsec and tcpmd5
options ROUTE_MPATH # Multipath routing support
options FIB_ALGO # Modular fib lookups

View File

@ -651,13 +651,13 @@ options INET6 #IPv6 communications protocols
#
# Note if you include INET/INET6 or both options
# You *must* define at least one of the congestion control
# options or the compile will fail. Generic defines
# options CC_NEWRENO. You also will need to specify
# a default or the compile of your kernel will fail
# as well. The string in default is the name of the
# options or the compile will fail. GENERIC defines
# options CC_CUBIC. You may want to specify a default
# if multiple congestion controls are compiled in.
# The string in default is the name of the
# cc module as it would appear in the sysctl for
# setting the default. Generic defines newreno
# as shown below.
# setting the default. The code defines CUBIC
# as default, or the sole cc_module compiled in.
#
options CC_CDG
options CC_CHD
@ -667,8 +667,8 @@ options CC_HD
options CC_HTCP
options CC_NEWRENO
options CC_VEGAS
options CC_DEFAULT=\"newreno\"
options RATELIMIT # TX rate limiting support
options CC_DEFAULT=\"cubic\"
options RATELIMIT # TX rate limiting support
options ROUTETABLES=2 # allocated fibs up to 65536. default is 1.
# but that would be a bad idea as they are large.

View File

@ -23,7 +23,7 @@ options GEOM_PART_MBR
options GEOM_PART_GPT
# Default congestion control algorithm
options CC_NEWRENO # include newreno congestion control
options CC_CUBIC # include CUBIC congestion control
# enable support for native hardware
device atpic

View File

@ -81,7 +81,7 @@ __FBSDID("$FreeBSD$");
* Have a sane default if no CC_DEFAULT is specified in the kernel config file.
*/
#ifndef CC_DEFAULT
#define CC_DEFAULT "newreno"
#define CC_DEFAULT "cubic"
#endif
uint32_t hystart_minrtt_thresh = 4000;

View File

@ -13,6 +13,6 @@ options GEOM_PART_BSD
options GEOM_PART_MBR
# Default congestion control algorithm
options CC_NEWRENO # include newreno congestion control
options CC_CUBIC # include CUBIC congestion control
options NEW_PCIB

View File

@ -13,6 +13,6 @@ options GEOM_PART_BSD
options GEOM_PART_MBR
# Default congestion control algorithm
options CC_NEWRENO # include newreno congestion control
options CC_CUBIC # include CUBIC congestion control
options NEW_PCIB