Kernel Korner - Analysis of the HTB Queuing Discipline

Can Linux do Quality of Service in a way that both offers high throughput and does not exceed the defined bandwidth? Here's a thorough test.

Testing Model 2

Figure 10. Test 1: Three streams In, one stream Out

Table 8. Test 1 Results

Stream

Burst (Bytes)

Cburst (Bytes)

Packet-Size (Bytes)

In-Bandwidth (Mbit/s)

Out-Bandwidth (Mbit/s)

Class

1

1k

1k

512

5

0.650

2

2

1k

1k

512

5

0.600

2

3

1k

1k

512

5

0.568

2

Total

18k

18k

–

15

1.818

–

As shown in Table 8, the bandwidth is distributed
evenly when several streams are transmitting the
same number of bytes and belong to the same
class. Another test, in which the input bandwidth
in stream 1 was higher than that of streams 2 and
3, showed that the output bandwidth of stream 1
also was higher than streams 2 and 3. From
these results, it can be concluded that if more data
is sent on a specific stream, the stream is
able to forward more packets than other streams
within the same class.

Conclusions

The test cases presented here demonstrate one
way to evaluate HTB accuracy and performance.
Although continuous packet bursts at a specific
rate don't necessarily simulate real-world traffic,
it does provide basic guidelines for defining the
HTB classes and their associated attributes.

The following statements summarize the test
case results:

The maximum bandwidth that a Linux machine can forward (receive on one interface and
transmit on another interface) with continuous
streams of 64-byte packets is approximately
34Mbit/s. This upper limit occurs because every
packet that the Ethernet driver receives or
transmits generates an interrupt. Interrupt
handling occupies CPU time, and thus prevents
other processes in the system from operating
properly.

When setting the traffic rate to 30Mbit/s, the
cburst/burst values, which give the most
average accuracy results, are 18k/18k.

There is a linear relationship between the burst
value and the requested rate. The cburst/burst
values of a 30Mbit/s rate can be used as a
starting point for calculating the burst values for
other rates.

It is possible to control the throughput accuracy
by changing the cburst/burst values. The
accuracy bandwidth range size is approximately
2Mbit/s for 64–1,500 byte packet sizes.

Bandwidth is distributed evenly when several
streams are transmitting the same number of
bytes and belong to the same class.

Yaron Benita is originally from Jerusalem, Israel, and currently
lives in San Francisco, California. He is the CMTS software
manager at Prediwave. He works mostly in the networking and embedded
fields. He is married and has a lovely six-month-old daughter. He can be
reached at yaronb@prediwave.com or ybenita@yahoo.com.

Trending Topics

Upcoming Webinar

Getting Started with DevOps - Including New Data on IT Performance from Puppet Labs 2015 State of DevOps Report

August 27, 2015
12:00 PM CDT

DevOps represents a profound change from the way most IT departments have traditionally worked: from siloed teams and high-anxiety releases to everyone collaborating on uneventful and more frequent releases of higher-quality code. It doesn't matter how large or small an organization is, or even whether it's historically slow moving or risk averse — there are ways to adopt DevOps sanely, and get measurable results in just weeks.