tc netem中的选项限制意味着什么?

Dan*_*Dai 6 bandwidth bandwidth-throttling

我正试图用命令模拟慢速网络链接tc.我netem用来模拟延迟和数据包丢失以及htb来模拟窄带宽,但我发现有一个限制选项netem,这个选项有什么作用?它会影响最终带宽吗?

我用Google搜索并在http://manpages.ubuntu.com/manpages/raring/man8/tc-netem.8.html中找到了一些东西

其中说:

将所选选项的效果限制为指示的下一个数据包的数量.

但我仍然无法理解它的作用.

Pet*_*eng 7

我不知道 netem 到底在做什么,但我发现如果您不将“限制”设置为更高的值,netem 将无法正常工作 - 即它以更高的速度丢弃数据包并且可能有其他问题,基本上没有准确模拟真实网络。

从CarlH 提到的邮件列表中,Stephen Hemminger 说:

限制值至少在使用 netem (tfifo) 内的默认 qdisc 时以数据包为单位。您还可以使用 pfifo 并将其配置为数据包限制,或 bfifo 仅相同的字节。值 1000 较低,您需要比最大数据包速率 * 延迟多 50% 左右,除非您尝试模拟具有小队列的路由器。

因此,对于 1 Gbps 链路, 1 Gbps / 1500 字节 MTU * 100 ms * 1.5 = 12500

命令:

sudo tc qdisc add dev eth1 root netem limit 12500 delay 100ms loss 1%
Run Code Online (Sandbox Code Playgroud)

我一直在使用 limit 100000,这似乎工作正常,但似乎较低的值可能没问题。

  • 如果您只有最大尺寸的数据包,那么这个数学方法就有效。网络平均约为 1000B,您将需要 18750。对于最小大小的数据包,234 375(保持 50% 的比例)。这个想法非常简单,如果您实现延迟(如您添加延迟参数),这些数据包必须在某个地方“等待”。我们计算的数字是任何时候可以等待的数据包的最大数量。你需要准备足够的“槽位”。这就是为什么如果限制不够高,您将开始丢弃数据包(与丢失参数无关)。 (2认同)

Car*_*rlH 2

来自https://lists.linuxfoundation.org/pipermail/netem/2007-March/001091.html

“limit”参数是指netem模块中分配的缓冲区数量。

必须调整限制以支持给定数据速率下延迟的帧数(例如 500 毫秒)。

此致,

洛朗·玛丽