FqCobalt queue disc

This chapter describes the FqCobalt ([Pal19]) queue disc implementation in ns-3.

The FlowQueue-Cobalt (FQ-Cobalt) algorithm is similar to FlowQueue-CoDel (FQ-CoDel) algorithm available in :FqCoDel queue disc. The documentation for Cobalt is available in ns-3-dev/src/traffic-control/doc/cobalt.rst.

FqCobalt is one of the key components of the CAKE smart queue management framework ([Hoe18]). The COBALT AQM is preferred to the CoDel AQM for CAKE because it adds a heuristic called BLUE to cover cases in which the CoDel control law is too sluggish to respond to queue growth.

Model Description

The source code for the FqCobalt queue disc is located in the directory src/traffic-control/model and consists of 2 files fq-cobalt-queue-disc.h and fq-cobalt-queue-disc.cc defining a FqCobaltQueueDisc class and a helper FqCobaltFlow class. The code was ported to ns-3 based on Linux kernel code implemented by Jonathan Morton (https://github.com/torvalds/linux/blob/master/net/sched/sch_cake.c).

The Model Description is similar to the FqCoDel documentation mentioned above.


  1. Palmei, S. Gupta, P. Imputato, J. Morton, M. Tahiliani, S. Avallone, and D. Taht, Design and Evaluation of COBALT Queue Discipline, 2019 IEEE International Symposium on Local and Metropolitan Area Networks (LANMAN), Paris, France, 2019.
  1. Hoiland-Jørgensen, D. Taht and J. Morton, “Piece of CAKE: A Comprehensive Queue Management Solution for Home Gateways,” 2018 IEEE International Symposium on Local and Metropolitan Area Networks (LANMAN), Washington, DC, USA, 2018.


Most of the key attributes are similar to the FqCoDel implementation mentioned above. One difference is the absence of the MinBytes parameter.

Some additional parameters implemented as attributes are:

  • Pdrop: Value of drop probability.
  • Increment: Increment value of drop probability. Default value is 1./256 .
  • Decrement: Decrement value of drop probability. Default value is 1./4096 .
  • BlueThreshold: The threshold after which Blue is enabled. Default value is 400ms.

Note that if the user wants to disable Blue Enhancement then the user can set it to a large value; for example, to Time::Max ().


A typical usage pattern is to create a traffic control helper and to configure the type and attributes of the queue disc and filters from the helper. For example, FqCobalt can be configured as follows:

TrafficControlHelper tch;
tch.SetRootQueueDisc ("ns3::FqCobaltQueueDisc", "DropBatchSize", UintegerValue (1)
                                               "Perturbation", UintegerValue (256));
QueueDiscContainer qdiscs = tch.Install (devices);


The FqCobalt model is tested using FqCobaltQueueDiscTestSuite class defined in src/test/ns3tc/codel-queue-test-suite.cc.

The tests are similar to the ones for FqCoDel queue disc mentioned in first section of this document. The test suite can be run using the following commands:

$ ./waf configure --enable-examples --enable-tests
$ ./waf build
$ ./test.py -s fq-cobalt-queue-disc


$ NS_LOG="FqCobaltQueueDisc" ./waf --run "test-runner --suite=fq-cobalt-queue-disc"