使用tc在Linux下限制接口带宽

我有一个在外面有一个10GBe接口的linux路由器,内部有一个保护千兆以太网接口。

我们目前的预算为2GBit / s。 如果我们超过一个月平均超过5%的速度,那么我们将收取整个10Gbit / s的容量。 美元方面有了一个提高。

所以,我想在10GBe接口上将其限制为2GBit / s。

TBFfilter可能是理想的,但是这个意见值得关注。

在除Alpha以外的所有平台上,它能够以最理想的最小突发形成高达1mbit / s的正常stream量,并以所configuration的速率准确发送数据。

我应该使用TBF还是其他一些filter来将这个速率应用到接口,我将如何去做。 我不明白这里给出的例子: Traffic Control HOWTO

特别是“例9.创build一个256kbit / s的TBF”

tc qdisc add dev eth0 handle 1:0 root dsmark indices 1 default_index 0 tc qdisc add dev eth0 handle 2:0 parent 1:0 tbf burst 20480 limit 20480 mtu 1514 rate 32000bps 

如何计算256K比特率? 在这个例子中,每秒32000bps = 32k字节。 由于tc使用bps =每秒字节数。 我想爆发和限制发挥作用,但你会如何select合理的数字来达到所需的速度?

这不是一个错误。 我testing了这个,它给出了接近256K的速度,但不完全是这样。


编辑

经过大量的阅读和testing,我得出的结论是TBF是不合适的,因为涉及带宽。 无论我尝试什么设置,我都无法获得TBF提供的带宽>〜50Mbit / s。 根据lartc.org/lartc.pdf,RED方法对整形带宽> 100Mbit / s更好,所以我会尝试使用它。

但是,select一个最小值(即标记成为可能性的平均队列大小)。 给出的例子是这样的:

您应该通过计算您希望的最高可接受的基本队列延迟来设置最小值,并将其乘以您的带宽。 例如,在我的64kbit / s的ISDN链路上,我可能需要一个200ms的基站排队等待时间,所以我把min设置为1600字节。

  1. 你将如何select最高可接受的基本排队等待时间? 这个例子是64kbit / s。

  2. 2Gbit / s可以接受什么?

  1. 您应该根据stream量typesselect可接受的排队延迟。

    • 例如,对于200ms以上的语音排队已经是个问题了。
    • 虽然有500毫秒的缓冲区的FTP /洪streamstream量不是一个大问题。
  2. 排队等待时间/策略是一个交通types而不是接口速度的问题。 例如VOIP,也许不应该排队。 不幸的是,tc RED文档不是很清楚,你最好在Juniper /思科网站上阅读一些RED信息,并将这些知识应用于tc。

如何计算256K比特率? 在这个例子中,每秒32,000bps = [32,000]字节。

是的,这个math是正确的。 如果你看到一个接近256k的数字,可能略低于这个数字。 你在哪里测量这个数字? 如果它是你的浏览器的downlaod或类似的东西,他们不计算数据包头的开销,但tc计数的一切。

这是一个完整的解释,这可能会帮助你理解这一切http://lartc.org/howto/lartc.cookbook.fullnat.intro.html