想象一家生意火爆的火锅店,只有一口大锅(频谱资源),却同时坐着二十桌客人(在线用户)。怎么让每一桌都吃得满意?店里必须有一个传菜员,在每一轮出菜时决定:这一锅毛肚先给3号桌,因为3号桌点得多(数据量大);下一锅肥牛给7号桌,因为7号桌刚坐下等了很久(饥饿用户);而靠窗那桌信号不好、锅气不足(信道差),多给几勺让它慢慢煮。
这个传菜员,就是无线接入网里最繁忙、也最不为人知的角色——MAC调度器(Scheduler)。
有线网络不需要它:光纤里一根纤芯可以逻辑上划分给任意多的用户,交换机靠排队就能解决冲突。但无线空口是所有用户共享的单一物理媒介——同一个频率、同一个时刻,一个小区只能发射一份电磁波。谁先发、发多少、用什么速率发,必须有一个仲裁者每时每刻做出决定。这个仲裁机制,就是本文的主角:空口调度。
理解调度器之前,先理解它面对的三个根本约束。
约束一:频谱是稀缺的。 运营商花重金拍来的频谱宽度是固定的(比如100MHz),物理定律决定了它承载信息的上限——这就是香农公式给出的天花板:
$$C = B \log_2 \left(1 + \frac{S}{N}\right)$$
带宽 $B$ 固定,信噪比 $S/N$ 越差,可实现的速率 $C$ 越低。资源总量无法增加,只能精细分配。
约束二:信道是时变的。 用户在走动、在坐车,多径衰落让信号质量每时每刻都在变。同一部手机,这一毫秒信道很好(可以跑高速率),下一毫秒可能掉进深衰落(只能跑低速率)。
约束三:业务是异构的。 小区里同时有刷短视频的、打语音电话的、下载更新的、发微信心跳的。它们对时延、速率、可靠性的要求完全不同。
三个约束叠加,结论只有一个:必须存在一个高速决策引擎,以毫秒级的节奏,把时频资源动态地“拍卖”给最合适的用户。
在讲调度器怎么分配之前,先看它分的是什么。正交频分多址(OFDMA)把空口资源切成了一堆整齐的“乐高积木”:
整个小区的带宽,在每个时隙里都被划分成一条条“频域车道”。调度器的工作,就是在每一个1毫秒的节拍上,回答三个问题:
调度器位于基站(gNB)的MAC层,紧贴物理层之上。它的决策周期就是一个时隙——基础配置下就是每1毫秒一轮。也就是说,当你刷10秒短视频时,调度器已经为你的手机做了大约上万次资源分配决策。
调度器的完整输入输出全景如下图:
flowchart TD
A[信道状态信息<br>CQI 与 PMI RI] --> S[MAC 调度器]
B[各用户缓冲区数据量<br>下行看待发队列] --> S
C[QoS 参数<br>5QI 优先级与 GBR 要求] --> S
D[上行探测信号 SRS] --> S
E[上行缓存状态报告 BSR] --> S
F[功率余量报告 PHR] --> S
S -->|生成调度指令 DCI| G[PDCCH 控制信道]
S -->|按授权发送数据| H[PDSCH 或 PUSCH 数据信道]
G --> U[手机 UE]
H --> U
U -->|HARQ 应答与信道反馈| A
注意最下面那条回路:手机不断地把“我看到的信道质量”和“我还有多少数据要发”上报给基站,调度器根据这些情报持续修正下一轮决策。调度本质上是一个每毫秒运转一次的闭环控制系统,而不是一次性的静态分配。
调度器在每个时隙里的决策分两步走。
第一步:时域调度——决定本时隙“活跃用户名单”。 基站手里通常有几十个处于连接态的用户,但不是人人每毫秒都有数据要发。调度器先过滤:没有缓存数据的、正处于测量间隙的、被DRX机制要求“睡觉”的用户直接排除。剩下有数据、可调度的候选者进入第二轮。
第二步:频域调度——给入选者分配RB并选择MCS。 这一步的核心依据是每个用户在不同频段上的信道质量差异:宽带系统中,某个用户可能在低频段信道好、高频段信道差(频率选择性衰落)。聪明的调度器会把每个用户分到它自己信道最好的那段频谱上——这叫信道依赖调度(Channel-Dependent Scheduling),是现代移动通信提升频谱效率的第一功臣。
“给谁分资源”有三种经典策略,它们构成了一条从“极端公平”到“极端效率”的光谱。
轮流来,每人一份,不管你信道好坏。就像食堂打饭,人人一勺。优点是实现简单、无饿死;缺点是频谱效率低——把资源分给了此刻信道很差的用户,宝贵的功率换不来多少有效比特。
每个时隙都把资源给当前信道最好的那个用户。频谱效率最高,但有个致命问题:小区边缘的弱信号用户可能永远轮不到资源——它的信道永远比不过近点用户。这在工程上叫“饿死(starvation)”,绝对不可接受。
PF算法是现网绝对主流,它的思想极为巧妙:不看你的绝对速率,看你的“相对运气”。用户 $i$ 在当前时隙的调度优先级为:
$$P_i(t) = \frac{r_i(t)}{\bar{R}_i(t)}$$
其中 $r_i(t)$ 是它当前瞬时信道所能支持的速率,$\bar{R}_i(t)$ 是它过去一段时间的平均吞吐量。
直觉解读: - 一个用户刚经历信道好转($r_i$ 突然变大),优先级飙升——调度器抓住机会“趁热打铁”,让它在好信道上猛传; - 一个用户长期没分到资源($\bar{R}_i$ 持续下降),分母变小,优先级被动升高——饥饿会自动积累筹码,保证它迟早被服务。
PF的精妙之处在于数学上可以证明:它最大化的是所有用户吞吐量的对数之和( $\sum \log \bar{R}_i$ ),对应的是“比例公平”意义上的社会福利最大化——不追求总量最大,而是让每个用户的相对待遇尽量均衡。
在PF基础上,工程中还会叠加QoS加权,形成QoS感知调度。经典思路之一是指数规则(Exponential Rule)家族:对时延敏感业务,当它的排队时延接近要求时,用一个指数项急剧拉高其优先级,确保语音、URLLC类业务“插队”成功。其一般形式为:
$$P_i(t) = \frac{r_i(t)}{\bar{R}_i(t)} \cdot e^{\frac{a_i \cdot W_i(t)}{\tau}}$$
其中 $W_i(t)$ 是队头包时延,$a_i$ 是业务的时延敏感度权重。日常语音包排了太久时,指数项爆炸式增长,调度器立刻给它优先权。三种算法的全景对比如下:
| 维度 | 轮询 RR | 最大载干比 Max C/I | 比例公平 PF |
|---|---|---|---|
| 分配依据 | 轮到谁给谁 | 谁信道好给谁 | 瞬时速率 ÷ 平均吞吐 |
| 频谱效率 | 最低 | 最高 | 较高(损失约10%~20%) |
| 用户间公平性 | 表面公平 | 无保障,弱者饿死 | 比例公平(兼顾效率) |
| 小区边缘体验 | 一般 | 极差 | 较好 |
| 实现复杂度 | 最低 | 低 | 中等 |
| 现网地位 | 少用 | 少用 | 绝对主流 |
注:表中频谱效率损失为业界常见的量级性描述,具体数值随场景与实现不同而变化。
下行(基站发给手机)的调度执行链路是这样的:
flowchart TD
A[UE 测量信道质量] -->|上报 CQI| B[gNB 调度器]
B -->|选定 MCS 与 RB| C[生成 DCI 调度指令]
C -->|PDCCH 承载| D[UE 盲检自己的 DCI]
D -->|按指令接收| E[PDSCH 数据]
E --> F[UE 校验 HARQ]
F -->|ACK 或 NACK 反馈| B
三个关键环节值得展开:
① CQI上报——手机给基站“打分”。 手机基于对下行参考信号的测量,向基站上报一个4比特的信道质量指示(CQI),取值0~15。它不是裸的信号强度,而是一种“建议”:'CQI=15'的意思是“我现在这信道,你可以用最高阶调制跑满”;'CQI=0'的意思是“什么都别发了,我收不了”。基站据此从MCS表格中选取调制编码档位——信道好就上256QAM高阶调制多装比特,信道差就退到QPSK加低码率保可靠。
② DCI——毫秒级的调度指令单。 调度决策结果通过DCI(下行控制信息)在PDCCH上发给手机,内容相当于一张发货单:用哪些RB、什么MCS、HARQ进程号、数据在哪个时隙。手机需要在每个时隙盲检控制区域,寻找属于自己的那张“发货单”。
③ HARQ应答——快速纠错回路。 手机收到数据后在指定位置回复ACK/NACK,失败的数据由HARQ机制快速重传。调度器要为每个用户的多个HARQ进程维护状态,重传数据通常享受比新数据更高的优先级。
下行的数据在基站自己手里,调度器“看一眼队列”就能决策。但上行(手机发给基站)的数据在手机手里——基站根本不知道你的缓冲区里有没有数据、有多少。这就需要一套“申请-审批”流程:
sequenceDiagram
participant UE as 手机 UE
participant gNB as 基站 gNB
UE->>gNB: SR 调度请求 PUCCH 上一个比特
Note over gNB: 我不知道你有多少数据<br>先给个小额度
gNB->>UE: 第一级 UL Grant 小资源授权
UE->>gNB: MAC CE 携带 BSR 缓存状态报告
Note over gNB: 原来你有 2000 字节待发
gNB->>UE: 第二级 UL Grant 正式授权
UE->>gNB: PUSCH 发送真正的业务数据
gNB->>UE: HARQ 应答
关键角色解读:
这就是上行时延天然比下行高的根本原因:一次完整往返要经历“SR周期等待 + 授权下发的处理时延 + BSR捎带 + 第二次授权 + 才发数据”,典型配置下从数据到达手机缓冲区到真正上天线,耗时通常在数毫秒到十几毫秒量级(具体取决于SR周期与各定时器配置)。做低时延优化时,缩短SR周期是最直接的抓手之一。
每传一次数据都要走一遍“举手—审批”流程,对于周期性小包业务(如20毫秒一包的语音)实在太浪费。于是协议提供了“月票”机制:
月票的本质是用统计复用换取时延:资源按周期预留,哪怕某次没有数据,时隙空着也不给他人用。所以它只适合小包、周期、稳定的业务,不适合突发大流量。这正是5G支持URLLC低时延业务的调度层基石之一。
原理讲完了,落到日常运维和调测,调度器知识在这几类场景里直接变现:
场景一:单用户测速正常,多用户时某用户速率暴跌。 这往往不是故障,而是PF调度的自然结果——小区资源总量恒定,用户越多每人分得越少。判断依据是看各用户的RB占比是否大致符合PF预期。如果某个弱信号用户长期抢占过多RB,则要怀疑调度参数配置异常。
场景二:弱覆盖用户“拖累”整个小区。 Max C/I思想的残留场景:给边缘用户传1个比特消耗的功率和干扰,够近点用户传6个比特。这就是为什么优化小区边缘体验(提升CQI)比单纯加功率更有效——把边缘用户CQI从3提到6,省下的资源能让全小区受益。
场景三:上行时延抖动排查。 抓包发现业务包在手机缓冲区排队迟迟发不出去?先查SR周期配置是否过长、BSR上报是否及时。语音业务若忘记配置SPS/CG而走动态调度,每个20毫秒的语音包都要重新申请资源,时延抖动会明显恶化。
场景四:PDCCH拥塞——被忽视的隐形瓶颈。 大量用户小包业务(物联网心跳类)会让“发货单”本身挤爆控制信道:调度器想给用户发DCI却发现PDCCH符号数不够,数据信道资源再空闲也没用。这就是某些物联业务优化中做资源聚合调度(一次授权捎带多次数据)的动机。
常见误解与调试陷阱:
Q: PF算法和Max C/I的频谱效率差多少?为什么现网不用Max C/I? A: 量级上PF大约损失10%~20%的小区吞吐(视场景),但换来边缘用户的基本可用性。Max C/I会让边缘用户长期饿死,无法作为商用网络的服务承诺基础,因此只在某些局部(如固定无线接入中对近点用户)有变体应用,全网层面PF是标准答案。
Q: 上行为什么不能像下行一样直接调度,非要SR+BSR两跳? A: 因为信息不对称:下行数据队列在基站本地,上行数据队列在手机里,基站必须先让手机“报数”(BSR)才知道该给多少资源。而BSR本身需要资源才能发送,所以必须先用SR“举手”换一个小授权来捎带BSR——这是分布式系统中典型的“带外信令也需要信道”的两难,两跳授权是工程上的标准解法。
Q: CQI是信号强度吗?RSRP很好CQI就一定高吗? A: 不是。CQI综合了信号强度、干扰水平、多径条件,本质是“可支持的最高调制编码档位建议”。RSRP高但干扰同样高的场景(如小区边缘靠近邻区)CQI可能很低,反之亦然。排查速率问题时CQI比RSRP更接近真相。
Q: 配置授权(CG)既然免调度,会不会和动态调度冲突? A: 会重叠但不冲突。手机用CG资源发了数据后,若基站在同一时间又动态调度了它,协议约定手机只发一次(动态授权优先,CG本次作废或按规则跳过)。网络在配置CG后会尽量避开为其再动态调度同周期资源,但这依赖调度器实现,标准允许多种实现方式,具体行为以各厂家官方文档为准。
Q: 为什么说“调度器是5G性能的最后一公里”? A: 频谱、天线、功率都是静态资源,唯一能动态挖掘的性能就是“在正确的时间把资源给正确的人”。同样的硬件,调度算法调优前后的小区均值速率可差出可观比例——它是纯软件的、持续运转的、每毫秒都在做经济决策的“隐形引擎”。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。