第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 知识体系总览
下面这张图,是我自己总结的调度器优化全景图。你品,你细品。
4.5 调优实战要点
最后,我总结几个调优时一定要盯住的指标:
- 调度时延:从数据到达调度器到被调度出去的时间,建议 < 1ms
- HARQ成功率:首次传输成功率 > 90%,重传成功率 > 70%
- 队列溢出率:P0队列溢出率必须为0,P1 < 0.1%
- 公平性指数:用Jain's fairness index,建议 > 0.8
我的习惯:每次改完调度器参数,先跑24小时的压力测试。重点关注边缘用户的体验。如果边缘用户速率提升超过10%,同时中心用户下降不超过5%,这波调优就算成功了。
好了,调度器这块就聊到这儿。记住,没有最好的算法,只有最合适的配置。多试,多调,慢慢就有感觉了。
公众号:蓝海资料掘金营,微信deep3321