-1

我有一个 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?

4

1 回答 1

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 兆位的队列中。

由于您只想匹配一个应用程序,让我们假设您的应用程序有一个 TCP 套接字侦听端口 7654,所有连接都通过该端口进行。iptables 规则看起来更像这样

iptables -A OUTPUT -i eth0 -p tcp -m multiport --sports 7654 -j MARK --set-mark 1

此外,您应该在tc qdisc命令中将默认设置为 1 Gbps 队列,以便系统上的正常流量不会以任何方式影响您的测试。

于 2013-03-12T04:51:57.727 回答