第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:确保每个站点获得大致相等的传输机会

我个人习惯用自适应策略。具体做法是:

  1. 监测每个站点的MCS(调制编码方案)等级
  2. MCS高的站点给更长TXOP,因为传输效率高
  3. MCS低的站点给短TXOP,避免长时间占用信道
  4. 队列深度超过阈值时,适当延长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 + 帧聚合

这三个机制不是孤立的,它们需要协同工作。我总结了一个调优流程:

  1. 先定优先级:根据业务类型配置EDCA参数
  2. 再定传输机会:根据信道质量和队列深度调整TXOP
  3. 最后定聚合策略:根据误码率选择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资源分配,那又是另一个维度的优化了。