返回博客列表
无线通信··12 分钟阅读

调度优先级算法学习卡片

梳理队列调度和流量整形算法,理解 FCFS、RR、SP、WRR、WFQ、令牌桶等机制背后的取舍。

1. 一句话总览

调度算法本质是在回答一个问题:

资源有限时,下一次该服务谁?

不同算法的差异在于:它们用什么标准判断“谁更该被调度”。


2. 调度算法分类

可以分成两大类:

一类:队列调度算法
解决“多个队列/用户/业务,谁先服务”的问题。
 
一类:流量整形算法
解决“某个用户/业务能不能以这个速率进入网络”的问题。

一句话区别:

调度算法:决定资源怎么分。
流量整形:限制流量怎么进。

3. 队列优先级算法

3.1 FCFS:先进先出

一句话功能

谁先来,谁先服务。

核心逻辑

按照任务到达顺序排队;
先到的先调度;
当前任务结束后,再调度下一个任务。

优点

实现最简单;
调度开销小;
顺序清晰。

缺点

不看任务大小;
不看信道好坏;
不看业务优先级;
大任务可能堵住后面的小任务。

无线场景理解

适合确定性强、流程简单的场景,例如:

信令调度
重传调度
控制流程排队处理

记忆关键词

先来先服务,简单但容易被大任务堵住。

3.2 RR:轮询调度

一句话功能

大家轮流来,每个队列都有机会。

核心逻辑

调度器按固定顺序轮询队列;
队列非空就服务一次;
队列为空就跳过。

优点

简单;
相对公平;
不会长期饿死某个队列。

缺点

不看CQI;
不看信道质量;
不看业务优先级;
系统容量可能较低。

无线场景理解

RR 对用户很公平,但对系统吞吐不友好。

例如:

近点用户CQI很好;
远点用户CQI很差;
RR仍然轮流调度。

结果是:

公平有了,但吞吐损失大。

记忆关键词

人人有份,但不聪明。

3.3 WRR:加权轮询

一句话功能

在 RR 基础上加权重,权重大的人多调度几次。

核心逻辑

每个队列配置一个权重;
权重大,调度次数多;
权重小,调度次数少。

例如:

队列A权重 = 3
队列B权重 = 1

可以理解为:

A被调度3次,B被调度1次。

优点

比RR更灵活;
可以体现业务优先级;
实现仍然相对简单。

缺点

按报文个数调度;
不考虑报文大小;
大包队列会获得更多实际带宽。

关键问题

WRR 看起来公平,但它公平的是:

调度次数

不是:

实际带宽

如果 A 队列都是大包,B 队列都是小包,A 实际拿到的带宽更大。

记忆关键词

按次数加权,不按字节公平。

3.4 DRR:赤字轮询

一句话功能

在 WRR 基础上考虑包长,实现更接近速率公平。

核心逻辑

DRR 引入两个概念:

quantum:每轮给队列增加的调度额度
deficit:队列累计可用额度

调度规则:

每轮给队列增加 quantum;
如果 deficit >= 队首包大小,就发送该包;
发送后 deficit -= 包大小;
如果 deficit 不够,就攒到下一轮。

举个例子

quantum = 400
包大小 = 900

第 1 轮:

deficit = 400,不够发900,不发

第 2 轮:

deficit = 800,不够发900,不发

第 3 轮:

deficit = 1200,够发900,发送
剩余 deficit = 300

优点

考虑包长;
更接近带宽公平;
避免WRR大包占便宜的问题。

缺点

需要维护deficit;
要计算包长;
实现复杂度比RR/WRR高。

记忆关键词

按字节记账,额度够了再发。

3.5 SP:严格优先级

一句话功能

高优先级永远先服务。

核心逻辑

先看最高优先级队列;
只要高优先级队列非空,就一直调度它;
高优先级空了,才调度低优先级。

优点

关键业务保障强;
低时延业务可以优先处理;
逻辑清晰。

缺点

低优先级可能长期得不到调度;
如果高优先级流量过大,会饿死低优先级。

无线场景理解

适合强保障业务,例如:

控制信令
URLLC类低时延业务
高优先级重传
紧急业务

但必须配合限速或令牌桶,否则低优先级业务会被压死。

记忆关键词

关键业务绝对优先,但可能饿死低优先级。

3.6 SJF:最短任务优先

一句话功能

谁占资源少,谁先服务。

核心逻辑

从待调度任务中选择运行时间最短或资源占用最少的任务;
短任务先完成;
长任务后处理。

优点

有利于降低平均等待时间;
有利于提升系统整体吞吐;
小任务响应快。

缺点

长任务可能长期等待;
如果短任务持续到来,长任务会被不断推迟。

无线场景理解

可以类比:

小包业务
短时延业务
低资源占用业务

但如果一直优先小包,大包业务可能被长期压制。

记忆关键词

短任务优先,整体效率高,但长任务容易饥饿。

3.7 PF:比例公平

一句话功能

在系统吞吐和用户公平之间折中。

核心公式

PF优先级 = 当前可达速率 / 历史平均速率

也可以理解为:

PF = 当前信道好不好 / 过去已经拿了多少资源

核心逻辑

当前速率高 → 优先级高;
历史平均速率低 → 优先级高;
长期没被调度的用户会逐渐获得机会。

优点

兼顾系统容量和公平性;
比RR更懂信道;
比Max C/I更公平。

缺点

原始PF不直接考虑QoS;
不保证时延;
不保证最低速率;
不保证业务体验。

和其他算法对比

Max C/I:只看当前信道,吞吐高但不公平。
RR:只看轮流公平,吞吐低。
PF:当前速率 / 历史速率,折中。

EPF 是什么

EPF 可以理解为增强版 PF,在 PF 的基础上加入更多权重因子,例如:

业务优先级
QoS需求
时延因子
GBR保障
缓存状态
用户等级

简化理解:

PF:主要看速率公平。
EPF:在PF基础上加入业务体验和优先级。

记忆关键词

当前好、过去少,就优先调。

4. 队列调度算法对比表

算法核心标准优点缺点适合场景
FCFS到达顺序简单、开销小大任务阻塞小任务信令、重传
RR轮流服务公平、简单不看信道,容量低基础公平调度
WRR按权重轮询支持优先级不考虑包长多业务队列
DRR按字节额度轮询速率公平实现复杂些不同包长队列
SP严格优先级关键业务保障强低优先级可能饿死控制面、低时延
SJF短任务优先平均等待低长任务可能饥饿小包优先场景
PF当前速率/历史速率吞吐与公平折中QoS保障不足无线数据调度

5. 调度算法之间的主线关系

可以这样理解它们的演进:

FCFS:按到达顺序
RR:按用户公平轮流
WRR:按权重轮流
DRR:按字节公平轮流
SP:按业务优先级
SJF:按任务大小
PF:按信道效率 + 历史公平
EPF:PF + QoS + 业务优先级

一句话:

越往后,考虑的因素越多,也越接近真实无线调度。

6. 流量整形算法

6.1 流量整形解决什么问题

调度算法解决:

资源给谁?

流量整形解决:

流量能不能进?进多少?超速怎么处理?

如果没有流量整形,大量突发流量会导致:

缓存拥塞
排队时延增大
丢包增加
网络资源浪费
业务体验恶化

所以需要限制流量进入网络的速率。


6.2 令牌桶基本思想

令牌桶可以理解为:

桶里装令牌;
系统按固定速率往桶里放令牌;
报文发送前要拿令牌;
令牌够,报文通过;
令牌不够,报文等待、降级或丢弃。

关键参数

令牌生成速率:控制长期平均速率
桶容量:控制允许突发的大小
报文大小:决定需要消耗多少令牌

为什么令牌桶能支持突发

因为令牌可以积累。

如果一段时间没有发流量,桶里会攒令牌。 下一波突发到来时,可以用之前攒的令牌快速发送。


6.3 报文染色机制

令牌桶常用颜色标记:

绿色:未超速,正常转发
黄色:轻微超速,降级处理
红色:严重超速,丢弃

这不是为了好看,而是为了让系统对不同程度的超速采取不同策略。


7. 单速单桶

一句话功能

只限制平均带宽。

核心逻辑

一个令牌桶;
按固定速率加令牌;
报文来时,如果令牌够就通过;
令牌不够就缓存或丢弃。

适用场景

只想限制用户最大带宽;
不需要区分突发程度。

优点

简单;
实现成本低;
参数少。

缺点

无法区分轻微突发和严重突发;
策略不够精细。

记忆关键词

一个桶,控平均速率。

8. 单速双桶

一句话功能

在限制平均速率的同时,允许一定突发。

核心逻辑

一个速率;
两个桶;
先填充一个桶;
满了再填另一个桶;
根据两个桶的令牌情况判断绿/黄/红。

可以理解为:

C桶:承诺流量
E桶:额外突发流量

适用场景

需要限制长期速率;
但允许短时间突发。

优点

比单桶更灵活;
能容忍一定突发;
可以做不同颜色标记。

缺点

处理流程更复杂;
参数配置更复杂。

记忆关键词

一个速率,两个桶,允许突发。

9. 双速双桶

一句话功能

同时限制承诺速率和峰值速率。

核心逻辑

两个桶;
两个填充速率;
C桶控制承诺速率;
P桶控制峰值速率;
根据令牌是否足够决定绿/黄/红。

常见理解:

CIR:Committed Information Rate,承诺速率
PIR:Peak Information Rate,峰值速率
CBS:承诺突发大小
PBS:峰值突发大小

简化判断

C桶和P桶都够:绿色
C桶不够但P桶够:黄色
P桶也不够:红色

适用场景

既要限制平均带宽;
又要限制峰值带宽;
还要区分不同程度的突发。

优点

最灵活;
可以区分正常、轻微超速、严重超速;
适合精细QoS控制。

缺点

实现和配置复杂;
参数理解成本高。

记忆关键词

两个速率,两个桶,精细限速。

10. 三种令牌桶对比

算法桶数量速率数量能否支持突发能否区分颜色复杂度
单速单桶11
单速双桶21
双速双桶22是,最精细

11. 调度算法与流量整形的区别

对比项调度算法流量整形
解决问题谁先被服务流量能不能进入
作用位置出队/资源分配入队/入口监管
典型算法RR、WRR、DRR、SP、PF令牌桶
核心目标分配资源控制速率
关注点公平、优先级、吞吐限速、突发、染色

一句话:

调度是“发给谁”;
整形是“让不让进”。

12. 学习这批算法的主线

你要按这条线理解:

1. 最简单:FCFS
   按到达顺序。
 
2. 追求公平:RR
   每个人轮流来。
 
3. 加入权重:WRR
   重要的人多来几次。
 
4. 考虑包长:DRR
   不按次数公平,而按字节公平。
 
5. 保障关键业务:SP
   高优先级先服务。
 
6. 提升系统效率:SJF
   小任务先完成。
 
7. 兼顾无线吞吐和公平:PF
   信道好且历史少的人优先。
 
8. 加入业务体验:EPF
   PF基础上叠加QoS和业务优先级。
 
9. 控制入口流量:令牌桶
   控制流量速率和突发。

13. 你最容易混的点

13.1 WRR 和 DRR 的区别

WRR:按包个数调度。
DRR:按字节额度调度。

举例:

队列A:每个包1000字节
队列B:每个包100字节

WRR 如果各发 1 个包:

A 实际发了1000字节
B 实际发了100字节

这不是真正带宽公平。

DRR 会按字节额度扣账,更公平。


13.2 SP 和 PF 的区别

SP:业务优先级绝对优先。
PF:效率和公平折中。

SP 更适合关键业务保障。 PF 更适合无线数据业务调度。


13.3 水桶算法和调度算法不是一类东西

令牌桶不是决定“谁先调度”,而是决定:

这个流量是否超速;
超速后怎么处理。

14. 一句话记忆版

FCFS:先来先服务。
RR:大家轮流。
WRR:按权重轮流。
DRR:按字节额度轮流。
SP:高优先级先来。
SJF:短任务先来。
PF:信道好且历史少的先来。
EPF:PF再叠加QoS和业务优先级。
令牌桶:控制流量进入速度。

Connect

持续跟踪通信仿真、AI 辅助研发与技术管理

如果你也关注系统仿真、AI for RAN、研发效能和团队管理,欢迎通过邮件交流具体问题和实践经验。

也欢迎围绕仿真平台、AI Coding 落地、技术团队管理等主题交流具体问题和实践经验。

Next Reading

优先推荐标签或分类相关的文章;没有足够相关内容时,补充最新文章。

向福星

无线通信算法工程师,关注系统仿真、AI for RAN、研发效能和技术团队管理。

了解作者