我有1Gb网络,我需要通过将速率限制为100MB然后1Gb来运行某些TCP性能测试。我的理解是分层令牌桶(htb)可用于实现这一点,如下所示
tc qdisc add dev eth0 root handle 1: htb default 12
tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbps ceil 1gbps
tc class add dev eth0 parent 1: classid 1:10 htb rate 100mbps ceil 100mbps
这应该创建两个根类1:1和1:10,分别带1gb和100mb带宽。如果我的理解是错误的,请纠正我。
接下来,我如何在tcp应用程序中使用上述类?例如,当我运行应该只使用100 Mb的应用程序时,我是否需要在套接字选项中指定一些内容,这样应用程序发送的任何消息现在都属于类1:1,因此速率限制为100 Mb? / p>
答案 0 :(得分:1)
使用流量控制匹配规则和ip表规则来标记流量。
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:10
iptables -A OUTPUT -i eth0 -p tcp -j MARK --set-mark 1
将所有TCP出站数据包放入您每秒100兆位的队列中。
由于您只想匹配一个应用程序,让我们假装您的应用程序在端口7654上侦听所有连接的TCP套接字。 iptables规则看起来更像是
iptables -A OUTPUT -i eth0 -p tcp -m multiport --sports 7654 -j MARK --set-mark 1
此外,您应该在tc qdisc
命令中使用1 Gbps队列的默认值,以便系统上的正常流量不会以任何方式影响您的测试。