Quality of service troubleshooting¶
Traffic Classes¶
To show the speeds currently applied to traffic classes, use the following command:
tc class show dev tun<tunnel ID>
This shows the guaranteed rate (rate xxxxbit) and limit
(ceil xxxxbit) rates for each class.
class htb 10:110 parent 10:1 leaf 80c5: prio 0 rate 2280Kbit ceil 5700Kbit burst 1599b cburst 1598b
class htb 10:1 root rate 5700Kbit ceil 5700Kbit burst 1598b cburst 1598b
class htb 10:130 parent 10:1 leaf 80c7: prio 2 rate 1140Kbit ceil 5700Kbit burst 1599b cburst 1598b
class htb 10:120 parent 10:1 leaf 80c6: prio 1 rate 1140Kbit ceil 5700Kbit burst 1599b cburst 1598b
class htb 10:140 parent 10:1 leaf 80c8: prio 3 rate 1140Kbit ceil 5700Kbit burst 1599b cburst 1598b
To show the byte and packet counts and current queue size (called
backlog in tc) for a class, add the -s argument to the above
tc command:
tc -s class show dev tun90
class htb 10:110 parent 10:1 leaf 80c5: prio 0 rate 2280Kbit ceil 5700Kbit burst 1599b cburst 1598b
Sent 827961 bytes 4440 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 4440 borrowed: 0 giants: 0
tokens: 99723 ctokens: 39882
...
To verify that traffic classes have been set up properly, use the following command:
tc qdisc show dev tun<tunnel ID>
qdisc htb 10: root refcnt 2 r2q 10 default 130 direct_packets_stat 0
qdisc pfifo 8031: parent 10:110 limit 500p
qdisc sfq 8032: parent 10:120 limit 127p quantum 1452b perturb 10sec
qdisc sfq 8033: parent 10:130 limit 127p quantum 1452b perturb 10sec
qdisc sfq 8034: parent 10:140 limit 127p quantum 1452b perturb 10sec
There should be one root HTB qdisc and one PFIFO or SFQ qdisc for each traffic class.
Packet Filters¶
To verify that packet filters have been set up properly, use the following commands:
iptables -t mangle -L qos_<QoS profile ID> -nv
This shows the current filters for the given QoS profile. It can be used to determine which filters are being matched. For example,
root@prodagg02:~# iptables -t mangle -L qos_1 -nv
Chain qos_1 (2 references)
pkts bytes target prot opt in out source destination
140K 9710K CLASSIFY icmp -- * * 0.0.0.0/0 0.0.0.0/0 /* ICMP */ length 0:500 CLASSIFY set 10:110
0 0 CLASSIFY udp -- * * 0.0.0.0/0 0.0.0.0/0 /* IAX2 */ multiport ports 4569 CLASSIFY set 10:110
0 0 CLASSIFY tcp -- * * 0.0.0.0/0 0.0.0.0/0 /* SIP control (TCP) */ multiport ports 5060:5061 CLASSIFY set 10:110
818 357K CLASSIFY udp -- * * 0.0.0.0/0 0.0.0.0/0 /* SIP control (UDP) */ multiport ports 5060:5061 CLASSIFY set 10:110
To show which profiles apply to which tunnels, use a command such as:
iptables -t mangle -L POSTROUTING -nv | grep qos_
For example, this displays something such as:
root@prodagg02:~# iptables -t mangle -L POSTROUTING -nv | grep qos_
89592 5619K qos_1 all -- * tun35 0.0.0.0/0 0.0.0.0/0 /* Bond 35 QoS */
11M 11G qos_1 all -- * tun3 0.0.0.0/0 0.0.0.0/0 /* Bond 3 QoS */
This shows that bond 3 and bond 35 are both using profile 1.