I have reading this new post from Cloudflare about their congestion control implementations for QUIC.
Reading the article I wanted to check the TCP CCA (Congestion Control Algorithm) available in my laptop (Debian 1o Testing).
So I searched a bit and found a couple of useful links like this:
For checking your current TCP CCA:
# sysctl net.ipv4.tcp_congestion_control net.ipv4.tcp_congestion_control = cubic $ cat /proc/sys/net/ipv4/tcp_congestion_control cubic
For checking the available TCP CCAs:
# sysctl net.ipv4.tcp_available_congestion_control net.ipv4.tcp_available_congestion_control = reno cubic
As well, you can see via “ss” the CCA per connection:
$ ss -ti ... tcp ESTAB 0 0 192.168.1.158:60238 169.54.204.232:https cubic wscale:7,7 rto:320 rtt:116.813/2.428 ato:40 mss:1448 pmtu:1500 rcvmss:1448 advmss:1448 cwnd:10 bytes_sent:4366 bytes_acked:4367 bytes_received:7038 segs_out:98 segs_in:183 data_segs_out:91 data_segs_in:93 send 991.7Kbps lastsnd:1260 lastrcv:1260 lastack:1140 pacing_rate 2.0Mbps delivery_rate 102.2Kbps delivered:92 app_limited busy:10632ms rcv_space:14480 rcv_ssthresh:64088 minrtt:113.391 ...
If you want to change your TCP CCA, this is a good link:
Check the modules installed:
$ ls -la /lib/modules/$(uname -r)/kernel/net/ipv4
Check the kernel config:
$ grep 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 CONFIG_TCP_CONG_HTCP=m CONFIG_TCP_CONG_HSTCP=m CONFIG_TCP_CONG_HYBLA=m CONFIG_TCP_CONG_VEGAS=m CONFIG_TCP_CONG_NV=m CONFIG_TCP_CONG_SCALABLE=m CONFIG_TCP_CONG_LP=m CONFIG_TCP_CONG_VENO=m CONFIG_TCP_CONG_YEAH=m CONFIG_TCP_CONG_ILLINOIS=m CONFIG_TCP_CONG_DCTCP=m CONFIG_TCP_CONG_CDG=m CONFIG_TCP_CONG_BBR=m CONFIG_DEFAULT_TCP_CONG="cubic"
We can see that “cubic” is the default TCP CCA and we have for example BBR available as a module.
So let’s change to BBR (rfc, github, blog) based on this link:
Check the kernel supports BBR:
$ cat /boot/config-$(uname -r) | grep 'CONFIG_TCP_CONG_BBR' CONFIG_TCP_CONG_BBR=m $ cat /boot/config-$(uname -r) | grep 'CONFIG_NET_SCH_FQ' CONFIG_NET_SCH_FQ_CODEL=m CONFIG_NET_SCH_FQ=m
Enable TCP BBR:
# vi /etc/sysctl.conf net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr
Apply the changes:
# sysctl --system
And check:
$ cat /proc/sys/net/ipv4/tcp_congestion_control bbr
So we have moved from CUBIC to BBR. Let’s see how is the experience in the following days.