我希望给定的网卡表现得像速度较慢的网卡一样。就像我笔记本电脑中的 1G 接口实际上是 100M 或 10M 接口一样。一种方法当然是挖出我以前的旧 10mbit 集线器,并将其用于此目的。
我确信有一个“软件解决方案”。tc
事实上,命令和功能似乎tbf
能够做到这一点。
不幸的是,我没有完全掌握实现上面所写内容的概念。似乎需要考虑一些数学知识来考虑假设的链接速度/sys/class/net/*/speed
,可能是来自 的 MTU/sys/class/net/*/mtu
以及系统的滴答率。我不确定现在“当前”发行版内核是否仍然需要后者(例如,我有CONFIG_NO_HZ=y
)CONFIG_HZ_300=y
。
一个 shell 脚本应该如何使此类功能更加通用?喜欢bash link-bandhwidth.sh <interface> 10m|100m|1G|2.5G|10G
编辑:
正如@vidarlo 所建议的,更改链接速度确实有效。我能够更改交换机上各个端口的公布速度列表。我使用 ethtool 得到的结果好坏参半,即使是在提供多种不同速度的 mlx5 卡上也是如此。
我还有一张 mlx4 卡,仅支持单一速度。在这里,我尝试了建议的但不完整的nc
命令。因此,问题是如何以编程方式生成最优值。直到现在,这部分仍然没有答案。对我来说,这样的命令适用于固定速度 10G 链路:
tc qdisc add dev $interface root tbf rate 2000mbit latency 1ms burst 2000mbit
这就像假设的 2G 卡,但延迟和突发值很可能还有改进的空间。我也尝试过1000mbit
并且100mbit
得到了预期的结果。