关于Linux网卡带宽设置的问题

在公司的产品性能测试中,为了模拟网络环境,使用Linux上安装2个网卡,设置2个网卡的相关配置达到相应要求,先找到2种配置,求高手告知2个配置的区别
1.
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1:0 tbf rate 1Mbit buffer 1600 limit 3000
tc qdisc add dev eth0 parent 1:1 handle 10: netem delay 10ms
tc -s qdisc ls dev eth0
2.
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1:0 tbf rate 1Mbit burst 4mb latency 1s
tc qdisc add dev eth0 parent 1:0 handle 10:0 netem limit 100000000 delay 10ms loss 0%
tc -s qdisc ls dev eth0
其中rate设置带宽,delay设置延迟,loss设置丢包率

首先你得netem QDiscipline设置看起来没什么区别,limit太大,loss 0%和默认一样,剩下的delay 10ms都是指所有pakcat按照延迟10ms进行发送

至于你的TBF设置,用了TBF自身提供的两个途径

TBF叫做Token Bucket Filter.总体的思路就是数据包要领到Token(令牌)才能被发送,而令牌的产生速率收到rate这个参数的限制。Token是一个抽象的概念,Token的大小都是指的Token所指向的数据包的大小。

当要发送的速率低于令牌产生的速度时,所有的数据包都能领到Token,并且多余的Token会在你的Buffer里积累。积累的上限由Buffer/Burst这个参数指定。

当发送的速率等于Token产生的速度时,Token正好被完全消耗,所有的数据包都会发送,并且buffer不会积累多余的Token

当发送的速率大于Token的速率,如果Buffer里还有多余的Token,就会开始消耗Buffer的Token,同时允许数据包通过。如果buffer的Token耗尽,数据包就不被允许通过,并且进入Txqueue(发送队列)排队。如果排队的尺寸大于limit(你的第一个TBF有指定),则队列不能再增长,新到来的数据包会被drop。

明白上面的概念之后你的两条命令的区别也就容易看懂了。

第一个是用的Buffer/Limit
Buffer就是瞬间可以额外提供的Token的数量。Rate限制了你的持续上传速率为1Mb/s,然后在你长时间网络流量很低时,你得Token会积累,最后你可以有Buffer这么大(1600b)的缓冲无视rate的限制(可以瞬间发送1600b,所以叫做突发)。至于后面的limit 3000,是指你当你的缓冲区(Txqueue)超过3000b时,新来的包会被Drop

第二个用的是Burst/latency/rate组合
这里的burst和上面的buffer含义完全相同,都是能够以高于rate所限定的速度发送的数据量(4Mb,比第一个的大很多)。至于Latency,是对应limit的量。Latency规定的是数据包能在Txqueue中呆的最长的时间(你的是1S),在Txqueue中呆超过1s的包都会被Drop。所以结合你的rate来计算,latency 1s+rate 1Mbit/s 等价于 limit为1Mbit*1s=1Mb

*tc只能规整egress traffic,就是从NIC流出的流量(上传),对于下载,要用IFB将ingress(下载)模拟成egress
温馨提示:答案为网友推荐,仅供参考
相似回答