![限制物理接口的带宽,将10G链路变为1G链路](https://linux22.com/image/794408/%E9%99%90%E5%88%B6%E7%89%A9%E7%90%86%E6%8E%A5%E5%8F%A3%E7%9A%84%E5%B8%A6%E5%AE%BD%EF%BC%8C%E5%B0%8610G%E9%93%BE%E2%80%8B%E2%80%8B%E8%B7%AF%E5%8F%98%E4%B8%BA1G%E9%93%BE%E8%B7%AF.png)
我希望给定的网卡表现得像较慢的网卡。例如,如果我笔记本电脑中的 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
得到了预期的结果。
答案1
使用ethtool
:
ethtool -s $IFACE speed 1000
请注意,通常许多 SFP 仅支持单一速度。运行ethtool $IFACE
将显示支持的速率和模式。
此外,您还可以使用tc
来减少可用的带宽;这对卡的链接速度没有影响,但可以塑造数据流:
tc qdisc add dev $IFACE root tbf rate 100mbit
答案2
正如前面提到的,请看一下ethtool
。
首先运行ethtool <ifname>
并查看Supported link modes
和Link partner advertised link modes
。两组的交集为您提供了电缆两端可用的链接速度,您可以将物理链接的速度限制在该速度。
之后查看选项ethtool
下的手册页advertise
。将速度转换为适当的位掩码并发出(以 root 身份)ethtool -s <ifname> advertise <number>
限制速度,以 <value> 中的位表示。