在广州网易工作的时候,由于广州更多的事业部焦距于手游上,所以对于无线网络的要求是很高的,尤其是一些内测或者准备发行的游戏,由于策划、测试、开发等都需要测试游戏在市面上流行的手机里适配性的问题,而在这个过程中,就经常出现各类问题,需要我们团队去协作或支持。
而在这个过程中,就遇到了这样的一个问题。
现象:用户反馈终端使用卡顿,而此时周边并无大批量设备进行跑测或者更新下载的情况。
初步排查:AP关联终端只有20不到,AP流量饱和,但也未满载,用户反馈的终端信号强度正常,ICMP测试也未有高延迟或者丢包情况,周边环境确认同频干扰之类的情况也不存在,也未关联到较远的AP上面去,但测试同AP下的其他终端,发现部分终端确实ICMP丢包或者存在延迟高的情况,但咨询了相关用户,却未见反馈。
现场测试:现场使用确实存在偶发性卡顿,但是在局域网测试,却未有丢包。
带着这个疑惑,我去遍历了一下这些终端的共性和异常,发现丢包的终端,基本都是稍微旧型号的手机,以安卓为主,而IOS由于无线一直被吐槽,研究测试的时候,压根就没把他们统计在内。
搜索了一下安卓手机关于无线或者延迟方面的资料,终于找到了关于WLAN低延迟模式的相关信息。
WLAN 低延迟模式
Android 10 以后,扩展了 WLAN Lock API,以允许容易受到延迟时间影响的应用将 WLAN 配置为低延迟模式。当满足以下所有条件时,低延迟模式便会启动:
- 已启用 WLAN,设备可以访问互联网。
- 应用已创建并获得 Wi-Fi 锁,并且正在前台运行。
- 屏幕处于开启状态。
WLAN 已启用且设备可访问互联网:这是基础条件,只有设备成功连接到 Wi-Fi 网络且具备网络访问能力,低延迟模式才有生效的前提。
应用已创建并获得 Wi-Fi 锁,且正在前台运行:应用需要通过 WLAN Lock API 创建并获取 Wi-Fi 锁,以确保其对网络连接的控制权,且必须处于前台运行状态,这样系统才能优先为其分配网络资源,保证低延迟需求。
屏幕处于开启状态:屏幕开启时,设备通常处于活跃使用状态,系统会优先保障应用的网络性能,关闭屏幕可能会触发设备的节能策略,从而影响网络延迟。
工作原理
停用节电模式:在 IEEE 802.11 标准中,节电模式(低电耗模式状态)会使设备在一段时间内关闭部分收发器组件以减少耗电,这期间无线接口处于短时间休眠状态,从而导致数据传输延迟增加。而在低延迟模式下,Android 框架中的 WifiLockManager 会明确停用节电模式,WLAN 系统保持唤醒状态,能够随时以最低延迟发送或接收数据包。
优化驱动和固件参数:设备制造商需要更新 WLAN 驱动程序和供应商 HAL,开发者还可以优化驱动程序层和固件层中的扫描和漫游参数,以进一步降低 Wi-Fi 延迟,不过确切的优化项目因实现而异。
其他相关事项
(1)设备兼容性:不是所有的设备都支持低延迟模式,设备的 Wi-Fi 芯片和天线需要支持该功能,且设备制造商需更新相关驱动程序和 HAL。
(2)功耗影响:由于低延迟模式停用了节电模式,可能会对设备的电池寿命和功耗产生一定影响,导致设备电量消耗加快。
(3)如果没有引入 WLAN 低延迟模式,锁屏后可能会出现延迟增高或者丢包的情况。
(4)许多手机系统为了节省电量,在锁屏后会采取一些节能措施,这可能会影响 WLAN 的连接状态。例如,部分后台数据访问,或者卸载 WiFi 驱动,导致 WLAN 进入休眠状态。当有数据需要传输时,就需要重新加载驱动或建立连接,这会导致延迟增高,甚至可能出现丢包的情况。