网络栈调优98 条

tc tbf 出口限速

用令牌桶给出口限速, 模拟带宽约束或约束单机外发速率; burst 与 latency 决定突发容忍度。

tc tbf 出口限速

tc 用 tbf(令牌桶过滤器)给接口出口限速:令牌以设定速率补充,报文只有取到令牌才能发出,从而把发送速率约束在目标值附近。burst 决定桶能存多少令牌、也就是能吸收多大的突发,latency 则限制报文在队列里最多停留多久。三者共同决定限速的平滑程度。

基本信息

添加规则tc qdisc add dev eth0 root tbf rate 100mbit burst 1mbit latency 50ms
查看统计tc -s qdisc show dev eth0
作用方向仅出口,入口方向需要另行处理
参数关系burst 与 latency 共同决定突发吸收与队列上限
生效方式立即生效,重启后需重新配置或持久化

典型使用场景

  • 测试环境模拟带宽约束,验证应用在受限链路下的行为
  • 约束单机外发速率,避免挤压同网段其他业务
  • 验证客户端在低带宽条件下的重试与降级策略
  • 限制大流量任务的上传速率,保障关键业务
  • 为压测提供稳定的带宽基线

添加与查看

添加与查看
tc qdisc add dev eth0 root tbf rate 100mbit burst 1mbit latency 50ms
tc -s qdisc show dev eth0            # 查看限速统计与队列状态
# 需要调整时先删除原规则再重新添加:
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root tbf rate 200mbit burst 2mbit latency 50ms

参数含义

参数含义设置偏差的后果
rate允许的平均发送速率过高起不到限制作用
burst桶容量,决定突发容忍度过小导致突发被丢弃,过大失去限速意义
latency报文在队列中允许的最长停留过小造成丢弃,过大增加延迟
方向只作用于发送方向想在入向限速会完全无效

使用注意

  • burst 与 latency 需要匹配目标带宽,二者组合不当会带来额外丢包或抖动
  • 限速作用于出口,入向限制需要其他机制配合
  • 调整后观察 qdisc 统计中的丢弃与队列积压,确认效果
  • 重启后规则不保留,生产用途需写入启动脚本
限速与拥塞控制是两件事:本地限速不会阻止对端发得更多,入向流量仍可能占满带宽,需要在上游设备或协议层配合处理。
burst 设得过小会让本来允许的突发被直接丢弃,表现为限速后应用反而更容易超时,需要按业务报文特征调整。

易错点

  • burst 与 latency 组合不当,造成额外丢包或抖动
  • 把出口限速当作全链路限速使用,入向流量不受任何约束
  • 限速规则未持久化,重启后限制悄然消失
  • 在承载关键业务的接口上调整限速而不做变更记录与验证

数据来源与参考

  • man tc-tbf
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌