独家排障:路由器跑起 CSI 后 Wi-Fi 变慢的真相(ATF 与 40MHz 塌陷)
2026-10-11 · 约 3 分钟
这是我们在把 CSI 跑进真实家庭网络后遇到的最难排查的问题,也是全网目前没有公开记录的现象:
同一台路由器,开启 CSI 之后,Mac 的下行速度从 300–400Mbps 掉到 6–10Mbps,而上行依然有 45Mbps。
下面是完整的定位过程、根因与两种修复方式。所有数字均为可复现的一手实测(E 级): 原始数据、对照实验方法与脚本一并公开 [2] [3];涉及的开源驱动为上游 mt76 [1]。
1. 先把范围缩小到"无线下行"
我们做了四组对照,把可能的环节逐个排除:
| 假设 | 实验 | 结论 |
|---|---|---|
| 宽带/光猫问题 | 路由器直接下载国内镜像 | 264–300Mbps(4 线程聚合 391Mbps),正常 |
| 有线问题 | 检查 WAN 口协商 | 1000Mbps 全双工,错误计数为 0 |
| CSI 采集开销 | 关闭 CSI(CSI enable: 0)后复测 |
仍然塌陷 → 与 CSI 采集无关 |
| 客户端发射能力 | Mac 上行 SSH 传输 | 188Mbps,AP 侧 rx 速率 600Mbps 3SS,正常 |
结论:只有 AP→客户端(下行)方向塌陷,速率被压到 VHT-MCS0 1SS(13.5Mbps)。
2. 关键线索:空闲就塌,且"塌了回不来"
用路由器侧 debugfs 观察客户端实时速率:
iw dev <iface> station dump | grep -E "tx bitrate|rx bitrate|signal"
现象:
- 空闲约 1 秒后,AP 对该客户端的发送速率掉到 MCS0;
- 持续流量下有时能爬回 MCS9(约 400Mbps),有时永远爬不回来;
- 客户端与 AP 的 ping:0% 丢包,但 RTT 抖动到 243ms(省电/缓冲特征)。
在"卡死"状态里,即使连续 36 秒满载下载,速率依然停在 7–10Mbps。
3. 根因一:固件 VoW ATF 让速率无法恢复
在 mt76 的 debugfs 里有一个固件特性开关:
cat /sys/kernel/debug/ieee80211/phy*/mt76/vow_atf # 默认 = 1
对照实验(同客户端、同一时段、只改这一个开关,均为"空闲 60 秒后连续 6 次下载"):
vow_atf |
6 次结果(Mbps) | 行为 |
|---|---|---|
| 1(固件默认) | 9.5 / 7.3 / 9.5 / 7.4 / 9.6 / 7.2 | 36 秒持续下载也完全不恢复 |
| 0(关闭) | 7.8 / 8.8 / 20 / 146 / 387 / 393 | 约 15–20 秒内自动爬回满速 |
| 0 + 客户端重新关联 | 369 / 374 / 376 / 390 / 409 / 397 | 直接满速,6/6 通过 |
修复(已持久化):关闭 vow_atf,并在开机与每分钟的 watchdog 中重放设置
(驱动重载/重启后不会丢):
echo 0 > /sys/kernel/debug/ieee80211/phy*/mt76/vow_atf
4. 根因二:40MHz 客户端接入 80MHz BSS
ATF 解决后,仍然存在"周期性塌陷"。继续对照发现:
| 客户端 | 带宽 | 稳定性 |
|---|---|---|
| 老款 Mac(Broadcom,VHT 3SS) | 40MHz | 反复塌陷 |
| 手机(HE 2SS) | 80MHz | 稳定 1200Mbps |
| 其他设备(VHT 1SS) | 80MHz | 稳定 |
把 5GHz 射频从 80MHz 切成 40MHz(htmode=HE40)后:
| 配置 | 空闲 60 秒后连续 6 次下载 |
|---|---|
| HE80(80MHz) | 7.4 / 7.3 / 9.3 / 9.5 / 9.6 / 9.6 Mbps(全塌陷) |
| HE40(40MHz) | 384 / 375 / 328 / 416 / 411 / 419 Mbps(6/6 稳定) |
结论:只协商 40MHz 的老客户端,在 80MHz 的 BSS 里会被固件的速率自适应/PPDU 处理拖垮。 把射频设成该客户端的原生带宽,问题消失。
5. 两种修复怎么选
| 目标 | 做法 | 代价 |
|---|---|---|
| 保 CSI 高精度(80MHz / 256 子载波) | 保持 HE80 |
40MHz 老客户端会变慢 |
| 保日常可用(客户端满速) | 切 HE40 |
CSI 带宽与子载波数减半 |
可以做一个 30 秒切换的脚本,按需切换:
sh /usr/bin/wifi-htmode HE80 # CSI 实验模式
sh /usr/bin/wifi-htmode HE40 # 日常模式
6. 你可以直接复用的判断流程
Wi-Fi 变慢
├─ 只有下行慢、上行正常? ──▶ 查 AP 侧 tx bitrate 是否被压到 MCS0
│ ├─ 空闲后塌陷且不恢复 ──▶ 关 vow_atf(并持久化)
│ └─ 仍周期性塌陷 ─────▶ 查客户端带宽 vs BSS 带宽是否不一致
├─ 上下行都慢 ──▶ 查干扰/信道/协商(本文不覆盖)
└─ 有线也慢 ────▶ 查 WAN 协商与宽带(本案例 WAN 始终 1000Mbps)
如果你的路由器也是 MT7986/MT7915 系列(OpenWrt + mt76),建议先跑一遍上面两张表, 五分钟就能判定你遇到的是哪一种。
参考与数据来源
本文的每条外部结论都标注来源与证据等级(分级标准);标注 E 级的是本项目可复现的实测数据。
- C 级 · 官方资料
openwrt/mt76 — mac80211 driver for MediaTek Wi-Fi chipsets
OpenWrt project / MediaTek
github.com/openwrt/mt76 · 核实: GitHub API 2026-10-11 (stars 890, last push 2026-10-08) · 本项目使用的开源 mt76 驱动上游;CSI 能力的补丁正是在这一代码库之上编排。 - 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,脚本在真机运行