Google BBR: How to install it on CentOS 7

It’s been a while since a new TCP congestion has been developed (by Google), which has the potential to replace the default cubic one! The TCP BBR tries to keep being fast and improves network connectivity when there is packet loss. It’s easy to deploy BBR because this algorithm requires only updates on the sender side, not in the network or on the receiver side.


According to Google’s tests, BBR’s throughput can reach as much as 2,700x higher than today’s best loss-based congestion control; queueing delays can be 25x lower.

In this article, we will show you how to deploy BBR on a CentOS 7 server.

Step 1: Upgrade the kernel

To use BBR you need to upgrade to the latest stable kernel on CentOS 7.

Let’s take a look at the current kernel first:

uname -r

In our case, the output would be a string like the following:

3.10.0-514.2.2.el7.x86_64

This indicates that our kernel version is 3.10, we need to upgrade it to the latest to enable BBR.

Install the ELRepo repo:

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

Install the 5.0.7 kernel using the ELRepo repo:

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

After it’s completed, let’s check latest stable kernel installation:

rpm -qa | grep kernel

If the installation is successful, you should see kernel-ml-5.0.7-1.el7.elrepo.x86_64 among the output list:

kernel-3.10.0-957.10.1.el7.x86_64
kernel-ml-devel-5.0.7-1.el7.elrepo.x86_64
kernel-3.10.0-957.5.1.el7.x86_6
kernel-tools-libs-3.10.0-957.10.1.el7.x86_64
kernel-tools-3.10.0-957.10.1.el7.x86_64
kernel-ml-5.0.7-1.el7.elrepo.x86_64
kernel-3.10.0-957.el7.x86_64
kernel-devel-3.10.0-957.10.1.el7.x86_64
kernel-headers-3.10.0-957.10.1.el7.x86_64

Step 2 – Enable The Latest Stable Kernel

Now, you need to enable the 5.0.7 kernel by setting up the default grub2 boot entry.

Show all entries in the grub2 menu:

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

The result should resemble:

CentOS Linux (5.0.7-1.el7.elrepo.x86_64) 7 (Core)

CentOS Linux (3.10.0-957.10.1.el7.x86_64) 7 (Core)

CentOS Linux (3.10.0-957.5.1.el7.x86_64) 7 (Core)

CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)

CentOS Linux (0-rescue-48eae5db334f4be180c62013c3806594) 7 (Core)

Set the default boot entry, the count starts at 0 and the latest stable kernel is on the first line thus set it to 0.

grub2-set-default 0

Now we just need to reboot the server:

shutdown -r now

When the server is back online, log back in and rerun the uname command to confirm that you are using the correct kernel:

5.0.7-1.el7.elrepo.x86_64

Step 3: Enable Google BBR

To enable Google BBR algorithm, you need to modify systctl as follows:

echo 'net.core.default_qdisc=fq' | tee -a /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control=bbr' | tee -a /etc/sysctl.conf
sysctl -p

Now let’s verify if BBR is enabled, run the following command:

sysctl net.ipv4.tcp_available_congestion_control

The output should resemble:

net.ipv4.tcp_available_congestion_control = bbr cubic reno

Next, verify with:

lsmod | grep bbr

The output should resemble :

tcp_bbr 20480 21

That’s all and congratulations! You have successfully installed TCP BBR Congestion Control!