流量塑造tc-htb,爆发无效

时间:2017-09-05 07:21:17

标签: linux trafficshaping

我正在做一些测试来试图理解tc-htb参数。我正在使用VmWare Player(版本2.0.5),Windows 7作为主机,Ubuntu(版本4.4.0-93)作为嘉宾。

我的计划是使用iperf通过localhost生成已知数据流(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图表显示带宽从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。 我也测试了更大的爆发值,没有效果。我做错了什么?

1 个答案:

答案 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。