What are the available TCP congestion control algorithms in Red Hat Enterprise Linux?

Solution Verified - Updated

Environment

  • Red Hat Enterprise Linux (all versions)
  • TCP (Transmission Control Protocol)

Issue

  • What are the available TCP congestion control algorithms in Red Hat Enterprise Linux?
  • How to check which IPv4 TCP congestion algorithm are available?
  • How to check which IPv4 TCP congestion algorithm is in use?

Resolution

Common NameKernel Config OptionEL5EL6EL7EL8EL9
RenoAlways availableyesyesyesyesyes
Bottleneck Bandwidth and Round-tripTCP_CONG_BBRN/AN/AN/Amodmod
Binary Increase CongestionTCP_CONG_BICDefmodmodmodmod
CUBICTCP_CONG_CUBICmodDefDefDefDef
Data-Center TCPTCP_CONG_DCTCPN/AN/AN/Amodmod
High Speed TCPTCP_CONG_HSTCPmodmodmodmodN/A
H-TCPTCP_CONG_HTCPmodmodmodmodmod
HyblaTCP_CONG_HYBLAmodmodmodmodN/A
IllinoisTCP_CONG_ILLINOISN/AmodmodmodN/A
Low PriorityTCP_CONG_LPmodmodmodmodN/A
New VegasTCP_CONG_NVN/AN/AN/Amodmod
Scalable TCPTCP_CONG_SCALABLEmodmodmodmodN/A
VegasTCP_CONG_VEGASmodmodmodmodN/A
VenoTCP_CONG_VENOmodmodmodmodN/A
Westwood+TCP_CONG_WESTWOODmodmodmodmodmod
YeAHTCP_CONG_YEAHN/AmodmodmodN/A

Key:

  • Def = built into kernel and default
  • yes = built into kernel
  • mod = loadable kernel module
  • N/A = Not Available

To list the available TCP congestion modules provided with kernel:

# ls -1 /lib/modules/$(uname -r)/kernel/net/ipv4/tcp_*.ko*
tcp_bic.ko
tcp_highspeed.ko
tcp_htcp.ko
...

RHEL 6 (or later) - query the kernel for a list currently available (i.e. built into kernel and/or kernel module already loaded)

# sysctl -q net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = cubic reno

To set the desired algorithm for the current runtime:

# sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = cubic

# sysctl -w net.ipv4.tcp_congestion_control=htcp
net.ipv4.tcp_congestion_control = htcp

This can be persisted in /etc/sysctl.conf.

To load additional congestion control algorithms as modules, see:

Diagnostic Steps

  • To check TCP Congestion Algorithms a RHEL kernel was compiled with you can consult the /boot/config-$(uname -r) file:
# grep CONFIG_TCP_CONG /boot/config-$(uname -r)
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=m
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_WESTWOOD=m
...
Components
Category

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.