What are the available TCP congestion control algorithms in Red Hat Enterprise Linux?
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 Name | Kernel Config Option | EL5 | EL6 | EL7 | EL8 | EL9 |
|---|---|---|---|---|---|---|
| Reno | Always available | yes | yes | yes | yes | yes |
| Bottleneck Bandwidth and Round-trip | TCP_CONG_BBR | N/A | N/A | N/A | mod | mod |
| Binary Increase Congestion | TCP_CONG_BIC | Def | mod | mod | mod | mod |
| CUBIC | TCP_CONG_CUBIC | mod | Def | Def | Def | Def |
| Data-Center TCP | TCP_CONG_DCTCP | N/A | N/A | N/A | mod | mod |
| High Speed TCP | TCP_CONG_HSTCP | mod | mod | mod | mod | N/A |
| H-TCP | TCP_CONG_HTCP | mod | mod | mod | mod | mod |
| Hybla | TCP_CONG_HYBLA | mod | mod | mod | mod | N/A |
| Illinois | TCP_CONG_ILLINOIS | N/A | mod | mod | mod | N/A |
| Low Priority | TCP_CONG_LP | mod | mod | mod | mod | N/A |
| New Vegas | TCP_CONG_NV | N/A | N/A | N/A | mod | mod |
| Scalable TCP | TCP_CONG_SCALABLE | mod | mod | mod | mod | N/A |
| Vegas | TCP_CONG_VEGAS | mod | mod | mod | mod | N/A |
| Veno | TCP_CONG_VENO | mod | mod | mod | mod | N/A |
| Westwood+ | TCP_CONG_WESTWOOD | mod | mod | mod | mod | mod |
| YeAH | TCP_CONG_YEAH | N/A | mod | mod | mod | N/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
...
SBR
Product(s)
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.