如何将tbf与其他qdiscs组合使用?
组合无类别QDiscs实现速率限制与公平性的实践方案
你说得太对了!无类别QDiscs完全可以嵌套组合使用,毕竟像CoDel这类AQM(主动队列管理)组件本身没有带宽限制能力,必须搭配令牌桶这类限速机制才能发挥它的拥塞控制作用——这也是为什么你会觉得它们需要互相配合的原因。
关于具体的实现方案,我给你分享一个常用且有效的组合方式,都是基于无类别QDisc的:
核心思路:分层嵌套实现"限速+公平调度"
用限速型无类别QDisc(比如TBF)作为外层根QDisc,负责把出站带宽严格限制到目标值;再在它的子节点挂载具备公平调度能力的无类别QDisc(比如FQ_Codel),处理流量的公平分配和拥塞控制。
具体配置示例(用tc命令)
1. 清除现有QDisc配置(可选)
tc qdisc del dev eth0 root
这里的eth0替换成你实际要配置的网卡名称。
2. 挂载外层TBF限速QDisc
tc qdisc add dev eth0 root tbf rate 100mbit burst 15k latency 70ms
rate:设置目标限速值,这里是100Mbps,你可以根据需求调整(比如50mbit、1gbit)burst:允许的突发流量大小,用来应对短时间的流量峰值,避免频繁丢包latency:队列的最大等待时间,超过这个时间的数据包会被丢弃
3. 挂载内层FQ_Codel公平调度QDisc
tc qdisc add dev eth0 parent root:1 fq_codel
FQ_Codel会自动把TBF过来的流量按流(基于源IP、目的IP、端口等五元组)分成多个子队列,每个流独立调度,保证不同流之间的带宽公平分配;同时它的CoDel算法会主动丢弃超时的数据包,避免队列长期拥塞。
补充说明
- 如果你不需要严格的带宽限制,只是想实现公平调度和拥塞控制,直接用FQ_Codel作为根QDisc就行,但如果需要固定速率限制,必须搭配TBF这类限速QDisc。
- 官方文档确实比较零散,你可以通过
man tc-tbf、man tc-fq_codel查看每个QDisc的详细参数和示例,内核文档里的Documentation/networking/queueing-scheduler.rst也有QDisc的原理说明。
内容的提问来源于stack exchange,提问作者jdizzle
相关产品推荐
相关产品推荐

