Linux下tc-htb中cburst与burst的行为差异及问题排查
HTB burst不生效问题排查与修复
首先看你给出的配置,1:10类的命令里有明显语法错误:burst 100K {cburst 100K} 里的大括号是多余的,tc命令不支持这种写法,这就是burst没生效的直接原因。
先明确HTB里burst和cburst的核心区别:
- burst:基于
rate的突发缓冲区,允许流量短时间内超过rate,但不能超过burst设定的字节数,这个突发受父类的带宽上限约束。 - cburst:基于
ceil的突发缓冲区,允许流量短时间内冲到ceil值(前提是父类有剩余带宽),相当于用父类的闲置带宽做突发。
你的1:10类rate和ceil都是30mbit,所以cburst的作用和burst重叠了,但因为语法错误,burst根本没被正确配置。
修正后的配置
把1:10类的命令改成正确格式,去掉多余的大括号:
tc qdisc add dev ifb0 root handle 1: htb default 12 tc class add dev ifb0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit tc class add dev ifb0 parent 1:1 classid 1:2 htb rate 40mbit ceil 40mbit tc class add dev ifb0 parent 1:1 classid 1:3 htb rate 20mbit ceil 100mbit tc class add dev ifb0 parent 1:2 classid 1:10 htb rate 30mbit ceil 30mbit burst 100k cburst 100k tc class add dev ifb0 parent 1:2 classid 1:11 htb rate 8bit ceil 40mbit tc class add dev ifb0 parent 1:1 classid 1:12 htb rate 8bit ceil 100mbit
额外检查点
- 父类带宽验证:1:2的rate是40mbit,1:10占了30mbit,剩下10mbit给1:11,这个分配没问题,但要确保burst的大小符合实际需求——burst的合理值一般是
rate * 延迟 / 8,默认延迟取10ms的话,100k是合理的,你可以根据自己网络的实际延迟调整。 - 生效验证:用
tc -s class show dev ifb0查看1:10类的参数,确认burst已经正确加载,再用iperf之类的工具打流量,看是否能观察到突发传输的效果。
内容的提问来源于stack exchange,提问作者Aitor Encinas
相关产品推荐
相关产品推荐

