Can I use TCP BBR on my Linode?
I want to enable TCP BBR, does my Linode support that?
5 Replies
TCP BBR can be enabled on your Linode by following these steps. The following steps were performed on a Linode running Ubuntu 16.04 with the Linode-supplied 4.15.8-x86_64-linode103 kernel.
1) (Optional) At the Linode’s command line, the current congestion control algorithm (CCA) in use can be checked by issuing the following command:
sysctl net.ipv4.tcp_congestion_control
By default, this Linode returns:
net.ipv4.tcp_congestion_control = cubic
2) Check the kernel version using the following command. It needs to be 4.9 or greater to use BBR, otherwise it will need to be updated.
uname -r
3) Set BBR as the CCA. The necessary lines can be added to the sysctl.conf file with the following cat
command:
cat <<-EOF | sudo tee -a /etc/sysctl.conf
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
Or, they can be added to the end of sysctl.conf using a text editor like nano:
nano /etc/sysctl.conf
4) Finally, reboot the Linode for the changes to take effect. After rebooting, check the CCA algorithm again by running the command from step 1:
sysctl net.ipv4.tcp_congestion_control
Which should produce the following output:
net.ipv4.tcp_congestion_control = bbr
But isn't fq qdisc no longer required with 4.13+ Linux Kernels as they have TCP level pacing https://github.com/google/bbr/blob/master/Documentation/bbr-quick-start.md ?
TCP BBR is in Linux v4.9 and beyond. However, we recommend compiling from the latest sources, from the networking development branch. In particular, in the davem/net-next networking development branch (and Linux v4.13-rc1 and beyond) there is new support for TCP-level pacing. This means that there is no longer a requirement to install the "fq" qdisc to use BBR. Any qdisc will do.
I just ran through this on a CentOS 7 Linode with a 4.15.8 kernel and it appears that you're absolutely correct. Simply running the following command provided me with the switch to BBR:
cat << EOF | tee -a /etc/sysctl.conf
net.ipv4.tcp_congestion_control=bbr
EOF
The rest of the article that you've linked to appears to be referencing specific changes that are made at a kernel level though so I'd be cautious although there are guides for installing your own custom kernel for both CentOS 7 and Debian/Ubuntu.
-Garrett
@eva2000 I'm not an expert on this, but as I understand it, TCP-level pacing is no longer required, but recommended for performance reasons.
See excerpt:
* NOTE: BBR might be used with the fq qdisc ("man tc-fq") with pacing enabled,
* otherwise TCP stack falls back to an internal pacing using one high
* resolution timer per TCP socket and may use more resources.
It may be a good idea to clarify this though.