IPFire 2.13 Tech Preview - Fighting bufferbloat

by Michael Tremer, September 6, 2012

Do you like what you are reading? Subscribe to our newsletter and don't miss out on the latest...   Join Now

This is one of many posts which will introduce some of the new features of IPFire 2.13. Before you ask, there is not release date set, yet because IPFire 2.13 still needs a lot of testing! Please join: English thread, German thread

Today, I would like to talk about bufferbloat.

What is bufferbloat? The bufferbloat project puts it like this:

“Bloated buffers lead to network-crippling latency spikes.”

This simply says, that the buffers in networking devices are constantly more than full, i.e. bloated. Full buffers will cause a huge amount of latency and even more congestion on a network link.
Correction by Leen Besselink: “Buffering on the Internet is needed at every point where traffic moves from a large connection to a smaller connection. Bufferbloat is the problem where because of cheap memory buffers have become larger than they should be which can cause a huge amount of latency.”

A more detailed and non-technical introduction can be found over here. Please go and read this first, if you don’t already know about bufferbloat.

Reading intermission…

In summary, one of the many things the bufferbloat project which has been founded by Jim Gettys has done to fix the bufferbloat problem is the AQM algorithm. The implementation in Linux is called Codel (pronounced coddle) which has been ported to IPFire 2.13!

So, why is this so important? Codel is able to create a whole new experience of your internet connection. Have you ever had to upload a huge amount of data, say a YouTube video? No matter what the uplink speed is, during the upload, you won’t be able to open a web page.

The reason of this behaviour is the buffers on the way to the destination (here YouTube). They are filled up with data and it takes some time to transmit all packets in the queue – hence the huge delay which has been about >1200 ms on my 6000/600 DSL connection.

If you use the fq_codel queueing discipline, which can simply be activated by enabling the IPFire Quality of Service, the Codel algorithm starts to do its work. Basically, it reduces the amount of data in the buffers of your network controller and your modem and that keeps you connection fast. In my test, the latency decreased from over 1200 ms to about 20 ms, which is truly amazing. The upload speed remained the same.

Once again, I had a DSL connection, which is able to transmit exactly 50 kB/s (yeah, the provider is shit) and has got a latency of 14 ms. The table below shows what kind of difference fq_codel makes:

QoS disabled QoS enabled
Upload speed ~ 50 kB/s ~ 49 kB/s
Latency > 1200 ms ~ 20 ms

That’s pretty amazing if you think about a real-life scenario: Browsing the web which doing an upload it not a pain anymore. A VoIP call would be smooth as if the connection did not transfer anything else. Transferring data while playing an online game is also not a problem anymore.

If you are as much excited as I am, please have a look at IPFire 2.13. It is looking good. There have not been any bigger problems, yet, but we would like you to test it a little bit more.

Don’t forget to enable the QoS. It is easily set up with the preset and you are ready to use codel.

Latency graph

… which speaks for itself.

Latency graph