client.socket.congestion_algorithm

STRING, can be read and set, but not unset.

Available inrecvdeliverlogerror

Congestion control algorithm for the client connection. Available values at this time are cubic, reno, or bbr, with cubic being the default. VCL that sets this variable should read the value back afterwards to confirm that the selection was able to be honored by the kernel configuration.

New Reno, selected with the reno token, is the classic loss-driven TCP congestion control approach. It is known for cyclically filling and emptying buffers along the path, for performing poorly in the face of non-congestion driven packet loss, and for being too conservative in the face of situations like high bandwidth or high delay paths.

Cubic is defined in RFC 8312. Like reno, it is a pure loss-based algorithm. It is more aggressive than reno and does a better job of effectively using high bandwidth and high delay paths but still struggles in the presence of loss. This aggressiveness also leads to consistent filling of on-path buffers and the creating of bufferbloat and interference with latency-sensitive applications like VOIP or gaming.

BBR considers both loss and delay and explicitly seeks to maintain the highest sending rate at a constant delay. BBR, due to its consideration of buffering induced delay, is better at maintaining shallow buffers and better network latency for other applications. BBR is the newest of these algorithms and is still evolving and considered experimental.

Try it out

client.socket.congestion_algorithm is used in the following code examples. Examples apply VCL to real-world use cases and can be deployed as they are, or adapted for your own service. See the full list of code examples for more inspiration.

Click RUN on a sample below to provision a Fastly service, execute the code on Fastly, and see how the function behaves.

Comprehensive logging

Fastly offers a myriad of different variables that you can log. See and test a large collection here.

User contributed notes

BETA

Do you see an error in this page? Do you have an interesting use case, example or edge case people should know about? Share your knowledge and help people who are reading this page! (Comments are moderated; for support, please contact Fastly support)