我希望给定的网卡表现得像速度较慢的网卡一样。就像我笔记本电脑中的 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
得到了预期的结果。
使用
ethtool
:ethtool -s $IFACE speed 1000
请注意,通常许多 SFP 仅支持单一速度。运行时
ethtool $IFACE
将显示支持的速率和模式。此外,您还可以使用
tc
减少可用带宽;这对卡的链接速度没有任何影响,但它可以塑造数据流:tc qdisc add dev $IFACE root tbf rate 100mbit
正如已经指出的,看看
ethtool
.首先运行
ethtool <ifname>
并查看Supported link modes
和Link partner advertised link modes
。两组的交集为您提供了电缆两端可用的链路速度,您可以限制物理链路的速度。之后查看选项
ethtool
下方的手册页advertise
。将速度转换为适当的位掩码并发出(作为根)ethtool -s <ifname> advertise <number>
以将速度限制为由 <value> 中的位指示。