Battling Bufferbloat: An experimental comparison of four approaches to queue management in Linux

Toke Høiland-Jørgensen

Studenteropgave: Semesterprojekt


The term bufferbloat has been coined to describe the problem that occurs when computer network buffers misbehave, inducing unnecessary latency. If the buffers are too large, packets sit in the buffer queues instead of being dropped, and no signals of congestion reach the endpoints; meaning that they do not slow down in a timely manner, and the buffers stay full, severely increasing latency. This project aims to demonstrate the bufferbloat problem, and provide an overview of the current state of the art in controlling bufferbloat in the Linux operating system. To achieve this, a theoretical overview is combined with experimental data from a controlled testing environment, in which the test hosts are configured per the bufferbloat community guidelines to maximise the kernel queueing disciplines' control of the packet queue. On this setup three tests are conducted: A simple bidirectional TCP test, a Realtime Response Under Load (RRUL) test designed by the bufferbloat community, and a UDP flood test. Each test is repeated for each of the four tested queueing disciplines: the default pfifo_fast, the CoDel algorithm implementation (codel qdisc), the Stochastic Fairness Queueing (sfq) qdisc and finally the combination of fairness queueing and CoDel queue management as implemented in the fq_codel qdisc. Tests are run using the netperf-wrapper testing harness developed for this purpose by the author. The test results correspond well with the expectations, and show that the default pfifo_fast qdisc suffers from decreased throughput and significantly increased latency under load, with all the other qdiscs providing orders of magnitude lower latency when the link is loaded. The results show that the CoDel algorithm can manage the queues of well-behaved TCP streams to some extent, providing somewhat lower latencies. However, ill-behaved streams, as tested in the UDP flood test, show the need for fairness queueing to distribute bandwidth among flows. The combination of fairness queueing with the CoDel algorithm, as implemented in the fq_codel qdisc, exhibits significantly lower latency under load than any of the other qdiscs when the number of concurrent bidirectional streams increase beyond one. Total throughput when using fq_codel is slightly lower than using sfq; however, for multiple flows the loss of total throughput is relatively small (2.2%) compared to the gains in latency (66%). Overall, the results of using the fq_codel qdisc are encouraging, showing a decrease in latency under load to less than 20 milliseconds, from almost a second when using the default pfifo_fast qdisc.

UddannelserDatalogi, (Bachelor/kandidatuddannelse) Bachelor el. kandidat
Udgivelsesdato7 jan. 2013
VejledereBo Holst-Christensen


  • rrul
  • bufferbloat
  • queueing
  • codel
  • congestion
  • fairness queueing
  • network
  • sfq