第4章:L2(MAC层)调度器优化

调度器,说白了就是MAC层的“交通警察”。

我做了这么多年芯片,最深的体会就是:调度器选得好,系统吞吐量蹭蹭往上涨;选得不好,再好的物理层也白搭。今天咱们就聊聊调度算法、优先级队列和HARQ重传这几个核心点。

4.1 调度算法选择:PF、RR、MAX C/I

调度算法这事儿,没有银弹。三种主流算法各有各的脾气。

4.1.1 轮询调度(RR)

RR是最简单的。每个用户轮流来,公平得很。但问题也明显——信道好的用户和信道差的用户享受同等待遇,整体吞吐量上不去。

我记得有个项目,客户要求绝对公平,我们就用了RR。结果呢?小区边缘用户倒是满意了,但中心用户投诉网速慢。嗯,这就是公平的代价。

4.1.2 最大载干比调度(MAX C/I)

MAX C/I正好相反。谁信道好,谁先来。吞吐量确实高,但公平性?不存在的。

你想想看,边缘用户可能永远抢不到资源。这在真实网络中根本没法用。我曾经在测试中发现,用了MAX C/I后,某些用户连续几百毫秒都没被调度到——这用户体验,啧啧。

4.1.3 比例公平调度(PF)

PF是业界主流。它兼顾了公平和效率。

核心公式很简单:

调度优先级 = 当前瞬时速率 / 历史平均速率

信道好的时候,瞬时速率高,优先级就高。但如果你一直被调度,历史平均速率也会涨上去,优先级自然降下来。这就给其他用户留出了机会。

我个人习惯把PF的遗忘因子调成100ms左右。太短了,历史影响太小,接近MAX C/I;太长了,又不够灵敏。

实战建议:

  • RR:适合VoIP等对时延敏感的业务
  • MAX C/I:适合做基准测试,别用在现网
  • PF:通用场景首选,参数可调性强

4.2 优先级队列管理

调度算法选好了,还得管好队列。不然高优先级业务照样被堵死。

4.2.1 队列分级

我一般分四级:

优先级 业务类型 时延要求
P0(最高) URLLC、信令 <1ms
P1 VoIP、实时游戏 <10ms
P2 视频流 <100ms
P3(最低) 文件下载、邮件 尽力而为

这里有个坑:P0业务不能太多。我曾经见过一个设计,把所有控制信令都塞进P0,结果P0队列爆了,反而影响了关键信令的调度。

4.2.2 队列调度策略

我推荐用严格优先级 + 权重轮询的组合。

  • P0和P1:严格优先级,保证时延
  • P2和P3:权重轮询,避免低优先级饿死

小技巧:队列深度别设太大。我一般控制在16~32个TB(传输块)。太深了,时延受不了;太浅了,容易丢包。

4.3 HARQ重传机制调优

HARQ这块,调好了是神助攻,调不好就是性能杀手。

4.3.1 重传次数限制

3GPP标准允许最多4次重传。但实际中,我建议设成2~3次。

为什么?因为重传超过3次,信道条件通常已经恶化到无法挽回了。继续重传只是浪费资源。

4.3.2 冗余版本(RV)选择

HARQ有4个冗余版本:RV0、RV1、RV2、RV3。

我个人习惯:

  • 首次传输:RV0(包含全部系统位)
  • 第一次重传:RV2(打孔模式,提供不同冗余)
  • 第二次重传:RV1或RV3(看信道条件)

避坑指南:我曾经遇到过一个问题——重传时用了和初传相同的RV。结果呢?分集增益没了,重传成功率直线下降。后来我强制要求重传必须换RV,问题才解决。

4.3.3 同步 vs 异步HARQ

同步HARQ:固定时序,实现简单,但灵活性差。

异步HARQ:时序灵活,可以动态调整,但控制信令开销大。

我的建议:

  • 上行:用同步HARQ,省信令
  • 下行:用异步HARQ,灵活调度

4.4 知识体系总览

下面这张图,是我自己总结的调度器优化全景图。你品,你细品。

L2调度器优化知识体系 调度算法选择 RR(轮询) 公平性最好,吞吐量低 MAX C/I 吞吐量最高,公平性差 PF(比例公平) 兼顾公平与效率 ★ 推荐:PF + 遗忘因子 优先级队列管理 P0:URLLC/信令 时延 < 1ms P1:VoIP/实时游戏 时延 < 10ms P2:视频流 时延 < 100ms P3:文件下载 尽力而为 ★ 严格优先级+权重轮询 HARQ重传调优 重传次数限制 建议2~3次 冗余版本选择 初传RV0,重传RV2 同步 vs 异步 上行同步,下行异步 ★ 重传必须换RV 核心目标:在公平性、吞吐量、时延之间找到最佳平衡点

4.5 调优实战要点

最后,我总结几个调优时一定要盯住的指标:

  1. 调度时延:从数据到达调度器到被调度出去的时间,建议 < 1ms
  2. HARQ成功率:首次传输成功率 > 90%,重传成功率 > 70%
  3. 队列溢出率:P0队列溢出率必须为0,P1 < 0.1%
  4. 公平性指数:用Jain's fairness index,建议 > 0.8

我的习惯:每次改完调度器参数,先跑24小时的压力测试。重点关注边缘用户的体验。如果边缘用户速率提升超过10%,同时中心用户下降不超过5%,这波调优就算成功了。

好了,调度器这块就聊到这儿。记住,没有最好的算法,只有最合适的配置。多试,多调,慢慢就有感觉了。


公众号:蓝海资料掘金营,微信deep3321