我正在做一些测试,试图理解tc-htb参数。我使用的是VmWare Player(2.0.5版),Windows 7为主机,Ubuntu(4.4.0-93版)为来宾。
我的计划是使用iperf通过本地主机生成一个已知的数据流(udp 100Mbits/sec),然后用tc htb限制带宽。用Wireshark监控结果。
Iperf设置:
服务器:
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图显示带宽从100mbit/s下降到50mbit/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。
我还测试了更大的突发值,没有效果。我做错什么了?

最佳答案

“ceil”指定如果对等类中有可用的空闲带宽,则流量类可以从父类借用多少带宽。但是,当应用于根qdisc时,没有可以借用的父类,因此对于根qdisc上的类来说,指定ceil different to rate是没有意义的。
“突发”指定在停止服务于另一个类之前(以全链路速度)从一个类发送的数据包的数量,以及通过在一段时间内平均突发来实现的速率整形。如果应用于没有子类的根,它只会影响平均值(平滑)的准确性,并且不会对真实的平均率产生任何影响。
尝试添加子类:

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,然后在启动到54321的iperf会话时,每个会话都降至50mbps。停止到端口12345的iperf,然后到54321的通信量应达到75mbps。

关于linux - 流量整形tc-htb,突发没有效果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46049140/

10-13 00:51