从QCA9880谈起,聊聊ath10k和hostapd的一些坑

1. 前言

前段时间给mini主机买了块3天线的网卡,QCA9880自带收发功放,开AP的效果比普通网卡好很多。于是对机箱做了些硬件改造,装上了三根天线。大概是下面这个样子:

但是在折腾AP的时候,还是遇到了一些问题。

2. 使用 5G 频段建立 AP

首先,我们需要安装非自由的firmware来使这块网卡正确工作


因为监管要求,各地区可用的wifi频段是不同的,5G频段的限制比2.4G严格许多。参考:Dynamic Frequency Selection (DFS)

大多数网卡都在芯片(EEPROM)里面存储了DFS设置,开源社区也为了做个遵纪守法的好青年,驱动程序也选择尊重DFS配置。 但是代码终究是人写的,我们可以patch内核,来实现忽略DFS配置的目的。

下面是一份细致的操作步骤,不需要重新编译整个内核,注释里提供了相应的说明:

3. hostapd 的参数配置

作为一款3x3的网卡,一堆牛逼的特性如果不开启的话,开AP的效果也是很糟糕的。在网络上搜索了半天,并各种参数搭配测试之后,这里给出一个QCA9880可用的hostapd配置文件。更多技术细节建议参考example文件里面的注释:zless /usr/share/doc/hostapd/examples/hostapd.conf.gz

4. ath10k 驱动的 TCP 速率控制问题

在上面的步骤都完成之后,成功开启了5G频段的wifi。 通过iperf3进行网速测试,结果如下:

(测试机为笔记本电脑自带的两天线Intel 8265)

这个问题困扰了我很久,只有AP向外发送TCP数据的时候,速度慢得不可理喻。然而将AP用作NAT网关,Client和“外网”设备的TCP连接速度双向均能达到较高的速度。仔细查看 iperf3 的输出,发现AP向外发送TCP数据包的时候,TCP窗口(window)非常小,怀疑是TCP拥塞控制算法的问题。但是换成BBR,或者使用iperf3指定windows大小都无功而返。

在不知道过了多少天之后,再次捡起了这个问题,在 Google 的帮助下找到了以下三资料:

Poor performance of Atheros QCA6174 802.11ac
mac80211: Adjust TSQ pacing shift
Throughput regression with 'tcp: refine TSO autosizing'

很显然,问题出在mac80211部分的代码上,而这个patch第一次出现在4.16-rc5的代码中,因此只需要简单地升级一下内核就完事了。(我使用的是debian stretch, 安装了backports里面4.18版本的内核后确实解决了这个问题。 至于上面第三个链接,作者在最后给出了另一种解决办法,我并没有仔细查阅并测试,不做更多讨论)

5. 参考资料

  1. Poor performance of Atheros QCA6174 802.11ac
  2. mac80211: Adjust TSQ pacing shift
  3. hostap can't set 5ghz channel
  4. How to Build your Own Wireless Router (Part 3)
  5. Dynamic Frequency Selection (DFS)
  6. Throughput regression with 'tcp: refine TSO autosizing'

《从QCA9880谈起,聊聊ath10k和hostapd的一些坑》有4个想法

  1. 博主你好,你买的这个QCA9880 标准大小代功放的卡, 当ap信号怎么样呢?

    1. 我就跑着玩玩的,性能测试ok了,我就扔一边吃灰了,至于信号覆盖,没有测。。。(这个我觉得主要靠天线,因为QCA9880毕竟有功放

  2. 你好,请问一下,这个网卡在lede/openrt里面测试过吗,可不可以用。

发表评论

电子邮件地址不会被公开。 必填项已用*标注