Jonathan Lynch
2005-Jul-06 14:54 UTC
Diffserv using HTB or PRIO qdiscs as basis for EF phb
Im experimenting with using a Linux machine with 3 interfaces to operate
as a core router. All links and network interfaces are 100mbit. Below is
a ascii diagram of the network.
(network A) edge router ------>core router---->edge router (network C)
^
|
|
edge router
(network B)
I have tried two setups to support the Expedited forwarding PHB on the
core router using the HTB qdisc and PRIO qdisc. The core router is a P4
2.8ghz, 512mb RAM running fedora core 3 with the 2.6 kernel. The Voip
traffic is marked with the EF codepoint. Im using a local stratum 1 ntp
server to synchronise time. The config I used for each setup is included
at the bottom.
When there is just voice traffic passing through (350 kbit) the delay of
the voice traffic in travelling between network A and network C is
0.25ms (milliseconds) for both setups (using htb and PRIO).
When TCP Traffic + VoIP traffic( 350 Kbit ) are sent from network A to
network C. TCP traffic from network B is sent to network C. A bottleneck
is created at the 3rd interface of the core network. Between the two
network interfaces from network A and network B TCP traffic is coming in
at a rate faster than 100 Mbit. As a result the delay is 30ms for both
setups (using htb and PRIO) There is 0% loss of EF traffic.
When i used a plain first in first out queue and saturated the link with
tcp traffic the delay of the voice traffic was 160ms with 5% loss of
voip traffic.
Why is this delay so high when the link is saturated and Im using either
PRIO or HTB to apply the EF PHB to VoIP traffic ???? Is it operating
system ? Has anyone else had similar experiences ?
Jonathan
----------------------------------------------------------------------------
The following are the configurations I have used for the core router
Config 1 using htb
tc qdisc add dev $1 handle 1:0 root dsmark indices 64 set_tc_index
tc filter add dev $1 parent 1:0 protocol ip prio 1 tcindex mask 0xfc
shift 2
Main htb qdisc & class
tc qdisc add dev $1 parent 1:0 handle 2:0 htb
tc class add dev $1 parent 2:0 classid 2:1 htb rate 100Mbit ceil 100Mbit
EF Class (2:10)
tc class add dev $1 parent 2:1 classid 2:10 htb rate 1500Kbit ceil
100Mbit
tc qdisc add dev $1 parent 2:10 pfifo limit 5
tc filter add dev $1 parent 2:0 protocol ip prio 1 handle 0x2e tcindex
classid 2:10 pass_on
BE Class (2:20)
tc class add dev $1 parent 2:1 classid 2:20 htb rate 5Mbit ceil 100Mbit
tc qdisc add dev $1 parent 2:20 red limit 60KB min 15KB max 45KB burst
20 avpkt 1000 bandwidth 100Mbit probability 0.4
tc filter add dev $1 parent 2:0 protocol ip prio 2 handle 0 tcindex mask
0 classid 2:20 pass_on
Config 2 using PRIO
Main dsmark & classifier
tc qdisc add dev $1 handle 1:0 root dsmark indices 64 set_tc_index
tc filter add dev $1 parent 1:0 protocol ip prio 1 tcindex mask 0xfc
shift 2
Main prio queue
tc qdisc add dev $1 parent 1:0 handle 2:0 prio
tc qdisc add dev $1 parent 2:1 tbf rate 1.5Mbit burst 1.5kB limit 1.6kB
tc filter add dev $1 parent 2:0 protocol ip prio 1 handle 0x2e tcindex
classid 2:1 pass_on
BE class(2:2)
tc qdisc add dev $1 parent 2:2 red limit 60KB min 15KB max 45KB burst 20
avpkt 1000 bandwidth 100Mbit probability 0.4
tc filter add dev $1 parent 2:0 protocol ip prio 2 handle 0 tcindex mask
0 classid 2:2 pass_on
