我正在做一些测试来试图理解tc-htb参数。我正在使用VmWare Player(版本2.0.5),Windows 7作为主机,Ubuntu(版本4.4.0-93)作为嘉宾。
我的计划是使用iperf通过localhost生成已知数据流(udp 100Mbits / sec),然后使用tc-htb限制带宽。使用Wireshark监控结果。
iperf –s –u –p 12345
perf –c 127.0.0.1 –u –p 12345 –t 30 –b 100m
我启动Wireshark并开始使用iperf发送数据,10秒后我使用tc命令执行脚本:
tc qdisc add dev lo root handle 1: htb
tc class add dev lo parent 1: classid 1:1 htb rate 50mbit ceil 75mbit
tc filter add dev lo protocol ip parent 1: prio 1 u 32 match ip dport 12345
0xffff flowid 1:1
Wireshark中的I / O图表显示带宽从100 Mbit / s降至50 Mbit / s。好。
我从与上面相同的带宽限制开始,再过10秒后,我使用以下命令运行脚本:
tc class change dev lo parent 1: classid 1:1 htb rate 50mbit ceil 75mbit burst 15k
在I / O图表中,我期待从50mbit(速率级别)到75mbit(ceil级别)的窥视。更改命令无效,级别为50mbit。 我也测试了更大的爆发值,没有效果。我做错了什么?
答案 0 :(得分:0)
'ceil'指定如果有来自对等类的备用带宽,流量类可以从父类借用多少带宽。然而,当应用于根qdisc时,没有父借用 - 所以指定ceil与rate不同对于根qdisc上的类是没有意义的。
'burst'指定在停止服务另一个类之前从一个类发送的数据包数量(以完整链接速度),&通过随时间平均爆发来实现速率整形。如果应用于没有子类的root,它只会影响平均(平滑)的准确性,&不会对真正的平均费率做任何事情。
尝试添加子类:
tc qdisc add dev lo root handle 1: htb
tc class add dev lo parent 1: classid 1:1 htb rate 100mbit
tc class add dev lo parent 1:1: classid 1:10 htb rate 50mbit ceil 100mbit
tc class add dev lo parent 1:1: classid 1:20 htb rate 50mbit ceil 75mbit
tc filter add dev lo protocol ip parent 1: prio 1 u 32 match ip dport 12345 0xffff flowid 1:10
tc filter add dev lo protocol ip parent 1: prio 1 u 32 match ip dport 54321 0xffff flowid 1:20
到端口12345的iperf会话应达到100mbps,然后在启动iperf会话到54321时降至50mbps。将iperf停止到端口12345,然后到54321的流量应达到75mbps。