gpt4 book ai didi

linux - 如何使用 TC 和 NETEM 在没有数据包重新排序的情况下模拟抖动?

转载 作者:太空宇宙 更新时间:2023-11-04 12:51:39 28 4
gpt4 key购买 nike

显然 NETEM 使用 tfifo,它根据发送时间对数据包进行排队。这会导致抖动导致数据包重新排序。例如,以下行将导致数据包重新排序*:

tc qdisc add dev eth0 root handle 1: netem delay 10ms 100ms

NETEM manual建议如果您不想重新排序,则将内部队列规则 tfifo 替换为纯数据包 fifo (pfifo),并给出以下示例也在不重新排序的情况下添加大量抖动:

tc qdisc add dev eth0 root handle 1: netem delay 10ms 100ms
tc qdisc add dev eth0 parent 1:1 pfifo limit 1000

但是没用!数据包仍然会被重新排序! (根据 this 看起来它依赖于内核)

那么,有人知道如何在不重新排序数据包的情况下添加抖动吗?

最佳答案

一个 hacky 选项是使用恒定延迟(无抖动)并有一个循环并更改循环中的延迟值。

假设您想要 50 毫秒的延迟和 5 毫秒的差异。您首先添加基本延迟:

tc qdisc add dev eth0 root handle 1: netem delay 50ms

并且可以有一个循环来选择 45 毫秒到 55 毫秒之间的随机延迟并按如下方式更改延迟:

tc qdisc change dev eth0 root handle 1: netem delay 53ms

有两点需要注意:

1- 改变延迟需要一些滴答声。我发现循环中 0.1s 的 sleep 是合理的。所以这意味着您受到抖动频率的限制。

2- 当您减少延迟时,新数据包会比队列中已有的数据包以更短的延迟(即更早的发送时间)排队,这可能会导致重新排序!如果减少幅度很大,您可以通过减少几个步骤的延迟来缓解这种情况。

关于linux - 如何使用 TC 和 NETEM 在没有数据包重新排序的情况下模拟抖动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36994367/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com