mt76 速率控制:为什么客户端会被钉在 MCS0(以及如何证明)
2026-10-11 · 约 3 分钟
如果一台 OpenWrt + mt76 的 AP 只对某一个客户端发 MCS0,而其他客户端一切正常,那不是错觉——
而且通常不是信号问题。下面是这次的实测调查。
1. 先看对计数器
iw dev <ap> station dump | grep -E "Station|tx bitrate|rx bitrate|tx failed|tx retries|expected"
| 字段 | 含义 | 陷阱 |
|---|---|---|
tx bitrate |
AP→客户端最后一次用的速率 | 它是采样值、不是均值——要反复采样 |
rx bitrate |
客户端→AP 的最后速率 | 下行塌陷时它通常仍然正常 |
tx failed / tx retries |
链路层结果 | 要和"移动的字节数"对比,不能只看帧数 |
还要用一次廉价的内网传输确认方向,并在两端统计字节数(见第 3 节)。 如果 AP 发出的字节远多于客户端收到的,那是重传风暴;如果两边差不多,那只是空口空闲。
广告位(上线后接入 AdSense/Ezoic)
2. mt76 的速率控制在哪里
cat /sys/kernel/debug/ieee80211/phy*/rate_ctrl_alg # -> hw/driver
cat /sys/kernel/debug/ieee80211/phy*/hwflags # -> HAS_RATE_CONTROL
hw/driver 加上 HAS_RATE_CONTROL 意味着速率由固件/SoC 决定——mac80211 的软件速率控制(minstrel)
并不负责。所以"换个速率算法"不是选项;你只能间接影响它。
实践中有两个 debugfs 开关值得关注:
cat /sys/kernel/debug/ieee80211/phy*/mt76/vow_atf # 固件空口公平性,默认 1
cat /sys/kernel/debug/ieee80211/phy*/mt76/aql_enable # 空口队列上限
3. 定位到缺陷的那次测量
同一客户端、同一时段,只改 vow_atf(E 级证据——原始抓包与产生它们的脚本已公开
[1] [2])。空闲 60 秒,然后连续 6 次 6 秒的内网下载:
vow_atf |
结果 | 行为 |
|---|---|---|
| 1(默认) | 9.5 / 7.3 / 9.5 / 7.4 / 9.6 / 7.2 Mbps | 连续 36 秒满载也完全不恢复 |
| 0 | 7.8 / 8.8 / 20 / 146 / 387 / 393 Mbps | 约 15 秒内爬回满速 |
| 0 + 客户端重新关联 | 369 / 374 / 376 / 390 / 409 / 397 Mbps | 第一次突发就满速 |
塌陷状态下的字节对账:12 秒传输,AP 发出 12.87MB,客户端收到 12.4MB。 几乎没有重传浪费——速率很低、信道大部分空闲。这就排除了"客户端收不到",指向速率选择。
4. 塌陷到底是什么造成的
两个互相独立的触发条件,在 MT7986 + mt76 上都能复现:
- 客户端空闲/省电行为:约 1 秒空闲就足以让 AP 的发送速率掉到
MCS0 1SS。 在vow_atf=1下,即使随后持续满载,它也一直待在那里。 - 窄带客户端在宽带 BSS 里:只支持 40MHz 的客户端放进 80MHz BSS 会周期性塌陷,与 ATF 无关。 用它的原生带宽(40MHz BSS)运行则稳定在 380–420Mbps。
5. 该怎么做
# 1) 关掉那个阻止速率恢复的固件特性(并持久化)
echo 0 > /sys/kernel/debug/ieee80211/phy*/mt76/vow_atf
# 2) 如果客户端只支持 40MHz,就让射频宽度与它一致
sh /usr/bin/wifi-htmode HE40 # CSI 分辨率下降;客户端恢复可用
# 3) 最后一招:强制一次全新关联(重置速率状态)
iw dev <ap> station del <client-mac>
第 1 步持久化很重要:debugfs 的值会在驱动重载后丢失。本项目工具箱提供了开机初始化脚本与
每分钟重放的 watchdog(scripts/mt76-wifi-tune、scripts/csi-watchdog.sh)。
6. 不该下的结论
- 别相信单次
tx bitrate采样(它是最后速率,不是均值); - 没做方向测试就别怪客户端(本例上行物理层 600Mbps、实测 188Mbps,完全正常);
- 别用公网镜像做测试:宽带本身的波动会伪装成 Wi-Fi 行为。
相关:80MHz vs 40MHz · OpenWrt 空闲后变慢 · 路由器 CSI 复现
参考与数据来源
本文的每条外部结论都标注来源与证据等级(分级标准);标注 E 级的是本项目可复现的实测数据。
- E 级 · 本项目实测
本项目 10 分钟实测抓包(57,293 条 / 600.0 s,SHA-256 00373f83…95e2)
Router CSI Lab · 2026
csi.okwujun.pw/zh/datasets/ · 核实: 分片重组逐字节校验通过(2026-10-11) - E 级 · 本项目实测
Router CSI Toolkit — 采集/分析/守护脚本(MIT)
Router CSI Lab · 2026
csi.okwujun.pw/zh/tools/ · 核实: 仓库打包含 SHA-256,脚本在真机运行