高通SDX55平台:Modem Loopback测试指导
1. 背景
5G速率非常高,与之相连的Host设备要发挥5G的全部性能,必须正确的配置上位机,如CPU负载均衡,软硬件加速方案等。但是现阶段5G的部署不是很完善,实网测速最高到1Gbps左右,这时候可能高速率问题甚至无法发现。客户端部署仪表进行测速成本太高。因此有了Loopback测试的解决方案。
Loopback测试不需要插SIM卡,不需要实网,也不需要仪器。非常方便用于验证客户的软硬件环境是否OK。因此建议在做实网或者仪器测试之前,都先做loopback测试,确保软硬件环境ok。
SDX55支持rmnet/qmi网卡的loopback。即在设置了loopback模式之后,所有通过上位机rmnet网卡发送给SDX55的数据,X55都可以回环给上位机。同时为了降低上载时上位机的负载,X55支持自行一回环倍数,举个例子,假设我们定义的是8倍回环,当在上位机中发送10M的数据给X55,X55回环80M的数据给上位机。
- 注意:这时候不用尝试ping网管192.168.48.172。回环模式网关不会正确的响应ping包,而是将数据原样返回。
2. 开启X55Loopback功能
2.1 连接QPST EFS Explorer
在正确安装SDX55模块的USB驱动及高通QPST工具后插入X55模块。打开QPST Configuration,QPST会自动识别我们的设备:
在QPST中点击Start Clients ->EFS Explorer:
打开EFS Explorer工具,工具会自动识别插入的X55模块,弹出的Phone Selection中直接点击OK,如下图所示:
在正确识别X55模块后点击OK,稍等片刻后会出现详细的配置列表,如下图所示
2.2 创建loopback_config.txt文件
在/nv/item_files/modem/data/3gpp/ps/路径下创建文件:loopback_config.txt。
loopback_config.txt文件内容如下所示:
LOOPBACK_ENABLED:1;
L2_LOOPBACK_ENABLED:0;
SYS MODE:9;
REP_FACTOR:5;
文件中的REP_FACTOR是回环倍数,可自定义回环倍数,建议最大不超过14,否则会导致数据不通的现象出现。
在/nv/item_files/modem/data/3gpp/ps/目录下,右侧的窗口中点击右键,选中New->File:
在弹出的窗口中点击Browse,选择上面创建的loopback_config.txt,点击OK后loopback_config.txt就被上传到/nv/item_files/modem/data/3gpp/ps/目录下。操作过程如下图所示:
完成后如下图所示:
检查无误后重启模块生效。
3. Windows下测试回环功能
3.1 测试环境准备
Windows下测试需要准备单模块一个,USB3.0数据线一根,iperf2客户端,DU Meter网速监测工具。Windows下拨号工具QMItestPro。
使用QMItestPro进行拨号:
- 通过at+gtusbmode=31,将模块设置为高通口
- 打开QMITestPro
- 选择WDS
- 选择网卡
- 选择SIM卡为WDS_DEFAULT_SUBS
- 点击connect
- 检查拨号结果,为QMI_RESAULT_SUCCESS即为拨号成功
3.2 执行测试
在windows上打开两个cmd窗口,并进入到iperf2所在的位置。
- 一端做server,执行iperf.exe -s -i 1 -u -b 1000m
- 一端做client, 执行iperf.exe -c 192.168.48.172 -i 1 -u -b 1000m -l 9000
- 在DU meter中查看监测结果
3.3 测试结果
可以看到测试结果,USB下行速率稳定在2.7Gbps左右。CPU占用峰值93%,平均值43%。
测试硬件环境:联想K43c-80,CPU:i5-8250U,内存8G,win10 64bit操作系统。
4. Linux下测试回环功能
4.1 测试环境准备
Linux下测试需要准备单模块一个,USB3.0数据线一根,iperf2客户端,nload网速监测工具。Linux下拨号工具QMI_Dial 。
模块开机后,模组需要支持rmnet模式。执行QMI_Dial ,拨号后QMI_Dial 的日志输出部分如下:
4.2 执行测试
打开两个terminal,分别做server和client
- 一端做server,执行
iperf -s -i 1 -u -b 1000m
- 一端做client, 执行
iperf -c 192.168.48.172 -i 1 -u -b 1000m -l 9000
- 使用nload -u H中查看监测结果
4.3 测试结果
可以看到测试结果,USB下行速率稳定在3.99Gbps左右。
测试硬件环境:联想P300,CPU:i7-4790,内存16G,ubuntu14.04 64bit操作系统。
5. Android 下测试回环功能
5.1 设置X55模块USB端口模式
将模块的USB端口切换为RMnet模式。
5.2 配置网卡IP
使用如下命令停止Android ril 的运行:stop ril-daemon, 如下图所示:
下发如下命令配置usb0 网卡的IP:
echo -ne "at\$qcrmcall=1,1,1\r" > /dev/ttyUSB2
ifconfig usb0 up
busybox udhcpc -i usb0
ip addr add 192.168.48.171/24 dev usb0
如下图所示:
5.3 使用Iperf测速
下发如下命令启动Iperf server:
iperf -s -i 1 -u -b 1000m
下发如下命令启动Iperf client
iperf -c 192.168.48.172 -i 1 -u -b 1000m -t 3600
- 注意:由于我们给usb0 网卡分配的IP地址是192.168.48.171,那X55模块的IP就是192.168.48.172,所以我们Iperf client 设置的server ip就是192.168.48.172.
我们将统计网卡速度的脚本speedmonitor.sh push 到rk3399中,由于这个脚本要用到awk,而我们的RK3399中没有,可以将下面的awk push到/system/bin下。
测速截图如图所示:
这里可以看到usb0 下载的速度是上传的5倍。符合我们在loopback_config.txt中定义的5倍。
6. Iperf 使用详解
Iperf 是一个常用的测速工具,作用是 Client 向 Server 灌包, 比如要测试模块的下行数据,就是仪器做 Client,客户设备做 Server。
Iperf –h 可以看到帮助文档,这里就我们测试的时候需要用到的参数,再次详细介绍下:
表1 服务器端专用选项的含义
命令行参数 | 含义描述 |
---|---|
-s | 以server模式启动,eg:iperf -s |
-D | 以服务方式运行iperf,eg:iperf -s -D |
-U | 运行在单线程UDP模式 |
-s | 以server模式启动,eg:iperf -s |
表2 客户端专用选项的含义
命令行参数 | 含义描述 |
---|---|
-c | 在客户端模式下运行 |
-d | 同时进行双向测试 |
-n | 指定传输的字节数 |
-r | 单独做双向测试 |
-t | 传输时间(秒)(默认为10秒) |
-B | 绑定src的addr来发起通信 |
-F | 输入要从文件传输的数据 |
-I | 输入要从stdin传输的数据 |
-L | 端口以接收双向测试返回 |
-P | 要运行的并行客户端线程数 |
-T | 多播的生存时间(默认为1) |
-Z | 设置TCP拥塞控制算法(仅适用于Linux) |
表3 客户端与服务器端公用选项的含义
命令行参数 | 含义描述 |
---|---|
-f | 报表格式:Kbits, Mbits, KBytes, MBytes |
-p | 指定监听/连接的服务器端口 |
-i | 周期带宽报告之间的秒数 |
-b | 以比特/秒或每秒数据包计算的发送带宽 |
-e | 使用增强的报告提供更多tcp/udp和流量信息 |
-l | 要读或写的缓冲区长度(默认为8 KB) |
-m | 打印TCP最大段大小(MTU - TCP/IP报头) |
-o | 将报告或错误消息输出到此指定文件 |
-u | 使用UDP协议 |
-w | 指定TCP窗口大小(套接字缓冲区大小) |
-z | 请求实时调度器 |
-B | 绑定到<主机>,一个接口或多播地址 |
-C | 兼容旧版本 |
-M | 设置TCP最大段大小(MTU - 40字节) |
-N | 设置TCP无延迟,禁用Nagle算法 |
-V | 将域名设置为IPv6 |
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2m8wqr7qn7s4g