Linux tc TBF速率控制每秒间隔有抖动。解决方案

Linux tc TBF速率控制每秒间隔有抖动。解决方案,linux,jitter,trafficshaping,Linux,Jitter,Trafficshaping,我正在使用带有TBF的TC工具来限制Linux PC的出口链接的速率。 我正在使用以下命令: tc qdisc add dev DEVICENAME root handle 1: tbf rate 40Mbit buffer 40kb limit 8000 这个很好用。当我在连接到出口链接的PC上进行互联网速度测试时,我收到的平均速度为40Mbps 但是,我的要求是,我希望以1秒的间隔更改速率,即每秒钟,我将以1Mbps的步长降低速率。为此,我编写了一段python代码,每隔1秒执行以下命令:

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

tc qdisc add dev DEVICENAME root handle 1: tbf rate 40Mbit buffer 40kb limit 8000
这个很好用。当我在连接到出口链接的PC上进行互联网速度测试时,我收到的平均速度为40Mbps

但是,我的要求是,我希望以1秒的间隔更改速率,即每秒钟,我将以1Mbps的步长降低速率。为此,我编写了一段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
其中,
replace
是一个原子操作,
在同一句柄上删除
并添加新策略。 当这些命令每秒执行一次时,我同时观察到一个实时流。对于该实时流,40Mbps到25Mbps足以提供高质量的流

但问题是,每次以新速率(比如39Mbit)执行命令时,我都会在流中观察到大量抖动,就好像流中有人刚刚从一个位置跳到另一个位置一样。流中的平滑度会受到几秒钟的干扰,比如说2-5秒钟

我天真的理解是,每当应用新规则时,现有qdisc的队列和缓冲区中的数据包都会被丢弃,新qdisc及其新警察开始接收流的下一个数据包。由于现有qdisc丢弃了这么多数据包,我观察到了实时流中的抖动

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

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