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 设得过小会让本来允许的突发被直接丢弃,表现为限速后应用反而更容易超时,需要按业务报文特征调整。