0

我正在做一些测试以尝试理解 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 Graph 显示带宽从 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。我还测试了更大的突发值,没有效果。我究竟做错了什么?

4

1 回答 1

0

'ceil' 指定如果对等类有可用的备用带宽,流量类可以从父类借用多少带宽。但是,当应用于根 qdisc 时,没有父级可以借用 - 因此指定与 rate 不同的 ceil 对于根 qdisc 上的类是没有意义的。

“burst”指定在停止为另一类服务之前从一个类(以全链路速度)发送的数据包数量,以及通过对一段时间内的突发进行平均来实现的速率整形。如果应用于没有子类的根,它只会影响平均(平滑)的准确性,并且不会对真正的平均率做任何事情。

尝试添加子类:

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。停止 iperf 到端口 12345,然后到 54321 的流量应该达到 75mbps。

于 2017-09-12T15:27:21.703 回答