当前位置: 首页 > news >正文

Linux 内核队列调度相关内核选项详解

Linux 内核队列调度(Queueing/Scheduling)内核选项详解

Linux 内核中的队列调度器(Queuing Disciplines, Qdisc)是网络数据包处理的核心,负责决定数据包在网络接口上的发送顺序、速率、优先级等。通过配置不同的 Qdisc,可以实现带宽管理、流量整形、延迟控制、优先级保障等功能。下面详细介绍常用 Qdisc 内核选项的功能、原理、使用场景,并配以兼容 CSDN 的 Mermaid 流程图。


1. CBQ - Class-Based Queuing (CONFIG_NET_SCH_CBQ)

  • 功能:基于类别的分层队列调度,允许将带宽分配给不同的流或类别,并支持带宽借贷、延迟保证、流量整形等。
  • 原理:将流量分为多个 class,按树形结构分层,每个 class 有独立的速率限制、优先级等。调度器根据配置动态分配带宽、进行优先级判断和借贷。
  • 使用场景:需要细粒度带宽管理和分层流量控制的场合,如 ISP、企业级 QoS。
Root CBQ qdisc
Class 1
Class 2
Subclass A
Subclass B
Subclass A
Subclass B
Packet Queue 1
Packet Queue 2
Packet Queue 3
Packet Queue 4

2. HTB - Hierarchical Token Bucket (CONFIG_NET_SCH_HTB)

  • 功能:分层令牌桶,支持带宽分配、速率限制、优先级调度。
  • 原理:每个 class 有主速率(保证带宽)和最大速率(突发带宽),未用带宽可被子 class 借用,实现层级带宽共享。
  • 使用场景:企业、数据中心流量管理、保证和限制带宽。
Root HTB
Parent Class
Child Class 1
Child Class 2
Packet Queue 1
Packet Queue 2

3. HFSC - Hierarchical Fair Service Curve (CONFIG_NET_SCH_HFSC)

  • 功能:按服务曲线调度,支持延迟/带宽保证。
  • 原理:为每个流量 class 配置服务曲线,实现严格带宽和延迟保证,适用于实时应用。
  • 使用场景:VoIP、音视频等对时延敏感的场合。
Root HFSC
Real-time Class
Best-effort Class
Q1
Q2

4. PRIO - Priority Queuing (CONFIG_NET_SCH_PRIO)

  • 功能:多级优先级队列,优先级高的队列先发包。
  • 原理:包根据优先级分配到不同队列,先检查高优,若有包则先发,没有才轮到低优。
  • 使用场景:简单优先级调度,如语音高于普通流量。
PRIO Qdisc
High Priority
Medium Priority
Low Priority

5. MULTIQ - Multi-Queue (CONFIG_NET_SCH_MULTIQ)

  • 功能:为多队列网卡提供 Qdisc 支持,实现并行处理。
  • 原理:每个硬件队列有独立 Qdisc,包按队列编号分配,实现多核并发。
  • 使用场景:多队列网卡(如万兆网卡)环境。
Root MULTIQ
HW Queue 0
HW Queue 1
HW Queue 2

6. RED - Random Early Detection (CONFIG_NET_SCH_RED)

  • 功能:主动丢包算法,防止队列拥塞,提升 TCP 性能。
  • 原理:队列长度超过阈值时,按概率丢包,提前通知发送端减速。
  • 使用场景:路由器、交换机防止队尾丢包。
Below min
Above max
Between
Yes
No
Packet Arrives
Queue Length Check
Enqueue
Drop
Random Drop?

7. SFB - Stochastic Fair Blue (CONFIG_NET_SCH_SFB)

  • 功能:公平丢包算法,防止队列被恶意流占满。
  • 原理:用哈希桶追踪流活跃度,对活跃流增加丢包概率。
  • 使用场景:防止 DoS、P2P 流量挤占带宽。
Yes
No
Packet
Hash Buckets
Active?
Drop
Enqueue

8. SFQ - Stochastic Fairness Queueing (CONFIG_NET_SCH_SFQ)

  • 功能:实现流间公平调度,避免单一流独占带宽。
  • 原理:用 hash 将流映射到多个队列,轮询发包。
  • 使用场景:家庭、办公环境,防止某一主机/端口独占出口带宽。
Root SFQ
Flow Queue 0
Flow Queue 1
Flow Queue 2
Round Robin Dequeue

9. TEQL - True Link Equalizer (CONFIG_NET_SCH_TEQL)

  • 功能:多链路聚合,实现链路捆绑、负载均衡。
  • 原理:包轮流在多链路(接口)间分发,实现带宽叠加。
  • 使用场景:多拨、多 WAN 口聚合。
TEQL Qdisc
Eth0
Eth1
Eth2

10. TBF - Token Bucket Filter (CONFIG_NET_SCH_TBF)

  • 功能:令牌桶流控,实现带宽限速和突发流量控制。
  • 原理:按速率生成令牌,包需消耗令牌才可发送,突发时消耗桶中积蓄的令牌。
  • 使用场景:流量整形、用户带宽限速。
Yes
No
Packet Arrive
Token Enough?
Transmit
Queue or Drop

11. CBS - Credit Based Shaper (CONFIG_NET_SCH_CBS)

  • 功能:用于 TSN(时间敏感网络),为流量分配带宽,保证实时流量。
  • 原理:每个周期根据 credit 计算能否发包,实现带宽和延迟保证。
  • 使用场景:工业以太网、音视频流实时传输。
Yes
No
Credit Update
Credit>0?
Transmit
Wait

12. ETF - Earliest TxTime First (CONFIG_NET_SCH_ETF)

  • 功能:按调度时间戳(TxTime)发送数据包,支持 TSN。
  • 原理:只有到达指定时间的包才允许发送,保证定时调度。
  • 使用场景:工业自动化,音视频同步传输。
Yes
No
Packet + TxTime
Now >= TxTime?
Send
Wait

13. TAPRIO - Time-Aware Priority Scheduler (CONFIG_NET_SCH_TAPRIO)

  • 功能:基于时间感知的优先级队列调度,TSN 关键技术。
  • 原理:通过周期性 Gate Schedule,按时间片严格控制各队列发包窗口。
  • 使用场景:工业以太网、汽车以太网、音视频同步。
周期开始
Queue0 Open
Queue1 Open
Queue2 Open
All Gates Closed

14. GRED - Generic Random Early Detection (CONFIG_NET_SCH_GRED)

  • 功能:多队列 RED,支持多种等级服务(如 DiffServ)。
  • 原理:每个队列独立 RED 算法,适配不同服务等级。
  • 使用场景:需区分服务等级的路由器。
Packet Arrives
Queue Select
RED for Class1
RED for Class2
Out

15. DSMARK - Differentiated Services Marker (CONFIG_NET_SCH_DSMARK)

  • 功能:自动标记包的 DiffServ 字段,实现 QoS 分类。
  • 原理:按规则修改 IP 包的 TOS 字段。
  • 使用场景:企业、运营商级 QoS。
Packet
Set DS Field
Out

16. NETEM - Network Emulator (CONFIG_NET_SCH_NETEM)

  • 功能:网络仿真,能引入延迟、丢包、乱序等。
  • 原理:按配置随机/固定方式修改包的时延、丢包概率等。
  • 使用场景:测试网络应用在不同网络状况下的表现。
Packet
Add Delay
Drop?
Out

17. DRR - Deficit Round Robin (CONFIG_NET_SCH_DRR)

  • 功能:无饥饿的加权轮询,按权重公平调度各队列。
  • 原理:每轮分配 deficit,若队列包大小小于 deficit 就允许发,未用 deficit 保留到下轮。
  • 使用场景:多流公平带宽分配。
Round Robin
Q1
Q2
Q3

18. MQPRIO - MultiQueue Priority Qdisc (CONFIG_NET_SCH_MQPRIO)

  • 功能:多队列优先级调度,适配多队列网卡。
  • 原理:将流量按优先级映射到不同硬件队列。
  • 使用场景:数据中心、企业级多队列网卡。
MQPRIO Qdisc
HW Queue 0
HW Queue 1
HW Queue 2

19. SKBPRIO - skb Priority Queue (CONFIG_NET_SCH_SKBPRIO)

  • 功能:按 skb->priority 字段调度。
  • 原理:skb->priority 越小优先级越高。
  • 使用场景:自定义协议、内核模块产生的数据包优先级调度。
Packet
Check skb->priority
Enqueue by Prio

20. CHOKE - CHOose and Keep for responsive flows, drop Else (CONFIG_NET_SCH_CHOKE)

  • 功能:基于 RED 的自适应丢包,防止非响应流滥用。
  • 原理:与 RED 类似,但检测到非响应流时会更激进丢包。
  • 使用场景:防止 P2P、DoS 占用带宽。
Queue Check
RED Algorithm
Drop/Keep

21. QFQ - Quick Fair Queueing (CONFIG_NET_SCH_QFQ)

  • 功能:高效、近似精确的公平队列。
  • 原理:为每个流分配独立队列,依据权重调度,近似 GPS。
  • 使用场景:需要低复杂度高公平的环境。
QFQ Root
Flow 1
Flow 2
Flow 3

22. CODEL - Controlled Delay (CONFIG_NET_SCH_CODEL)

  • 功能:自适应队列管理,控制延迟,防止 bufferbloat。
  • 原理:检测包在队列中延迟,延迟高时丢包,低时放行。
  • 使用场景:家庭、企业网关控制延迟。
High
Low
Packet
Check Sojourn Time
Drop
Enqueue

23. FQ_CODEL - Fair Queue Controlled Delay (CONFIG_NET_SCH_FQ_CODEL)

  • 功能:结合 SFQ 和 CODEL,既能公平调度又能控制延迟。
  • 原理:为每个流分队列,队内用 CODEL 控制延迟。
  • 使用场景:家庭宽带、数据中心。
Root
Flow Queue 0
Flow Queue 1
CODEL

24. CAKE - Common Applications Kept Enhanced (CONFIG_NET_SCH_CAKE)

  • 功能:一体化智能队列管理,自动分类、队列、整形和延迟控制。
  • 原理:集成 FQ、CODEL、流识别、整形等多功能于一体。
  • 使用场景:家庭、SOHO 网关,易用高效。
CAKE Qdisc
AutoClassify
PerFlowQ
FQ_CODEL

25. FQ - Fair Queueing (CONFIG_NET_SCH_FQ)

  • 功能:基于流的公平队列,可结合 pacing(速率控制)。
  • 原理:每个流独立队列,按公平和速率限制出队。
  • 使用场景:TCP pacing,数据中心。
Root
Flow0
Flow1
Flow2

26. HHF - Heavy-Hitter Filter (CONFIG_NET_SCH_HHF)

  • 功能:检测并限制大流(heavy-hitter),提升公平性。
  • 原理:跟踪流活跃度,活跃流被限制,促进公平。
  • 使用场景:防止单一流爆发占用带宽。
Yes
No
Packet
Heavy Hitter?
Penalize
Normal

27. PIE - Proportional Integral controller Enhanced (CONFIG_NET_SCH_PIE)

  • 功能:延迟控制算法,主动丢包,防止 bufferbloat。
  • 原理:根据队列延迟动态调整丢包概率。
  • 使用场景:宽带网关、运营商设备。
Delay High
Delay Low
Packet
Check Queue Delay
Drop
Enqueue

28. PLUG - Simple Packet Plug (CONFIG_NET_SCH_PLUG)

  • 功能:简单的“塞车”队列,可暂存包直到被手动释放。
  • 原理:所有包暂存,直到明确释放。
  • 使用场景:调试、测试、流量捕获。
Release
Packet
Buffer
Out

29. ETS - Enhanced Transmission Selection (CONFIG_NET_SCH_ETS)

  • 功能:多队列加权轮询调度,支持严格优先级和带宽分配。
  • 原理:部分队列为 Strict Priority,部分为 Weighted Round Robin。
  • 使用场景:数据中心、以太网交换机。
ETS Qdisc
Strict Prio 1
Strict Prio 2
Weighted RR Queues

30. DEFAULT - Default Qdisc (CONFIG_NET_SCH_DEFAULT)

  • 功能:指定默认 Qdisc 类型。
  • 原理:内核启动或接口 up 时,自动应用本配置。
  • 使用场景:简化部署,指定全局队列管理策略。

结语

Linux 网络队列调度器为各种业务场景提供了丰富的流量管理手段。合理选择和配置 Qdisc 能显著提升网络性能与服务质量。

注:如需进一步配置和调优,推荐阅读 tc 工具官方文档与内核源码。

http://www.dtcms.com/a/233708.html

相关文章:

  • 用ApiFox MCP一键生成接口文档,做接口测试
  • 十八、【用户认证篇】安全第一步:基于 JWT 的前后端分离认证方案
  • 浅谈控制器
  • Redis:介绍和认识,通用命令,数据类型和内部编码,单线程模型
  • Hive中ORC存储格式的优化方法
  • 11 - ArcGIS For JavaScript -- 高程分析
  • day38 6月5号
  • golang 如何定义一种能够与自身类型值进行比较的Interface
  • ignore文件不生效的问题
  • JVM垃圾回收器-ZGC
  • 【赵渝强老师】Docker的图形化管理工具
  • 行内样式:深入解析与应用指南
  • SpringCloud——OpenFeign
  • 大模型的开发应用(七):大模型的分布式训练
  • AtCoder-abc408_b 解析
  • snprintf函数用法及注意事项详解
  • 【鸿蒙在 ETS (Extendable TypeScript) 中创建多级目录或文件,可以使用鸿蒙的文件系统 API】
  • 力扣刷题Day 71:搜索旋转排序数组(33)
  • Win10、Win11系统,使用谷歌浏览器文件流下载,C盘剩余容量小于4GB时,下载失败问题
  • 我的创作纪念日——聊聊我想成为一个创作者的动机
  • 25.6.5学习总结
  • 风机下引线断点检测算法实现
  • 系统思考持续训练
  • 【Redis】笔记|第10节|京东HotKey实现多级缓存架构
  • 简化复杂系统的优雅之道:深入解析 Java 外观模式
  • AI大模型在测试领域应用案例拆解:AI赋能的软件测试效能跃迁的四大核心引擎(顺丰科技)
  • Q: 数据库增删改查的逻辑如何实现?
  • 软件测试基础知识总结
  • 08_10小结
  • 八:操作系统设备管理之磁盘调度算法