如何验证使用 tc 命令设置的参数?

如何验证使用 tc 命令设置的参数?

我需要模拟高延迟和低带宽连接来对我的应用程序进行性能测试。我已经阅读了许多描述该tc命令的页面。但是,我无法验证我设置的数字。例如:

我从以下位置获取了以下命令值: https://www.excentis.com/blog/use-linux-traffic-control-impairment-node-test-environment-part-2

tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms

将其应用于(例如,机器 A)时,根据页面上的描述,我假设我的输出速率应为 128 kBps(至少约为 128 kBps)。为了测试这一点,我开始使用 scp 将 2 GB 文件从机器 A 传输到同一 LAN 中的另一台机器“B”。在没有任何额外损伤的情况下,该网络的传输速率高达 12 MBps。但是,当传输开始时,速率为 2 MBps,然后它一直停滞并下降,直到它开始在 11 kBps 和 24 kBps 之间摆动并停滞。

我在传输过程中使用 nmon 监控双方的网络吞吐量,但它从未超过 24 kBps(除了几个读数为 54 和 62 的值)。

我也尝试过增加速率和存储桶大小,但 scp 期间的行为是相同的。我尝试了以下命令来增加存储桶大小和速率:

tc qdisc add dev eth0 root tbf rate 1024kbps burst 1024kb latency 500

scp 仍然停滞不前,并以相同的速率 (11-30 kBps) 波动。

我在这里推断“利率”这个词是错误的吗?我查看了 tc 的手册页,看来我的解释是正确的。谁能向我解释测试设置参数的最佳方法是什么(假设我做得正确)?

答案1

为了引起延迟,您需要使用“netem”qdisc。

您已经被 TBF qdisc 的“延迟”参数分散了注意力。对于 TBF qdisc,此参数仅设置排队数据包所允许的最大延迟。因此,例如,如果队列足够深,单个数据包的延迟为 400 毫秒,则该数据包将被尾部丢弃。这实际上并不能帮助您模拟您所希望的高延迟。

我建议使用类似的东西:

tc qdisc add dev eth0 root netem delay 400ms rate 1024kbps

注意:你的意思是千比特吗?

tc 工具将千比特每秒称为“kbit”,将千字节每秒称为“kbps”。

答案2

@user144844 感谢您的回复。仅供参考,netem没有利率争论。

我对tbf参数的理解相当清楚。我还知道latency作为令牌桶过滤器的一部分,以及一般的网络延迟。正如我所提到的,问题是在对 2 GB 文件rate进行测试时,我看不到速率被限制在设定值。scp

回到最初的问题:我决定继续进行实际模拟,让许多虚拟用户通过我设置了 256 kbps 带宽的服务器进行某些交易。最后,很明显,rate由于我的吞吐量从 968kbps(在 LAN 条件下)下降到 249 kbps(使用应用的速率tbf),因此已经应用了该设置。当我将负载增加到原来的两倍和三倍时,同样的情况仍然存在,我可以看到响应时间受到影响。所以,我相信设置的参数确实有效。scp只是不是测试它的最佳方法。

我使用以下命令来设置网络条件:

# tc qdisc add dev eth0 root handle 1: tbf rate 256kbit burst 256kbit latency 200ms
# tc qdisc add dev eth0 parent 1:1 handle 11: netem delay 50ms
# tc qdisc show
qdisc tbf 1: dev eth0 root refcnt 2 rate 256000bit burst 32Kb lat 200.0ms
qdisc netem 11: dev eth0 parent 1:1 limit 1000 delay 50.0ms

相关内容