This tutorial shows you how to enable TCP BBR on Ubuntu. TCP BBR is a TCP congestion control algorithm developed by Google. It tackles shortcomings of traditional TCP congestion control algorithms (Reno or CUBIC). According to Google, it can achieve orders of magnitude higher bandwidth and lower latency. TCP BBR is already being used on Google.com, YouTube and Google Cloud Platform and the Internet Engineering Task Force (IETF) has been standardizing this algorithm Since July, 2017. BBR stands for Bottleneck Bandwidth and RTT.
BBR requires only changes on the sender side. You can enable TCP BBR on your Linux desktop to improve overall web surfing experience. If you have a Linux web server, TCP BBR can achieve faster web page downloads for your website visitors.
How to Check TCP Congestion Control Algorithms on Linux
By default, Linux uses the Reno
and CUBIC
congestion control algorithm. To check available congestion control algorithms, run the following command.
sysctl net.ipv4.tcp_available_congestion_control
Output:
net.ipv4.tcp_available_congestion_control = cubic reno
To check the current congestion control algorithm in use, run
sysctl net.ipv4.tcp_congestion_control
Output:
net.ipv4.tcp_congestion_control = cubic
Install Linux Kernel 4.9 or Above
TCP BBR is supported by Linux since kernel version 4.9. Use the following command to check your Linux kernel version.
uname -r
Ubuntu 18.04 has kernel 4.13.
4.13.0-16-generic
On Ubuntu 16.04 desktop, the kernel version is 4.10.
4.10.0-40-generic
It’s a different story on Ubuntu 16.04 servers, depending on your VPS provider. For example, Linode VPSprovides kernel 4.9.
4.9.50-x86_64-linode86
DigitalOcean provides kernel 4.4.
4.4.0-81-generic
It’s very easy to install Linux kernel 4.10 on Ubuntu 16.04. You don’t have to manually download the kernel from Ubuntu website. Simply install the Hardware Enablement Stack(HWE), which provides newer kernel for Ubuntu LTS releases.
sudo apt update
sudo apt install --install-recommends linux-generic-hwe-16.04
Your VPS provider may use a custom Linux kernel instead of the Ubuntu-provided kernel. If you use Linode VPS, then you need to go to Linode VPS control penal, edit your configuration profile.
In Boot Settings, set kernel to GRUB2.
Save your changes. Then reboot to use the new 4.10 kernel.
sudo shutdown -r now
Enable TCP BBR in Ubuntu
Once you have kernel 4.9 or above, edit sysctl.conf file.
sudo nano /etc/sysctl.conf
Add the following two line at the end of the file.
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
Save and close the file. Then reload sysctl configurations.
sudo sysctl -p
Now check the congestion control algorithm in use.
sysctl net.ipv4.tcp_congestion_control
Output:
net.ipv4.tcp_congestion_control = bbr
Congrats! You have successfully enabled TCP BBR on Ubuntu.
Speed Improvements
I used Shadowsocks proxy on a low-end VPS to test TCP BBR. The speed improvement is huge. The following screenshot shows YouTube connection speed before enabling TCP BBR on my proxy server. As you can see, the speed is only around 400Kb/s (50KB/s).
This is YouTube connection speed after enabling TCP BBR on my proxy server. 9878 Kb/s is about 1234 KB/s. My proxy server just got 24 times faster!
On a second Shadowsocks proxy server, the speed went from around 10Mbit/s to around 62Mbit/s (64172Kbit/s) after enabling TCP BBR.
That’s it! I hope this tutorial helped you enable TCP BBR on Ubuntu. As always, if you found this post useful.