当前位置: 首页 > 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.xdnf.cn/news/888247.html

相关文章:

  • Java + Spring Boot + Mybatis 插入数据后,获取自增 id 的方法
  • 【.net core】.KMZ文件解压为.KML文件并解析为GEOJSON坐标数据集。附KML处理多线(LineString)闭环问题
  • 【LLIE专题】NTIRE 2025 低照度图像增强第二名方案
  • EtherCAT Module and Slot
  • Python训练第四十五天
  • 中国森林地上和地下植被碳储量数据集(2002~2021)
  • 【EN 18031】访问控制机制(ACM - 3):儿童玩具的防护盾
  • 我认为STM32输入只分为模拟输入 与 数字输入
  • 实现基于Yolo的异常聚集算法
  • 会话技术:Cookie 与 Session 详解
  • Ubuntu崩溃修复方案
  • 基于Java(Jsp+servelet+Javabean)+MySQL实现图书管理系统
  • Vue中实现表格吸底滚动条效果,列太多时左右滚动条始终显示在页面中
  • android知识总结
  • 【从0-1的CSS】第1篇:CSS简介,选择器已经常用样式
  • NoSQl之Redis部署
  • 【PhysUnits】15.16 补充to_i32方法的类型级整数表示(basic.rs)
  • wxpython快捷键示例
  • Python cryptography【密码库】库功能与使用指南
  • 模块化架构下的前端调试体系建设:WebDebugX 与多工具协同的工程实践
  • Sublime Text4 4192 安装
  • NGINX `ngx_stream_core_module` 模块概览
  • 数据分析后台设计指南:实战案例解析与5大设计要点总结
  • 实用对比图软件推荐:快速呈现信息差异
  • 【请关注】MySQL 碎片整理提升性能
  • 在Facebook平台有效结合TikTok跨境营销的方法
  • Calendar类日期设置进位问题
  • CSS3相关知识点
  • 《C++ 模板》
  • C# 中的 IRecipient