Search The Hostwinds Guides Knowledge Base

How to Enable Google’s TCP BBR (Linux Cloud VPS)

Share This Article [TheChamp-Sharing]

Bottleneck Bandwidth and Round-trip propagation time, or BBR, is a congestion control algorithm that powers traffic from google.com and YouTube.  The algorithm was developed by Google, and it can produce higher throughput, and lower latency for traffic from your VPS.

Step 2 in the guide below will allow you to enable BBR on any Linux server with a kernel version 4.9.0 or later. Hostwinds’ Ubuntu 18.04 and Debian 9 images have an elgible kernel.

Step 1 below explains how to upgrade the kernel on CentOS 7, which is required with Hostwinds’ image. Step 1 also shows how to upgrade the kernel in Ubuntu 18.04, although it is not necessary for Hostwinds image if you have installed Ubuntu 18.04 from the Operating Sytem options on your server.

Step 1: Upgrade Kernel Version (If Necessary)

It is encouraged to update your Linux VPS prior to making any of the changes below. See our guide for help on updating your system. As always, make sure you have a good working backup by taking a snapshot is recommended.

Kernel version 4.9.0 or later is required in order to use the BBR algorithm. Check your current kernel version with:

uname -r

If you already have a kernel version 4.9.0 or later, you can skip to Step 2 below. Or you can upgrade if you like.

CentOS 7:

The kernel of Hostwinds’ CentOS 7 image will need to be upgraded from CentOS Linux (3.10.0-693.2.2.el7.x86_64) 7 (Core). You can upgrade to the latest stable kernel version (currently kernel-ml.x86_64 0:5.4.13-1.el7.elrepo) with the following steps.

Install the ELRepo repo:

sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

Install the kernel-ml.x86_64 0:5.4.13-1.el7.elrepo kernel using the ELRepo repo:

sudo yum --enablerepo=elrepo-kernel install kernel-ml -y

Next, run:

yum list installed kernel

You should find your newly installed BBR-compatible kernel version among the list.

Now list all entries in the grub2 menu, using:

sudo egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'

Your newly installed kernel version should be at the top of the list. The top of the list is position 0 in the index. If your kernel version is listed at the top, use 0 in the command below. If it is second-from-the-top, use 1, and so on. See example output below:

CentOS Linux (5.4.13-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux 7 Rescue 4dd7e2d4553149f4943676c4f1794b0a (3.10.0-1062.9.1.el7.x86_64)
CentOS Linux (3.10.0-1062.9.1.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-693.2.2.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-514.26.2.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-de149d15bc21de2e4cc85376c8c61208) 7 (Core)

Set the default boot entry:

sudo grub2-set-default 0

Finally, reboot the server:

reboot

Verify the result. You should find your newly installed kernel version listed after running:

uname -r

Ubuntu 18.04:

Hostwinds’ Ubuntu 18.04 image should return an elgible kernel version like below after running uname -r:

4.15.0-22-generic

To upgrade to the latest stable kernel version, 5.4.13, run each of the following separately:

cd /tmp/

wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.4.13/linux-headers-5.4.13-050413_5.4.13-050413.202001171431_all.deb

wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.4.13/linux-headers-5.4.13-050413-generic_5.4.13-050413.202001171431_amd64.deb

wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.4.13/linux-headers-5.4.13-050413-lowlatency_5.4.13-050413.202001171431_amd64.deb

wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.4.13/linux-image-unsigned-5.4.13-050413-generic_5.4.13-050413.202001171431_amd64.deb

wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.4.13/linux-image-unsigned-5.4.13-050413-lowlatency_5.4.13-050413.202001171431_amd64.deb

wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.4.13/linux-modules-5.4.13-050413-generic_5.4.13-050413.202001171431_amd64.deb

wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.4.13/linux-modules-5.4.13-050413-lowlatency_5.4.13-050413.202001171431_amd64.deb

sudo dpkg -i *.deb

Finally, reboot the server:

reboot

Verify the result. You should find your newly installed kernel version listed after running:

uname -r

Step 2: Enable Google’s BBR Algorithm

For this next step, use your favorite text editor to edit sysctl.conf:

sudo vim /etc/sysctl.conf

Add the following two lines at the end of sysctl.conf:

net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

Save and exit sysctl.conf, then refresh with your new configuration:

sudo sysctl -p

For the final test, verify which congestion control algorithm your system is using:

sysctl net.ipv4.tcp_congestion_control

If you have the folllowing output, you have successfully enabled Google’s BBR algorithm:

net.ipv4.tcp_congestion_control = bbr

Related Articles