Monday, January 13, 2014

Comparing Queue Disciplines in CeroWRT

This is a comparison of the various queue disciplines, on my home network (, using a Netgear WNDR3800 and running CeroWRT 3.10.24-8.

Overall Setup

This is my current SQM setup in CeroWRT:

Bandwidth Limit:  21000 down / 1160 up (kbps)
Link-Layer Adaptation:  ATM, using 40-byte overhead
ECN enabled in both directions

The raw link speeds reported by my modem are:

download:  21181 Kbps
upload: 1171 Kbps

This sets my bandwidth limits at 99% of the reported link rate.

The baseline rates achieved via the benchmark, by the freebox server (without using the WNDR3800) are:

18.07Mbps (download) / 0.99Mbps (upload), 31ms ping

Default (fq_codel) results:  17.11 / 0.90 Mbps, ping 32ms

 And this is the cdf of the latencies:

efq_codel results:  17.17 / 0.88 Mbps, 33ms ping

nfq_codel results:  17.09 / 0.93 Mbps, ping: 32ms

pie results: 17.22 / 0.92 Mbps, ping: 33ms

This is not very tasty of a pie, once the rrul load hits it:

I'm not sure what's going wrong, but it starts bad, and just gets worse.  Given the results that I've seen elsewhere, I'm going to chalk this up to a bug in the current pie implementation, and not results that are representative of those seen by Cablelabs while developing it.

And yes, the overall competing flow throughput is pretty abysmal.  This is the realtime graph from the router.  The early block is the test, and then the rrul test load is the longer test at much lower throughput levels.

sfq results:  17.26 / 0.94 Mbps, ping 31ms

I'm not sure what happened with this as well, except that the UDP response time tests are functional, and both throughput and realtime response under load is fairly poor.

ns2_codel results:  17.18 / 0.92 Mbps, ping: 32ms

And it appears to completely fall apart under a varying load, for reasons that I can't tell (or the netperf tests do).  Repeated tests show the same sorts of behavior.

I saw the identical patterns yesterday as well (running on a shorter test over wifi).  I'm not sure who blame, a bug in netperf, or a bug in the discipline when faced with the rrul test load.

codel results:  17.17 / 0.93 Mbps, ping: 32ms

And odd results when using codel...  I'm assuming that this is a test issue. bandwidth on the left, and rrul load on the right...

efq_codel quantum 500 results:  17.02 / 0.91 Mbps, ping: 32ms

rrul load seems oddly unstable vs the previous efq_codel test (at a default quantum)

Latency isn't quite as good as the other efq_codel test, but not far from it.

efq_codel quantum 1000 results:  17.06 / 0.89 Mbps, ping: 31ms

This seemed like an odd results, so I ran it twice

And got the same shape results.  I'm not sure what's causing it, unless it's an issue with the upload tests.

efq_codel comparison

This is a comparison of the efq_codel tests, against one another, for comparison.  At least for these tests, the default (quantum 1000?) appears to not be worth attempting to adjust.


If one would like to split hairs (which it feels like that's where we're at for the choices among the better disciplines, then fq_codel seems to be working best for this sytem.  It's continually had top latency, and it gives the most consistent bandwidth.