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:
parent
ea6d0de299
commit
bb1d472d79
@ -30,7 +30,7 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd May 13, 2021
|
.Dd September 13, 2022
|
||||||
.Dt CC_CUBIC 4
|
.Dt CC_CUBIC 4
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -39,6 +39,7 @@
|
|||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
The CUBIC congestion control algorithm was designed to provide increased
|
The CUBIC congestion control algorithm was designed to provide increased
|
||||||
throughput in fast and long-distance networks.
|
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
|
It attempts to maintain fairness when competing with legacy NewReno TCP in lower
|
||||||
speed scenarios where NewReno is able to operate adequately.
|
speed scenarios where NewReno is able to operate adequately.
|
||||||
.Pp
|
.Pp
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd May 13, 2021
|
.Dd September 13, 2022
|
||||||
.Dt CC_NEWRENO 4
|
.Dt CC_NEWRENO 4
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -39,7 +39,6 @@
|
|||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.In netinet/cc/cc_newreno.h
|
.In netinet/cc/cc_newreno.h
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
The NewReno congestion control algorithm is the default for TCP.
|
|
||||||
Details about the algorithm can be found in RFC5681.
|
Details about the algorithm can be found in RFC5681.
|
||||||
.Sh Socket Options
|
.Sh Socket Options
|
||||||
The
|
The
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd August 6, 2019
|
.Dd September 13, 2022
|
||||||
.Dt MOD_CC 4
|
.Dt MOD_CC 4
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -47,7 +47,7 @@ using the
|
|||||||
.Xr kld 4
|
.Xr kld 4
|
||||||
facility.
|
facility.
|
||||||
.Pp
|
.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
|
explicitly overridden using the
|
||||||
.Dv TCP_CONGESTION
|
.Dv TCP_CONGESTION
|
||||||
socket option (see
|
socket option (see
|
||||||
@ -127,7 +127,7 @@ For further explanation please see the internet-draft.
|
|||||||
.Pp
|
.Pp
|
||||||
Each congestion control module may also expose other MIB variables
|
Each congestion control module may also expose other MIB variables
|
||||||
to control their behaviour.
|
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
|
.Sh Kernel Configuration
|
||||||
All of the available congestion control modules may also be loaded
|
All of the available congestion control modules may also be loaded
|
||||||
via kernel configutation options.
|
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.
|
The framework exposes the following kernel configuration options.
|
||||||
.Bl -tag -width ".Va CC_NEWRENO"
|
.Bl -tag -width ".Va CC_NEWRENO"
|
||||||
.It Va CC_NEWRENO
|
.It Va CC_NEWRENO
|
||||||
This directive loads the newreno congestion control algorithm and is included
|
This directive loads the NewReno congestion control algorithm.
|
||||||
in GENERIC by default.
|
|
||||||
.It Va CC_CUBIC
|
.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
|
.It Va CC_VEGAS
|
||||||
This directive loads the vegas congestion control algorithm, note that
|
This directive loads the vegas congestion control algorithm, note that
|
||||||
this algorithm also requires the TCP_HHOOK option as well.
|
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.
|
This directive loads the htcp congestion control algorithm.
|
||||||
.It Va CC_DEFAULT
|
.It Va CC_DEFAULT
|
||||||
This directive specifies the string that represents the name of the system default algorithm, the GENERIC kernel
|
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
|
.El
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr cc_cdg 4 ,
|
.Xr cc_cdg 4 ,
|
||||||
|
@ -22,6 +22,6 @@ options GEOM_PART_MBR
|
|||||||
options GEOM_PART_GPT
|
options GEOM_PART_GPT
|
||||||
|
|
||||||
# Default congestion control algorithm
|
# Default congestion control algorithm
|
||||||
options CC_NEWRENO # include newreno congestion control
|
options CC_CUBIC # include CUBIC congestion control
|
||||||
|
|
||||||
options NEW_PCIB
|
options NEW_PCIB
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
device mem
|
device mem
|
||||||
|
|
||||||
# Default congestion control algorithm
|
# Default congestion control algorithm
|
||||||
options CC_NEWRENO # include newreno congestion control
|
options CC_CUBIC # include CUBIC congestion control
|
||||||
|
|
||||||
|
@ -8,8 +8,7 @@ options PREEMPTION # Enable kernel thread preemption
|
|||||||
options VIMAGE # Subsystem virtualization, e.g. VNET
|
options VIMAGE # Subsystem virtualization, e.g. VNET
|
||||||
options INET # InterNETworking
|
options INET # InterNETworking
|
||||||
options INET6 # IPv6 communications protocols
|
options INET6 # IPv6 communications protocols
|
||||||
options CC_NEWRENO # include newreno congestion control
|
options CC_CUBIC # include CUBIC congestion control
|
||||||
options CC_DEFAULT=\"newreno\" # define our default CC module it should be compiled in.
|
|
||||||
options TCP_HHOOK # hhook(9) framework for TCP
|
options TCP_HHOOK # hhook(9) framework for TCP
|
||||||
device crypto # core crypto support
|
device crypto # core crypto support
|
||||||
options IPSEC_SUPPORT # Allow kldload of ipsec and tcpmd5
|
options IPSEC_SUPPORT # Allow kldload of ipsec and tcpmd5
|
||||||
|
@ -8,8 +8,7 @@ options PREEMPTION # Enable kernel thread preemption
|
|||||||
options VIMAGE # Subsystem virtualization, e.g. VNET
|
options VIMAGE # Subsystem virtualization, e.g. VNET
|
||||||
options INET # InterNETworking
|
options INET # InterNETworking
|
||||||
options INET6 # IPv6 communications protocols
|
options INET6 # IPv6 communications protocols
|
||||||
options CC_NEWRENO # include newreno congestion control
|
options CC_CUBIC # include CUBIC congestion control
|
||||||
options CC_DEFAULT=\"newreno\" # define our default CC module it should be compiled in.
|
|
||||||
options TCP_HHOOK # hhook(9) framework for TCP
|
options TCP_HHOOK # hhook(9) framework for TCP
|
||||||
device crypto # core crypto support
|
device crypto # core crypto support
|
||||||
options IPSEC_SUPPORT # Allow kldload of ipsec and tcpmd5
|
options IPSEC_SUPPORT # Allow kldload of ipsec and tcpmd5
|
||||||
|
@ -14,6 +14,6 @@ options GEOM_PART_MBR
|
|||||||
options GEOM_PART_GPT
|
options GEOM_PART_GPT
|
||||||
|
|
||||||
# Default congestion control algorithm
|
# Default congestion control algorithm
|
||||||
options CC_NEWRENO # include newreno congestion control
|
options CC_CUBIC # include CUBIC congestion control
|
||||||
|
|
||||||
options NEW_PCIB
|
options NEW_PCIB
|
||||||
|
@ -11,8 +11,7 @@ options PREEMPTION # Enable kernel thread preemption
|
|||||||
options VIMAGE # Subsystem virtualization, e.g. VNET
|
options VIMAGE # Subsystem virtualization, e.g. VNET
|
||||||
options INET # InterNETworking
|
options INET # InterNETworking
|
||||||
options INET6 # IPv6 communications protocols
|
options INET6 # IPv6 communications protocols
|
||||||
options CC_NEWRENO # include newreno congestion control
|
options CC_CUBIC # include CUBIC congestion control
|
||||||
options CC_DEFAULT=\"newreno\" # define our default CC module it should be compiled in.
|
|
||||||
options IPSEC_SUPPORT # Allow kldload of ipsec and tcpmd5
|
options IPSEC_SUPPORT # Allow kldload of ipsec and tcpmd5
|
||||||
options ROUTE_MPATH # Multipath routing support
|
options ROUTE_MPATH # Multipath routing support
|
||||||
options FIB_ALGO # Modular fib lookups
|
options FIB_ALGO # Modular fib lookups
|
||||||
|
@ -651,13 +651,13 @@ options INET6 #IPv6 communications protocols
|
|||||||
#
|
#
|
||||||
# Note if you include INET/INET6 or both options
|
# Note if you include INET/INET6 or both options
|
||||||
# You *must* define at least one of the congestion control
|
# You *must* define at least one of the congestion control
|
||||||
# options or the compile will fail. Generic defines
|
# options or the compile will fail. GENERIC defines
|
||||||
# options CC_NEWRENO. You also will need to specify
|
# options CC_CUBIC. You may want to specify a default
|
||||||
# a default or the compile of your kernel will fail
|
# if multiple congestion controls are compiled in.
|
||||||
# as well. The string in default is the name of the
|
# The string in default is the name of the
|
||||||
# cc module as it would appear in the sysctl for
|
# cc module as it would appear in the sysctl for
|
||||||
# setting the default. Generic defines newreno
|
# setting the default. The code defines CUBIC
|
||||||
# as shown below.
|
# as default, or the sole cc_module compiled in.
|
||||||
#
|
#
|
||||||
options CC_CDG
|
options CC_CDG
|
||||||
options CC_CHD
|
options CC_CHD
|
||||||
@ -667,8 +667,8 @@ options CC_HD
|
|||||||
options CC_HTCP
|
options CC_HTCP
|
||||||
options CC_NEWRENO
|
options CC_NEWRENO
|
||||||
options CC_VEGAS
|
options CC_VEGAS
|
||||||
options CC_DEFAULT=\"newreno\"
|
options CC_DEFAULT=\"cubic\"
|
||||||
options RATELIMIT # TX rate limiting support
|
options RATELIMIT # TX rate limiting support
|
||||||
|
|
||||||
options ROUTETABLES=2 # allocated fibs up to 65536. default is 1.
|
options ROUTETABLES=2 # allocated fibs up to 65536. default is 1.
|
||||||
# but that would be a bad idea as they are large.
|
# but that would be a bad idea as they are large.
|
||||||
|
@ -23,7 +23,7 @@ options GEOM_PART_MBR
|
|||||||
options GEOM_PART_GPT
|
options GEOM_PART_GPT
|
||||||
|
|
||||||
# Default congestion control algorithm
|
# Default congestion control algorithm
|
||||||
options CC_NEWRENO # include newreno congestion control
|
options CC_CUBIC # include CUBIC congestion control
|
||||||
|
|
||||||
# enable support for native hardware
|
# enable support for native hardware
|
||||||
device atpic
|
device atpic
|
||||||
|
@ -81,7 +81,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
* Have a sane default if no CC_DEFAULT is specified in the kernel config file.
|
* Have a sane default if no CC_DEFAULT is specified in the kernel config file.
|
||||||
*/
|
*/
|
||||||
#ifndef CC_DEFAULT
|
#ifndef CC_DEFAULT
|
||||||
#define CC_DEFAULT "newreno"
|
#define CC_DEFAULT "cubic"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint32_t hystart_minrtt_thresh = 4000;
|
uint32_t hystart_minrtt_thresh = 4000;
|
||||||
|
@ -13,6 +13,6 @@ options GEOM_PART_BSD
|
|||||||
options GEOM_PART_MBR
|
options GEOM_PART_MBR
|
||||||
|
|
||||||
# Default congestion control algorithm
|
# Default congestion control algorithm
|
||||||
options CC_NEWRENO # include newreno congestion control
|
options CC_CUBIC # include CUBIC congestion control
|
||||||
|
|
||||||
options NEW_PCIB
|
options NEW_PCIB
|
||||||
|
@ -13,6 +13,6 @@ options GEOM_PART_BSD
|
|||||||
options GEOM_PART_MBR
|
options GEOM_PART_MBR
|
||||||
|
|
||||||
# Default congestion control algorithm
|
# Default congestion control algorithm
|
||||||
options CC_NEWRENO # include newreno congestion control
|
options CC_CUBIC # include CUBIC congestion control
|
||||||
|
|
||||||
options NEW_PCIB
|
options NEW_PCIB
|
||||||
|
Loading…
Reference in New Issue
Block a user