限制物理接口的带宽,将10G链​​路变为1G链路

限制物理接口的带宽,将10G链​​路变为1G链路

我希望给定的网卡表现得像较慢的网卡。例如,如果我笔记本电脑中的 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 卡,但延迟和突发值很可能还有改进的空间。我也试过了,1000mbit100mbit得到了预期的结果。

答案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 modesLink partner advertised link modes。两组的交集为您提供了电缆两端可用的链接速度,您可以将物理链接的速度限制在该速度。

之后查看选项ethtool下的手册页advertise。将速度转换为适当的位掩码并发出(以 root 身份)ethtool -s <ifname> advertise <number>限制速度,以 <value> 中的位表示。

相关内容