问题描述
我正在使用带有 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
其中 replace
是原子操作,removes
和 adds
新策略在同一个句柄上。
虽然这些命令每秒执行一次,但我正在并行观察实时流。对于该直播流,40Mbps 到 25Mbps 足以提供高质量的流媒体。
但问题是,每次以新的速率(比如 39Mbit)执行命令时,我都会观察到流中的很多抖动,就好像流中的某个人刚刚从一个位置跳到了另一个位置。流中的平滑度受到干扰几秒钟,例如 2-5 秒。
我天真的理解是,每当应用新规则时,现有 qdisc 的队列和缓冲区中的数据包都会被丢弃,并且带有新策略的新 qdisc 开始接收流的下一个数据包。由于现有的qdisc丢了这么多包,我观察到了直播流的抖动。
我的理解正确还是遗漏了什么?
还请分享有关如何对链接进行速率控制以便顺利过渡到更新速率的想法。非常感谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)