您尚未登录。

楼主 # 2022-01-28 20:27:15

mengxp
会员
注册时间: 2021-10-07
已发帖子: 68
积分: 152

螃蟹wifi AP模式压测工具/Bug复现工具源代码

工具源代码下载 udpflood.zip

Realtek Wifi module AP 功能压力测试工具
mengxp work & test 2022/01

Bug 描述
当满足如下 3 个条件时,若有大流量从 AP 发往 iPhone
有概率导致内核线程 ksoftirqd & RTWHALXT 占满 CPU,并有可能导致系统停止响应
1.realtek wifi 工作在 AP 模式
2.iPhone 作为 STA 接入
3.iPhone wifi 进入 SLEEP 状态(POWERSAVE)

Buf 复现步骤
1.realtek 板端建立 wifi AP,并建立 DHCP 服务器(可选,可使用静态IP)
2.iphone 连接该 AP(如果没有 DHCP 需要手动配置 IP)
3.(!重要!)iphone 进入到 设置-蓝牙 界面 (由于 2.4G 天线复用冲突,蓝牙 scan 会导致 Wifi 频繁进入 SLEEP)
4.realtek 板端运行该工具持续向 iPhone 发送 UDP 报文,间隔可修改
  例: udpflood 192.168.20.100 1234 5
  其中 192.168.20.100 是 iphone 的 IP,1234是端口号,可任意输入,5 是间隔 5 毫秒发一次报文
5.观察板端是否有卡住的情况。
  或可将 udpflood 置于后台运行,然后使用命令 top 观察 CPU 占用率

Bug 分析
当 STA 进入 SLEEP 模式时,realtek 不能正确处理发包队列,导致发包线程占满 CPU

目前我在 rtl8723ds 上测试,bug 复现率 100%,我使用的 wifi 驱动版本有
1.R328 SDK中的 v5.6.5_31752.20181221_COEX20181130-2e2e
2.R329 SDK中的 v5.10.1-26-ga10bc0b8b.20200617_COEX20200103-3535
3.rtl8723DS_WiFi_linux_v5.13.5-29-g0dbf6713f.20210604_COEX20210106-3b3b.tar.gz
上述3个版本全部存在该问题。

bug 日志摘抄
sending 1440 bytes every 5 ms via 2 threads
thread bind to cpu 0
thread bind to cpu 1
send iter 100
send iter 200
send iter 300
[  314.114167] INFO: rcu_preempt self-detected stall on CPU
[  314.120151]  1-...: (3000 ticks this GP) idle=551/140000000000001/0 softirq=1858/1858 fqs=0
[  314.129626]   (t=60000 jiffies g=280 c=279 q=1)
[  314.134720] rcu_preempt kthread starved for 60000 jiffies! g280 c279 f0x0 RCU_GP_WAIT_FQS(3) ->state=0x1
[  397.830251] INFO: rcu_preempt detected stalls on CPUs/tasks:
[  397.838564]  0-...: (1 GPs behind) idle=7db/140000000000000/0 softirq=1396/1397 fqs=23
[  397.838577]  (detected by 1, t=60002 jiffies, g=281, c=280, q=3)
[  397.838623] rcu_preempt kthread starved for 2006 jiffies! g281 c280 f0x0 RCU_GP_WAIT_FQS(3) ->state=0x1

Mem: 22104K used, 97400K free, 16K shrd, 3668K buff, 6316K cached
CPU:  0.0% usr 95.2% sys  0.0% nic  0.0% idle  0.0% io  0.0% irq  4.7% sirq
Load average: 8.85 6.44 2.98 5/63 899
  PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
   15     2 root     RW       0  0.0   1 50.0 [ksoftirqd/1]
  861     2 root     RW       0  0.0   0 49.9 [RTWHALXT]


欢迎大家在螃蟹其他型号芯片上测试并反馈测试结果
工具源代码下载 udpflood.zip

最近编辑记录 mengxp (2022-01-28 20:30:52)

离线

#1 2022-01-28 20:49:11

拉轰的脚踏车
会员
注册时间: 2020-03-20
已发帖子: 288
积分: 222

Re: 螃蟹wifi AP模式压测工具/Bug复现工具源代码

没有苹果,安卓可以测试吗?

离线

楼主 #2 2022-01-29 09:44:57

mengxp
会员
注册时间: 2021-10-07
已发帖子: 68
积分: 152

Re: 螃蟹wifi AP模式压测工具/Bug复现工具源代码

拉轰的脚踏车 说:

没有苹果,安卓可以测试吗?

可以试一下啊,这个bug的本质就是当STA处于SLEEP时。螃蟹的AP逻辑有点问题。
安卓的wifi应该也有SLEEP功能的,只是触发的机制可能和苹果不同。

离线

楼主 #3 2022-02-28 20:17:07

mengxp
会员
注册时间: 2021-10-07
已发帖子: 68
积分: 152

Re: 螃蟹wifi AP模式压测工具/Bug复现工具源代码

AP6212 做同样的测试完全没有问题,
所以说螃蟹是垃圾,几年了一个bug修不掉。

Mem: 25016K used, 95676K free, 24K shrd, 0K buff, 15072K cached
CPU:  0.0% usr 10.0% sys  0.0% nic 89.8% idle  0.0% io  0.0% irq  0.1% sirq
Load average: 1.23 1.24 0.89 1/69 937
  PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
  868     2 root     SW       0  0.0   1  8.7 [dhd_dpc]
  934   829 root     S    17864 14.7   1  1.2 ./udpflood 192.168.20.100 1234 5
  937   829 root     R     2668  2.2   1  0.1 top
  894     1 root     S     3164  2.6   1  0.0 hostapd -B /etc/hostapd.conf
    1     0 root     S     2668  2.2   0  0.0 init
  829     1 root     S     2668  2.2   1  0.0 -/bin/sh
  820     1 root     S     2668  2.2   1  0.0 syslogd -O /tmp/syslog.txt
  855     1 root     S     2500  2.0   0  0.0 dbus-daemon --system
  857     1 root     S     2160  1.7   0  0.0 hcid -x -m 8192 -f /usr/etc/hcid.c
  869     2 root     SW       0  0.0   1  0.0 [dhd_rxf]
   10     2 root     SW       0  0.0   0  0.0 [migration/0]
  283     2 root     SW       0  0.0   1  0.0 [kworker/1:1]
  758     2 root     SW       0  0.0   1  0.0 [kworker/u4:4]
    7     2 root     SW       0  0.0   1  0.0 [rcu_preempt]
  599     2 root     SW       0  0.0   0  0.0 [kworker/0:1]
  149     2 root     SW       0  0.0   1  0.0 [kworker/u4:2]
    3     2 root     SW       0  0.0   0  0.0 [ksoftirqd/0]
  806     2 root     DW       0  0.0   0  0.0 [usb-hardware-sc]
    2     0 root     SW       0  0.0   0  0.0 [kthreadd]
send iter 9800ot     SW       0  0.0   0  0.0 [kworker/0:0]
send iter 9900
send iter 10000
send iter 10100
send iter 10200
send iter 10300
send iter 10400
send iter 10500
send iter 10600
send iter 10700
send iter 10800
send iter 10900

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn