Linux:HTB + PRIO qdisc:有时是空的PRIO 1队列

时间:2017-08-31 09:34:41

标签: linux qos

我正面临着一种我现在无法解释的行为。

以下是我要做的事情:通过接口限制发送速率(enp0s8)并应用PRIO qdisc。数据包将根据其DSCP字段发送到PRIO qdisc的相应频段。

为此,我应用了HTB(塑造交通)和PRIO qdisc。

出于测试目的,我正在使用iperf发送流量。

这是HTB和PRIO配置:

#HTB qdisc
tc qdisc add dev enp0s8 root handle 1: htb default 1
tc class add dev enp0s8 parent 1: classid 1:1 htb rate 2000kbit ceil 
2000kbit burst 2000kbit

# PRIO qdisc
tc qdisc add dev enp0s8 parent 1:1 handle 2: prio bands 4
tc qdisc add dev enp0s8 parent 2:1 pfifo
tc qdisc add dev enp0s8 parent 2:2 pfifo
tc qdisc add dev enp0s8 parent 2:3 pfifo
tc qdisc add dev enp0s8 parent 2:4 pfifo

# PRIO filters
tc filter add dev enp0s8 parent 2:0 prio 1 protocol ip u32 match ip tos 0x28 0xff flowid 2:1
tc filter add dev enp0s8 parent 2:0 prio 2 protocol ip u32 match ip tos 0x38 0xff flowid 2:2
tc filter add dev enp0s8 parent 2:0 prio 3 protocol ip u32 match ip tos 0x48 0xff flowid 2:3
tc filter add dev enp0s8 parent 2:0 prio 4 protocol ip u32 match ip tos 0x58 0xff flowid 2:4

这是我的iperf脚本用于测试目的:

killall iperf
iperf -c 192.168.56.1 -u -b 2.4m -l 1458B -S 0x58 -t 1024 & 
sleep 20
iperf -c 192.168.56.1 -u -b 2.4m -l 1458B -S 0x38 -t 1024 & 
sleep 20
iperf -c 192.168.56.1 -u -b 2.4m -l 1458B -S 0x28 -t 1024 & 

通过此测试,预计会出现以下行为:

  1. 发送优先级较低的流量(0x58)并将其整形为2Mbps
  2. 发送优先级更高的流量(0x38)并将其整形为2Mbps。它应该抢占较低优先级流量的带宽。
  3. 发送优先级较高的流量并将其整形为2Mbps。它应该抢占所有其他流量的带宽。
  4. 它似乎在大多数情况下工作正常,但我不时会看到具有第二高优先级的流量重新出现几秒钟,而我不应该(请参阅wireshark屏幕截图)。

    我检查了稳定的iperf流量。

    您是否有想法解释此行为或解决问题的方法?

    提前谢谢你。 亚历山大

    P.S

    wireshark capture

0 个答案:

没有答案