第10章:MAC层调度优化:EDCA参数调优、TXOP聚合策略、A-MSDU/A-MPDU帧聚合
各位同学,咱们今天聊点实在的。MAC层调度,说白了就是决定「谁先发、发多少、怎么发」的问题。很多工程师调WiFi性能,上来就改射频参数,其实MAC层才是瓶颈大户。我见过太多项目,射频链路测着挺好,一到多站点并发就崩,十有八九是MAC调度没调明白。
10.1 EDCA参数调优:别让优先级成了摆设
EDCA(Enhanced Distributed Channel Access)是802.11e引入的QoS机制。它的核心思想很简单:给不同业务流分配不同的信道接入优先级。但实际部署时,很多人只是把参数填进去,根本没考虑实际场景。
EDCA定义了四个接入类别(AC):
- AC_VO(语音):最高优先级,延迟敏感
- AC_VI(视频):次高优先级,吞吐量敏感
- AC_BE(尽力而为):普通数据
- AC_BK(背景):最低优先级,如批量下载
每个AC都有三个关键参数:
- CWmin/CWmax:竞争窗口的最小值和最大值
- AIFSN:仲裁帧间间隔数
- TXOP Limit:传输机会限制
核心原则:优先级越高,CW越小,AIFSN越小,TXOP Limit可以适当放宽。
我调过一款路由器芯片,默认参数下视频流和语音流抢信道抢得厉害。语音包延迟飙到50ms,用户投诉声音卡顿。后来我把AC_VO的CWmin从7降到3,AIFSN从2降到1,延迟直接降到10ms以下。你想想看,就改了几个寄存器值,效果立竿见影。
调优建议:
- 语音场景:CWmin=3, CWmax=7, AIFSN=1, TXOP Limit=1.5ms
- 视频场景:CWmin=7, CWmax=15, AIFSN=2, TXOP Limit=3.0ms
- 尽力而为:CWmin=15, CWmax=1023, AIFSN=3, TXOP Limit=0ms
注意:CW设得太小会导致碰撞概率急剧上升。我曾经在一个高密度场景(50+站点)把CWmin设成1,结果碰撞率超过40%,吞吐量反而下降。调参要结合站点数动态调整,别死脑筋。
10.2 TXOP聚合策略:一次拿够,别频繁抢
TXOP(Transmission Opportunity)允许一个站点在获得信道后连续发送多个帧,而不需要每次发送前都重新竞争。这玩意儿对多站点并发性能影响巨大。
为什么?因为每次信道接入都有开销。RTS/CTS交换、退避时间、帧间间隔...这些开销在低速率下占比不大,但在高速率(比如802.11ax的1024-QAM)下,开销占比能到30%以上。
TXOP聚合的核心策略:
- 固定TXOP:每个站点分配固定时长,简单但不够灵活
- 自适应TXOP:根据信道质量、队列深度动态调整
- 公平性TXOP:确保每个站点获得大致相等的传输机会
我个人习惯用自适应策略。具体做法是:
- 监测每个站点的MCS(调制编码方案)等级
- MCS高的站点给更长TXOP,因为传输效率高
- MCS低的站点给短TXOP,避免长时间占用信道
- 队列深度超过阈值时,适当延长TXOP
经验公式:TXOP_Limit = base_TXOP × (MCS_index / max_MCS) × queue_factor
其中queue_factor = min(1.0, queue_depth / threshold)
我在一个项目里遇到过极端情况:有个站点信号很差,MCS只有0(BPSK),但队列里堆了100个数据包。如果给它长TXOP,它要发很久,其他站点都得等着。后来我限制了低MCS站点的TXOP不超过1ms,同时提高它的CWmin,让它少抢信道。嗯,这招叫「惩罚性调度」,虽然听起来不友好,但对整体性能有利。
10.3 A-MSDU/A-MPDU帧聚合:把零碎打包发
帧聚合是提升MAC层效率的利器。802.11n引入了两种聚合方式:A-MSDU和A-MPDU。很多人搞不清它们的区别,我简单说下。
| 特性 | A-MSDU | A-MPDU |
|---|---|---|
| 聚合层级 | MAC服务数据单元 | MAC协议数据单元 |
| 最大长度 | 7935字节(HT)/ 11454字节(VHT) | 65535字节(HT)/ 1048575字节(VHT) |
| 重传粒度 | 整个A-MSDU | 单个MPDU |
| 适用场景 | 低误码率信道 | 高误码率信道 |
说白了,A-MSDU是把多个数据包拼成一个大的MAC帧,只加一次MAC头。A-MPDU是把多个MAC帧拼在一起,每个帧都有自己的MAC头,但共享PHY头。
为什么A-MPDU在差信道下更好?因为如果某个子帧出错,只需要重传那个子帧,其他子帧不用动。而A-MSDU只要有一个bit出错,整个大帧都得重传。
实战建议:
- 信道质量好(SNR > 30dB):优先用A-MSDU,效率更高
- 信道质量一般(SNR 20-30dB):用A-MPDU,子帧大小设为1-2KB
- 信道质量差(SNR < 20dB):减小聚合长度,甚至不聚合
我记得有一次调试802.11ac芯片,客户反映在远距离场景下吞吐量只有标称值的30%。查了半天,发现是A-MSDU聚合了太多小包,每个包1500字节,一次聚合10个,结果信道一差就疯狂重传。后来改成A-MPDU,子帧大小设为512字节,聚合8个,重传率从25%降到5%,吞吐量翻了一倍。
10.4 三者协同:EDCA + TXOP + 帧聚合
这三个机制不是孤立的,它们需要协同工作。我总结了一个调优流程:
- 先定优先级:根据业务类型配置EDCA参数
- 再定传输机会:根据信道质量和队列深度调整TXOP
- 最后定聚合策略:根据误码率选择A-MSDU或A-MPDU
一个实际案例:
某智能路由器项目,需要同时支持4K视频流(AC_VI)和IoT传感器数据(AC_BK)。
- AC_VI:CWmin=7, CWmax=15, AIFSN=2, TXOP=3ms, 使用A-MPDU聚合8个子帧
- AC_BK:CWmin=31, CWmax=1023, AIFSN=7, TXOP=0ms, 不聚合
结果:视频流延迟稳定在15ms以内,IoT数据虽然延迟大点(200ms),但传感器本来就不在乎延迟。整体吞吐量提升了40%。
避坑指南:我曾经把AC_BK的TXOP设成1ms,想着「给背景流量一点机会」。结果IoT设备疯狂发送小包,每个包只占1ms,但频繁抢占信道,导致视频流卡顿。后来把AC_BK的TXOP设回0ms,问题解决。记住:背景流量就该老老实实等别人发完。
好了,这一章的内容就这些。EDCA参数调优是基础,TXOP策略是进阶,帧聚合是效率提升的关键。三者配合好了,多站点并发性能才能上去。下一章咱们聊聊OFDMA资源分配,那又是另一个维度的优化了。