关键词:WiFi WLAN 802.11 调速 自适应速率控制 Rate Control Rate Adaptation Minstrel
Overview
IEEE 802.11标准支持动态速率控制:基于无线信道质量,调整每个transmitted packet的MCS (Modulation and Coding Scheme)值1。但是IEEE 802.11标准并没有定义任何标准速率控制算法(Rate Control Algorithm, RCA)来动态改变调制速率。WLAN设备制造商或者WLAN芯片厂商负责实现各自的RCA。
自上世纪九十年代以来,出现了多种RCA算法,有很多文献对RCA算法进行了比较和讨论2。实际应用到产品中的RCA都是采用Tx端决定速率的算法,即Tx端与Rx端不会进行速率协商,而是Tx端根据历史信息自行评估信道质量或发送成功率并决定下一段时间的Tx速率。 这些RCA按照原理可以分为两类:
- 基于对信道质量(比如SNR, RSSI,BER)的测量结果进行调速,例如RBAR和OAR算法。
- 基于对Tx结果(比如Throughput, ACK)的统计报告进行调速,例如ARF, ONOE, Sample Rate和Minstrel算法。
已有文献证明第一类算法所采用的信道质量指标与丢包率/重传(retry)次数并没有强相关(考虑多径效应,这些指标并能简单对应到确定的rate),因此笔者接触到的RCA都是采用第二类算法。以最初的ARF(Auto Rate Fallback)为例:
- Tx端以一个初始速率开始发送packet。
- 如果连续没有收到2个ACK,则降低一档速率来发送后续的packets。
- 如果连续收到10个ACK,则提高一档速率来发送后续的packets。
ARF算法优点在于计算复杂度低,对CPU性能要求低,易于在WLAN芯片固件中实现;其缺点在于不能对信道状况的变化做出及时的反应——不能快速调整到最佳速率,因此厂商在实际应用中会根据自己的实验数据对该算法进行调整和改进。
第二类算法中,目前比较好的是minstrel,它也是Linux mac80211协议栈提供的默认RCA3。
Minstrel in Linux
minstrel的原意是指中世纪欧洲的吟游诗人。他们在欧洲四处游走,寻找赚钱的机会。吟游诗人来到一个地方,如果赚不到钱,就会转移到其他地方去尝试。minstrel速率控制算法会尝试不同的rate,如果一个rate的吞吐率很好,就使用它;如果这个rate的吞吐率不好,就放弃它。
无线信道是复杂的和时变的。minstrel算法不依赖于信道本身的物理指标,而是基于最终的通信效果——吞吐率来选择最佳的rate。
Probe_success_transmission x Mega bits transmitted
throughput = ------------------------------------------------------
time for 1 try of 1 packet to be sent on the air
minstrel算法4会选择若干不同的rate尝试传输packet,并计算和记录每种成功传输的rate对应的throughput。这一过程会以固定时间间隔(比如100ms)进行。EWMA(Exponential Weighted Moving Average)被用于处理历史数据,得到best throughput, second best througput和highest probability of success对应的rate。这些rate会放到Retry Chain中,用于接下来的时间间隔内的packet发送。以下是一个表格形式的Retry Chain:
Try | Lookaround rate | Normal rate
| random < best | random > best |
--------------------------------------------------------------
1 | Best throughput | Random rate | Best throughput
2 | Random rate | Best throughput | Next best throughput
3 | Best probability | Best probability | Best probability
4 | Lowest Baserate | Lowest baserate | Lowest baserate
Lookaround rate用于10%的sample packet(也称为probe packet)的发送;Normal rate用于90%的normal packet的发送。minstrel算法会从第一个rate开始尝试发送packet。一旦以某个rate将packet发送成功,就不会使用Retry Chain中剩余的rate来尝试发送,而会使用这个rate来完成当前时间间隔内剩余packet的发送。
关于Linux中minstrel算法的具体实现,这里不再赘述,大家可以去看《minstrel速率调整算法源码走读》。这里简单列举几点注意事项:
- WLAN_STA_RATE_CONTROL用于选择是否使用mac80211中注册的RCA。部分WLAN芯片在其固件中实现了RCA,就不需要使用驱动中的RCA。
- 除了Linux默认的minstrel算法,也可以通过struct rate_control_ops来注册其他的RCA。
- 如果RCA依赖于ACK,那么需要确认WLAN芯片是否会把ACK传给驱动。
Evaluate RCA
对于RCA效果的评估,有两种方式:仿真(Simulation)和实验室测试。本文不讨论仿真,只总结实验室测试的一些经验。
-
RCA测试应该在开放环境进行,而不能在屏蔽箱中进行。屏蔽箱中几乎没有无线干扰,信道稳定,RCA不会工作。 -
必须尽量保证测试环境一致性。两个采用不同RCA的STA设备必须连接到同一个AP;作为Rx端的一台PC应该通过网线连接到这个AP。考虑到多径效应,这两个采用不同RCA的STA设备必须摆放到同一位置(两根天线之间的距离应该满足两根天线在同一信道内),且STA与AP之间不能有障碍物。 -
两种RCA同时对比测试才能评估效果。无线信道是时变的,我们不能先完成了RCA_1的测试再进行RCA_2的测试。 -
不要选择过于拥堵的802.11 channel进行测试。在一定距离内,不同的AP,如果使用同一个802.11 channel,那么它们各自的BSS会相互干扰(而且没有解决的办法)。在测试开始前,应该先用WiFi Analyzer分析周围环境中802.11 channel的使用情况,然后选择一个相对不太拥堵的802.11 channel。
在实验室测试过程中,如果观察到throughput突然下降且无法恢复或者不符合期望的剧烈波动,就需要借助空口抓包工具(比如OmniPeek, Wireshark)分析原因。空口抓包工具可以查看单位时间内的平均重传包个数、平均信号强度、平均噪声强度等指标。大量的重传包会导致throughput下降。我们需要进一步分析导致大量重传的具体原因。如果用两个空口抓包器在AP旁边和STA旁边同时抓包,会更有助于分析一些问题的root cause,比如到底是Tx信号质量不好导致对端没有收到本端发送的packet,还是Rx性能不好导致本端没有收到对端发送的ACK。
Travel Through Walls
在消费电子测评中,经常会用“穿墙”性能来评价无线路由器或者无线网卡。“穿墙”性能不是一个定义明确的客观指标。测评通常是在一个有很多小隔间的办公场所进行;AP和STA之间隔着两三堵墙,进行throughput测试。我们知道,不同类型材料(比如石膏板、砖、钢筋混凝土)的墙体对802.11信号的损耗是不同的。所以在其他测试变量相同的情况下,仅仅是墙体材料的差异就会导致throughput的不同。因此在实际产品开发中,一般采用与竞品进行对比测试的方式来测试“穿墙”性能。
“穿墙”性能其实可以对应到Tx Power和Rx Sensitivity。增大Tx Power可以显著提高“穿墙”性能,但是Tx Power并不能随意增大。受发射机性能限制,Tx Power增大到一定程度会导致EVM恶化,对端无法解调,重传率上升,throughput下降;而且Tx Power还受到无线电管理规范制约。Rx Sensitivity越高意味着可捕获弱信号的能力越强,越容易收到对端发出的ACK,从而避免不必要的重传。
Referencce
- 802.11 Dynamic Rate Control Simulation
- WiFi自适应速率算法与无线网络瓶颈探测
- The Minstrel Rate Control Algorithm for mac80211
- Rate Adaptation for 802.11 Wireless Networks: Minstrel
|