【问题标题】:What does option limit in tc netem mean and do?tc netem 中的选项限制是什么意思和作用?
【发布时间】:2013-09-13 17:50:30
【问题描述】:

我正在尝试使用命令tc 模拟慢速网络链接。我用netem模拟延迟和丢包,用htb模拟窄带宽,但我发现netem中有一个限制选项,这个选项有什么作用?会不会影响最终带宽?

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

上面写着:

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

但我还是不明白它的作用。

【问题讨论】:

  • 我同意这令人费解。我发现联机帮助页相当清楚,但 netem 并没有按照我的预期做:“limit 10 loss 100%”应该只丢弃接下来的 10 个数据包。但实际上所有的数据包都被丢弃了。对我来说,“限制”没有任何作用。

标签: bandwidth bandwidth-throttling


【解决方案1】:

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

来自 CarlH 提到的mailing list,Stephen Hemminger 说:

限制值至少在使用默认 qdisc 时以数据包为单位 在 netem (tfifo) 内部。您还可以使用 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%

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

【讨论】:

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

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

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

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

此致,

劳伦特·玛丽

【讨论】:

  • 知道这是否意味着像 TCP 缓冲区一样调整大小,即缓冲区大小 = 2 * 延迟 * 带宽?我也听说应该是带宽/MTU。
  • 对不起,我必须投反对票。上面@PeterTseng 引用的后续内容来自netem 作者,我认为它是正确的,这使得这个答案是错误的。
猜你喜欢
  • 1970-01-01
  • 2012-08-04
  • 2018-12-28
  • 2019-02-15
  • 2011-12-02
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多