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

Linux:HTB+;PRIO qdisc:有时为空的PRIO 1队列,linux,qos,Linux,Qos,我现在面临一种无法解释自己的行为 下面是我试图做的:限制通过接口(enp0s8)的发送速率并应用PRIO qdisc。数据包在其DSCP字段之后被发送到PRIO qdisc的适当频带 为此,我应用了HTB(塑造交通)和PRIO qdisc 出于测试目的,我使用iperf发送trafic 以下是HTB和PRIO配置: #HTB qdisc tc qdisc add dev enp0s8 root handle 1: htb default 1 tc class add dev enp0s8 par

我现在面临一种无法解释自己的行为

下面是我试图做的:限制通过接口(enp0s8)的发送速率并应用PRIO qdisc。数据包在其DSCP字段之后被发送到PRIO qdisc的适当频带

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

出于测试目的,我使用iperf发送trafic

以下是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 & 
通过该测试,预计会出现以下行为:

  • 发送优先级较低(0x58)的流量,并将其整形为2Mbps
  • 发送优先级更高的流量(0x38)并将其整形为2Mbps。它应该抢占低优先级流量的带宽
  • 具有更高优先级操作系统的流量被发送并形成2Mbps。它应该抢占所有其他流的带宽
  • 在大多数情况下,它似乎工作得很好,但有时,我会看到优先级第二高的流量在几秒钟内重新出现,而我不会(见wireshark屏幕截图)

    我检查了稳定的iperf流量

    您是否有办法解释这种行为或排除故障

    先谢谢你。 亚历山大

    p、