首页 / 资讯中心 / 文章详情

AP驱动编程指南:Split MAC、hostapd与11ax调优排障

AP驱动编程指南:Split MAC、hostapd与11ax调优排障 ★ FEATURED ARTICLE
简介《高通WiFi驱动编程指南》面向从事无线接入点AP设备开发的嵌入式与网络驱动工程师针对高通WLAN驱动在安装配置、性能调优与故障排查中的理解门槛问题提供官方级技术参考。压缩包共1个文件为87.21MB的PDF文档即《Wireless LAN Driver Version 11.0 for Access Point Programming Guide》适合具备一定Linux与802.11基础的开发者按章节查阅。文档围绕驱动结构展开涉及Split MAC分层设计、8链操作、160/8080MHz带宽、Hy-Fi WLAN、LOWI定位接口、Spectral扫描、txrx_stats统计与诊断工具架构等模块并逐版本记录QCA_Networking_2017.SPF.7.0至8.0的新增特性与修订内容可帮助读者理清驱动与硬件、操作系统之间的职责边界掌握射频管理与数据传输的调试思路。目前已有2948人学习适合作为长期案头资料对照查阅。1. 一份两百多页的 AP 驱动编程指南能替你省掉多少试错WLAN 接入点调不起来的时候最缺的往往不是能力而是一份能逐条对照的 WiFi 驱动指导文档。手上这份 11.0 版的 AP 驱动编程指南正文两百多页从 Split MAC 的分层切法一路写到 txrx_stats 的字段口径横跨十几个软件版本分支的增量修订记录把每一次功能新增压进了目录里。它解决的不是“WiFi 怎么工作”这种科普问题而是“我手上这块板子为什么起了 AP 却扫不到、为什么 160 MHz 配好了却只跑 80、为什么固件 assert 之后整机再也拉不起来”。适合已经能改 hostapd.conf、看得懂 dmesg、但每次性能出问题只能靠猜的网通设备固件工程师和无线驱动移植人员。第一次通读大概要两天但真正值钱的是它把参数的语义边界划清楚了哪些配置只对直连模式生效哪些在卸载模式下改了就白改。2. 驱动分层与 Split MAC从手册目录反推一条数据包的完整路径2.1 手册的目录结构就是驱动的模块边界拿到这类文档我一般不看正文先把目录拉出来过一遍。这份文档的章节顺序几乎就是驱动的软件分层顺序先是组件化与初始化然后是 VAP 与 BSS 管理、加密与认证、射频与功率、信道选择与 ACS、聚合与速率控制、Spectral 与分类器最后是几章又长又琐碎的诊断、统计与调试工具。这个顺序不是随便排的。它对应的是数据从应用侧往下走的路径网络协议栈把帧交给驱动驱动做 VAP 查找和分类Classify再决定走硬件队列还是软件队列之后交给总线搬运到目标芯片上的固件固件做速率选择、聚合、MU 调度最终从射频发出去。顺着这个路径读很多看起来莫名其妙的章节就有位置了。比如“Direct DMA framework”讲的是数据包如何绕开 CPU 拷贝直接进环“Receive flow steering”讲的是收包中断怎么绑到具体 CPU 核“Buffer tracking”讲的是内存池耗尽的排查入口。这些如果按字母顺序读很容易当成补丁说明跳过去。我通常把目录切成三块做标记控制面VAP 增删、认证、信道切换、规管、数据面DMA、聚合、ATF、MU 调度、观测面统计、日志、抓包、core dump。控制面出问题表现为“起不来、连不上”数据面出问题表现为“能连但慢、丢包、重传高”观测面则是你定位前两类的唯一手段。三块分开看排障时就不会一条路走到黑。提示文档里的版本修订历史Revision history不要跳过。它把每个功能挂在哪个软件分支上等于给你一张“我这个固件版本到底支持什么”的对照表比翻正文猜测快得多。2.2 Split MAC 到底切在哪一刀host 侧的 UMAC 与 target 侧的固件Split MAC 是这份文档里最容易被误读的概念。它不是把 MAC 层“分成两半”这么笼统而是明确了一条职责界线。host 侧跑的是驱动里的 UMAC 部分负责管理面和安全面扫描、认证、关联状态机、BSS 与 VAP 的生命周期、密钥下发、规管域配置、信道切换协调。target 侧跑的是固件里的 LMAC 部分负责实时性要求高的部分速率自适应、AMPDU/AMSDU 聚合、块确认、MU-MIMO 与 OFDMA 的调度决策、功率控制、beacon 的实际发送。这条界线划在哪直接决定了你能在 host 侧调什么。举个具体的beacon 的发送间隔和内容配置在 host 侧但真正发出去的时序抖动由固件控制你改beacon_int100只保证平均值不保证每个 beacon 都卡在 100 TU 上如果客户端对 DTIM 敏感还得去看固件侧的 beacon 统计。反过来速率选择算法在固件里host 侧只能给上下界rate cap 结构给不了逐包策略。Split MAC 带来的另一个后果是调试链路变长。以前在纯软件 MAC 上一个 ACK 没收到你能直接在代码里打点现在 ACK 由固件处理host 侧只能通过统计计数间接观察。所以这份文档后面才会用整整几章讲统计和日志——观测面是被架构逼出来的必需品不是可选项。2.3 直连与卸载同一份文档里两套完全不同的参数语义文档里反复出现两个模式直连direct attachDA和卸载offloadOL。这两个模式在配置层的差别是新手最容易翻车的地方。直连模式下host CPU 上跑完整驱动数据包经过主机内存和总线进出射频中断、NAPI、CPU 亲和性都直接影响到吞吐。卸载模式下host 只做控制面数据面在目标侧闭环host 侧的 CPU 占用和中断分布对吞吐几乎没有影响但代价是你能观测到的细节变少了很多统计要靠固件上报。同一份文档里涉及参数的地方经常写“for DA and OL modes”分别给两套值。比如聚合配置直连模式下由 host 侧的队列深度参数控制卸载模式下则由固件的队列配置决定再比如 Tx chain mask 的修改直连模式可以不重连客户端生效卸载模式往往需要重新下发配置。我的做法是先确认模式再翻对应的那一节。确认方式不看文档看启动日志里的驱动初始化信息或者直接看设备树/板级配置里总线与固件的加载路径。这一步搞错后面所有参数都是空转——你调了半天 host 侧中断绑核结果发现是卸载模式数据面根本不过 host这种浪费时间的操作我见过不止一次。3. 把 AP 起起来hostapd 配置、多 VAP 创建与 cfg80211 接口落地3.1 起 AP 前先把三张表确认掉phy、regdomain、接口类型在写第一行 hostapd.conf 之前有三件事必须先确认否则后面所有报错都会指向错误的方向。第一是 phy 与射频的对应关系。多射频平台上phy0、phy1、phy2分别对应哪一路射频、支持哪些频段和频宽靠iw phy的输出确认。不要凭板子丝印猜尤其是在做过 chain mask 裁剪或者前端模组替换的样机上。第二是规管域。很多“AP 起来了但客户端扫不到”的问题根因是规管域没设对信道被驱动直接屏蔽了。iw reg get看当前生效的域iw reg set设置。注意有些平台把规管规则卸载到了固件侧host 侧第三是接口类型。接入点接口在 cfg80211 里的类型是__ap不是ap也不是managed。类型建错hostapd 启动时会报接口不支持 AP 模式。# 1) 看每路射频支持什么频段、信道、最大频宽、天线链数 iw phy | grep -E ^Wiphy|Band [0-9]|Frequencies|HT20|HT40|VHT80|HE80|HE160 # 2) 看当前规管域必要时设置以某地区码为例按实际合规要求填 iw reg get iw reg set XX # 3) 看现有接口和类型确认没有残留的 managed 接口占着 wlan0 iw dev # 4) 手工建一个 AP 类型接口cfg80211 路径 iw phy phy0 interface add wlan0 type __ap ip link set wlan0 up这几条命令的目的是把“环境对不对”和“配置对不对”两件事分开。iw phy的输出重点看三样支持的频宽档位有没有 HE160、可用信道列表里目标信道是不是带no IR标记、以及可用天线链数。规管域那一步要注意设完之后要重新iw phy看可用信道有没有刷新有些平台需要重新加载驱动才生效。最后建接口时如果iw dev里已经有同名接口interface add会直接返回-EEXIST先删再建。注意手工建接口和让 hostapd 自动建接口是两条路只能选一条。混用会导致第二次创建失败报错信息往往只写“接口已存在”看不到根因。3.2 hostapd 配置里真正影响 11ax 行为的那十几个参数hostapd.conf 参数有上百个但真正决定 11ax 落地行为的就那么十几个。下面这份是一个 5 GHz、80 MHz、开启 SAE 和多 BSS 过渡的基础配置能跑通之后再往里加东西。# ---- 基础接口 ---- interfacewlan0 drivernl80211 ctrl_interface/var/run/hostapd ssidlab-ap-5g # ---- 频段与频宽 ---- hw_modea channel36 ieee80211n1 ieee80211ac1 ieee80211ax1 # 80 MHz主信道 36中心信道索引 36 6 42 he_oper_chwidth1 he_oper_centr_freq_seg0_idx42 vht_oper_chwidth1 vht_oper_centr_freq_seg0_idx42 # 关掉 160 MHz避免与 DFS 信道和前端模组能力冲突 he_oper_centr_freq_seg1_idx0 # ---- 能力位 ---- vht_capab[HT40][SHORT-GI-80][SU-BEAMFORMEE] he_bss_color17 he_default_pe_duration0 he_twt_required0 # ---- 安全 ---- wpa2 wpa_key_mgmtSAE rsn_pairwiseCCMP ieee80211w2 sae_require_mfp1 # ---- 传输与客户端管理 ---- beacon_int100 dtim_period2 max_num_sta128 bss_transition1he_oper_chwidth的取值是 0/1/2/3分别对应 20/40/80/160 MHz和he_oper_centr_freq_seg0_idx必须成对出现且自洽。中心信道索引算错是最常见的配置错误36 到 48 这一段 80 MHz 的中心是 4252 到 64 是 58100 到 112 是 106。写错不会报错只会静默降到 40 MHz。he_bss_color在密集部署里很关键它决定 BSS Coloring 的空间复用激进程度取值 1 到 63同一物理区域内相邻 AP 要错开。ieee80211w2强制启用管理帧保护配合 SAE 是 WPA3 的标准组合但它会让一部分老客户端连不上——这是取舍不是 bug。max_num_sta我一般设得比实际需求略高因为它在 hostapd 层做限制而驱动层的 VAP 客户端表可能另有上限两边不一致时表现为“连到一半被踢”。3.3 多 VAP 与第三方射频给每个 BSSID 找准归宿多 SSID 场景下创建方式有两种让 hostapd 在主配置里用bss段自动创建或者手工用iw建好接口再挂上去。前者省事后者可控。# 方式 Ahostapd 自动创建推荐配置集中 # 在 hostapd.conf 末尾追加 # bsswlan0-1 # ssidlab-ap-guest # wpa2 # wpa_key_mgmtSAE # ...其余按需覆盖 # 方式 B手工建接口后挂载 iw phy phy0 interface add wlan0-1 type __ap ip link set wlan0-1 up hostapd -B /etc/hostapd/wlan0-1.conf # 查看所有 VAP 及其 BSSID iw dev | grep -E Interface|ssid|addr hostapd_cli -i wlan0 status方式 A 的好处是 hostapd 会在主接口启动后统一创建所有 BSS生命周期一致重启时不会出现“主 AP 起来了、副 AP 没起来”的半吊子状态。方式 B 适合副 AP 需要独立进程管理的场景比如访客网络要单独做限速和审计。这里有个容易忽略的点第三个射频如果有上跑特殊 VAP 模式时这个射频能不能同时做扫描、能不能做 monitor取决于固件对该 radio 的模式配置。文档里把这类情况单独列了一节因为它的限制和普通 AP VAP 不一样——普通 VAP 加扫描是常规操作特殊模式的 VAP 加扫描可能直接失败。链路上的验证用hostapd_cli比看日志快status看当前信道和频宽有没有降级all_sta看已关联客户端的协商速率和能力位。这两条输出能覆盖八成“配置写了但没生效”的问题。4. 射频与调度调参ATF 权重、MU-MIMO/OFDMA 与 Spectral 扫描的取值4.1 ATF 的权重不是带宽配额airtime 分配的三个参数ATFAirtime Fairness是最容易被误解的一组分。很多人以为给某个 SSID 设权重 3、另一个设 1就是 3:1 的带宽分配实际不是——它分配的是信道占用时间airtime而每个客户端在单位 airtime 内能传多少字节取决于它的速率、聚合效率和信道条件。所以会出现这种现象给一个慢客户端所在 SSID 高权重结果它占用了大量 airtime 却只传出很少的数据快客户端被饿死。这不是配置错误是 airtime 公平的固有特性。要按吞吐分配就得叠加按客户端的速率上限或者队列深度控制。# 以下为厂商私有 CLI 的常见三段式写法示意命令名以你固件里的 CLI 清单为准 # 全局使能 ATF apcli wlan0 atf enable # 按 SSID 分组并给权重权重是相对值不是百分比 apcli wlan0 atf group add lab-group strict apcli wlan0 atf group set lab-group weight 3 apcli wlan0 atf vap wlan0 group lab-group # 按接入类别细化语音/视频类给更高优先级 apcli wlan0 atf ac set lab-group vo weight 2 # 查看当前分配与统计 apcli wlan0 atf stats三组参数里group决定分组粒度weight决定组间相对比例ac决定组内按 WMM 接入类别再切一刀。关键是分组不要太碎——超过四五个组之后调度开销上升实测收益反而不明显。还有一类是“空闲客户端公平调度”意思是客户端闲着不传数据时不该占权重。这个特性对有大量休眠终端的场景有用但如果你的场景是持续小包比如 IoT 传感器开了反而会让活跃设备的分配抖动变大。我一般先在测试床上跑一遍atf stats看实际 airtime 分布和预期差多少再决定开不开。提示ATF 生效的前提是数据面经过调度器。卸载模式下如果数据面完全在目标侧闭环host 侧的 ATF 配置可能只对管理帧和特定路径生效务必在文档里确认该芯片组支持的 ATF 形态。4.2 MU-MIMO 与 OFDMA调度器在固件侧你能调的只有这几项11ax 的多用户特性听起来很美但落在工程上host 侧能控的开关很少大部分决策在固件的调度器里。能控的大致是三类使能开关总开关、下行/上行分别开关、分组管理MU group ID 的分配与维护、以及探测节奏sounding 间隔、beamforming 相关参数。真正决定“这一帧要不要做 MU”的是固件根据队列深度、客户端能力、信道质量综合判断的结果。# 使能 11ax 多用户特性示意参数名以固件 CLI 为准 apcli wlan0 he mu enable apcli wlan0 he ofdma enable apcli wlan0 he dl_mu_mimo enable apcli wlan0 he ul_mu_mimo enable # MU group 管理查看与手工指定 apcli wlan0 he mu_group show apcli wlan0 he mu_group set 1 sta 3c:xx:xx:xx:xx:01 apcli wlan0 he mu_group set 1 sta 3c:xx:xx:xx:xx:02 # sounding 间隔单位 TU过密会吃掉空口效率 apcli wlan0 bf sounding_interval 50我在实测里踩过一个坑开了 DL MU-MIMO 之后单客户端吞吐反而掉了 8% 左右。原因是 sounding 带来的额外空口开销在客户端数量少、且都是单流设备时收益覆盖不了成本。MU 类特性的收益门槛是“多客户端 多流 信道条件相近”达不到这个前提关掉比开着好。OFDMA 的门槛低一些因为它对客户端能力的要求是 HE 就行不要求多天线。但它对资源单元RU的划分敏感小包多、客户端多的场景收益明显大包持续传输的场景基本看不出差别。想看效果不要去测 iperf3 单流要测多客户端并发的小包场景。4.3 Spectral 扫描从触发到 FFT 样本落盘的完整链路Spectral 扫描是把射频的 FFT 样本周期性采出来用于信道质量分析、干扰识别和非 WiFi 干扰定位。它在工程上的价值不是“看频谱图好看”而是能回答“这个信道为什么 ACS 评分低”这种具体问题。链路是这样的驱动侧配置扫描参数带宽、采样周期、报告类型触发后固件按周期采 FFT 并上报host 侧驱动把样本写进环形缓冲区用户态工具从缓冲区读出来解析。# 1) 确认驱动在 debugfs 下暴露的目录名不同驱动不同换成你自己的 ls /sys/kernel/debug/ieee80211/phy0/ # 2) 先停扫描写入配置再启动顺序反了会丢配置 echo 0 /sys/kernel/debug/ieee80211/phy0/drv/spectral_scan_ctl # 3) 配置参数带宽档位、采样周期、FFT 类型 cat /sys/kernel/debug/ieee80211/phy0/drv/spectral_scan_config EOF bandwidth80 period10 fft_type3 EOF # 4) 启动扫描并抓取一段原始样本 echo 1 /sys/kernel/debug/ieee80211/phy0/drv/spectral_scan_ctl cat /sys/kernel/debug/ieee80211/phy0/drv/spectral_scan0 /tmp/fft.bin echo 0 /sys/kernel/debug/ieee80211/phy0/drv/spectral_scan_ctl三个参数里bandwidth决定采样的频宽覆盖80 MHz 采样能一次看到整个信道但每个子载波的功率分辨率会下降period是采样周期单位通常是毫秒级设太小会让 CPU 和总线负载上升设太大捕捉不到短时干扰fft_type决定 FFT 点数与上报格式代际不同的扫描好比文档里 Gen2 和 Gen3参数含义不一样混用会导致解析出的频点全错。样本落盘之后是二进制格式在文档里有字段定义一般是每个样本带一个头部时间戳、带宽、下变频频点加一段 FFT bin 数据。解析脚本要按文档的长度字段严格对齐一位偏移后面全是垃圾数据。我见过有人拿 Gen2 的解析器去解 Gen3 的样本折腾一晚上以为是硬件坏了。5. 五条踩坑记录从起不来 AP 到 160 MHz 掉速的排查路径5.1 起不来、扫不到、连不上三类开场故障怎么分层定位这三类故障的表现很像但根因层次完全不同先分层能省掉大量时间。现象hostapd 启动成功进程在iw dev能看到接口处于 AP 模式但手机搜不到 SSID。原因规管域未设置或被固件侧的规管规则覆盖目标信道被标记为不可用驱动静默地把 beacon 停了。有些平台的规管规则卸载到固件host 侧iw reg get显示正常但实际生效的是固件里那份。解决先用hostapd -dd前台跑看 beacon 配置阶段有没有告警再确认信道是否在iw phy的可用列表里且不带no IR最后检查固件侧的规管配置下发路径必要时改为 host 侧统一管理。定位这个问题的关键信号是接口状态正常但 beacon 计数为 0。现象能扫到 SSID关联阶段失败客户端日志显示认证超时。原因安全配置不匹配。典型是配了ieee80211w2强制管理帧保护但客户端只支持 WPA2-PSK或者wpa_key_mgmt只写了 SAE 而混合模式没开。解决过渡期用wpa_key_mgmtWPA-PSK SAE混合模式ieee80211w1可选而不是强制。同时确认rsn_pairwise和wpa_pairwise的一致性两边不一致时四次握手会在第三步断掉。现象关联成功DHCP 拿不到地址或者拿到了但 ping 不通网关。原因多 VAP 场景下桥接配置把 VAP 接口挂错了 bridge或者 VLAN 标记在驱动侧和交换机侧不一致。解决brctl show或ip link show master确认每个 VAP 挂在哪个桥上用tcpdump -i br0看 DHCP 请求有没有从 VAP 侧上来。这一层已经和数据面无关了别再回去改射频参数。5.2 性能类翻车吞吐掉一半与 160 MHz 起不来现象11ax 客户端协商到 1200 Mbps实测 iperf3 只有 300 多 Mbps且 CPU 单核跑满。原因直连模式下收包中断全部落在 CPU0NAPI 轮询和协议栈处理挤在一个核上。这不是射频问题是中断亲和性问题。解决查/proc/interrupts看该射频的中断分布用echo mask /proc/irq/n/smp_affinity把不同队列的中断分到不同核。同时确认 RSS接收侧分流或 flow steering 有没有开启未开启时单流流量天然只能用一个核。另一个常被忽略的点是 Tx chain mask 只开了部分链路——有些平台支持不重连客户端动态修改 chain mask改完立刻用iw dev wlan0 station dump看协商速率有没有变化。现象配置里写了he_oper_chwidth2160 MHz实际协商一直是 80 MHz。原因三种可能——目标信道落在 DFS 频段且没做 CAC160 MHz 需要的连续信道被规管或邻频占用切断前端模组或板级设计只支持 80 MHz驱动在初始化时把能力位裁掉了。解决先iw phy看该 phy 的 HE160 能力位在不在不在就是硬件或板级限制改配置没用在的话换到非 DFS 的连续信道段比如 36-64 整段验证一次能起说明是 DFS 或信道连续性问题还不行就看驱动初始化日志里的能力裁剪记录。5.3 稳定性类固件 assert、恢复失败与日志取证现象跑压测几小时后 AP 失联dmesg里有固件 assert 记录重启 hostapd 也起不来必须整机断电。原因固件崩溃后目标侧处于异常状态host 侧没有触发完整的重初始化流程只重启了用户态进程硬件状态没复位。解决确认驱动是否使能了固件恢复机制有些平台叫 recovery 或 self-recovery使能后 assert 会触发一次完整的 target 重初始化并从 host 侧重新下发配置。另外要打开 core dump 采集不然下次崩了还是只有一行 assert 码等于黑匣子没有数据。采集路径和触发方式在诊断章节里有专门一节通常是往 debugfs 里写一个触发值然后把生成的 dump 从目标侧读出来。现象恢复机制开了但 assert 之后配置丢了SSID 变了或者 VAP 少了。原因WLAN 配置没有做持久化重放。固件重初始化只恢复了驱动内存里的默认状态之前通过 CLI 或 debugfs 设的运行时参数不在重放列表里。解决把关键运行时配置收敛到启动脚本里由恢复事件触发重新执行能用配置文件表达的比如 hostapd 侧的参数就不要用运行时 CLI 设配置文件在重启时会自动重放。这也是我后来坚持“能静态配的绝不动态设”的原因。6. 用 txrx_stats 和 monitor 抓包做一次闭环验证口径对了才敢说调优调优最容易自欺欺人的地方是拿单点数据下结论。我的做法是固定一套三步验证per-peer 统计做基线、空中侧抓包交叉核对、最后落到一张固定的对比模板上。第一步建立基线。压测前先空载跑一遍统计记录每个客户端的协商速率、带宽、收发字节、重传次数、失败次数。这些字段在驱动的 per-peer 统计里都有输出格式各平台不同但字段语义接近。我把它们整理成一个解析脚本固定成一张对比模板每次改动前后各跑一次。import re, subprocess, sys # 采集一次 per-peer 统计命令名按你的固件 CLI 调整 raw subprocess.run([apcli, wlan0, stats, peer], capture_outputTrue, textTrue).stdout # 字段名按实际输出调整这里给出常见字段的解析骨架 PAT re.compile( rsta(?Psta[\da-f:]{17}).*? rtx_bytes(?Ptx_bytes\d).*? rrx_bytes(?Prx_bytes\d).*? rtx_retries(?Ptx_retries\d).*? rtx_failed(?Ptx_failed\d).*? rrate(?Prate\d) ) rows [] for line in raw.splitlines(): m PAT.search(line) if not m: continue d {k: (v if k sta else int(v)) for k, v in m.groupdict().items()} # 重传率重传帧数 / 总发送帧数此处用字节近似帧级统计更准 total d[tx_bytes] 1 d[retry_ratio] round(d[tx_retries] / total * 100, 3) rows.append(d) for r in sorted(rows, keylambda x: -x[tx_bytes]): print(f{r[sta]} tx{r[tx_bytes]:12} frate{r[rate]:5} retry{r[retry_ratio]:6}% ffailed{r[tx_failed]})这段脚本的关键不在解析在于把“重传率”和“失败数”拉进同一个视图。只看吞吐看不出问题吞吐掉了 30%可能是信道干扰重传率上升也可能是客户端降了带宽rate 字段下降还可能是队列阻塞failed 上升。三个字段一起看方向立刻清楚。第二步空中侧交叉验证。起一个 monitor VAP抓一段 beacon 和管理帧。# 建 monitor 接口并在目标信道上抓包 iw phy phy0 interface add mon0 type monitor ip link set mon0 up iw dev mon0 set channel 36 80MHz # 只抓管理帧看 beacon 间隔抖动和 CSA 动作 tcpdump -i mon0 -y IEEE802_11 -c 200 type mgt -w /tmp/mgmt.pcap抓包侧的判据是 beacon 间隔的稳定性。beacon_int100是平均值实际抖动超过 ±3 TU 就可能影响客户端省电状态机。用抓包时间戳算相邻 beacon 的差值比看驱动统计准。这一步还能验证 CSA信道切换通告有没有真正发出去——ACS 切换信道后客户端不跟随八成是 CSA 帧没发或者 count 值不合理。第三步把两次结果并排。我习惯记录四列改动项、per-peer 重传率、beacon 抖动、单客户端吞吐。四个数字里如果只有吞吐变了、重传率和抖动没动说明改动作用在 host 侧的数据路径上而非空口侧如果重传率同步上升说明改动把空口条件弄差了得回退。这套流程走下来调参就从“试试看”变成了“有口径的对比”。血泪经验是我曾经为了 8% 的吞吐提升改了一组聚合参数单客户端测了三次都涨结果多客户端并发一压直接崩到原来的一半——因为那组参数放大了队头阻塞。从那以后我每次改完参数都强制走一遍“单客户端 多客户端 混合小包”这三段压测一段不过就不算完。希望这套口径能帮到你少走几段我走过的弯路。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站