0

我正在使用带有 TBF 的 TC 工具来限制 Linux PC 出口链路的速率。我正在使用以下命令:

tc qdisc add dev DEVICENAME root handle 1: tbf rate 40Mbit buffer 40kb limit 8000

这工作正常。当我在连接到出口链接的 PC 上进行互联网速度测试时,我收到的平均速度为 40Mbps。

但是,我的要求是我想以 1 秒的间隔更改速率,即每秒,我将速率降低 1 Mbps 的步长。为此,我编写了一个 Python 代码,它以 1 秒的间隔执行以下命令:

tc qdisc replace dev DEVICENAME root handle 1: tbf rate 39Mbit buffer 40kb limit 8000
tc qdisc replace dev DEVICENAME root handle 1: tbf rate 38Mbit buffer 40kb limit 8000
.
.
.
tc qdisc replace dev DEVICENAME root handle 1: tbf rate 25Mbit buffer 20kb limit 4000

wherereplace是一个原子操作,它removesadds新策略在同一个句柄上。虽然这些命令每秒执行一次,但我正在并行观察实时流。对于该实时流,40Mbps 到 25Mbps 足以提供高质量的流。

但问题是,每次以新的速率(比如 39Mbit)执行命令时,我观察到流中的很多抖动,就好像流中的某个人刚刚从一个位置跳到另一个位置一样。流中的平滑度被扰乱了几秒钟,比如 2-5 秒。

我幼稚的理解是,每当应用新规则时,现有 qdisc 的队列和缓冲区中的数据包都会被丢弃,并且带有新策略的新 qdisc 开始接收流的下一个数据包。由于现有的 qdisc 丢弃了这么多数据包,我观察到直播流中的抖动。

我的理解是正确的还是我遗漏了什么?

还请分享有关如何对链接进行速率控制的想法,以便顺利过渡到更新的速率。非常感谢。

4

0 回答 0