游戏卡顿白皮书 › L2 客户端操作系统与设备
网卡省电/驱动问题 NIC power saving, driver bugs
原因 ID co-driver · 主责 外部·外部 · 配合 研发团队·客户端开发
在含图示和实验的完整版中打开此卡片 →
有线网卡、Wi-Fi 芯片在数据包之间进入省电状态时,重新唤醒需要时间。
起因 网络设备的省电功能开着,或驱动太旧 → 结果 唤醒(wake-up)延迟,偶尔设备重启 → 画面表现 不规律的延迟,偶尔卡住几秒
- 症状
- 一卡一卡, 卡住
- 因素
- 抖动, 丢包
- 谁会遇到
- 只有我
- 何时出现
- 挂机一段时间后, 偶尔随机
- 负责方
- 主责 外部·外部 · 配合 研发团队·客户端开发
- 研发团队要做的事
- Android 客户端在游戏中请求低延迟 Wi-Fi 模式(WIFI_MODE_FULL_LOW_LATENCY),关闭 Wi-Fi 省电。
- 外部要做的事
- 引导玩家更新网卡驱动,在设备管理器中关闭网络设备的省电功能;整个画面顿一下、声音滋滋作响时,引导玩家用 LatencyMon 找出导致问题的驱动。
- 监控图上
- 偶发随机尖峰 · DPC/ISR 时间、到路由器的 RTT
- 查看位置
- 用 Windows 性能记录器(WPR)录制,在 Windows 性能分析器(WPA)的 DPC/ISR 图中找出长时间运行的驱动(Module 列),并在设备管理器中检查网络适配器的电源管理(省电)设置
- 确认依据
- 顿一下的时刻,网络驱动的 DPC、ISR 持续几 ms,或关闭省电后不规律的延迟消失
- 排除依据
- DPC 很短、关闭省电后也一样,看“Wi-Fi 干扰/信号弱”或“Wi-Fi 后台扫描”
- 确认手段
- 需在玩家侧环境确认
- 深入了解
- 驱动处理中断时长时间占用 CPU(Windows 中称为 DPC 延迟),这段时间游戏线程也用不了这个核心。此时 CPU 使用率不高,整个画面却会顿一下,声音也滋滋作响。用 LatencyMon 之类的工具可以找出是哪个驱动,常见原因是 Wi-Fi、有线网卡驱动。
出处
- Introduction to NDIS Selective Suspend Microsoft
Windows 可以让空闲的网络适配器进入低功耗状态(选择性挂起) - Guidelines for Writing DPC Routines Microsoft
DPC 运行期间该核心上的所有线程都会停住,所以建议单次不超过 100 µs - Wi-Fi low-latency mode Android (Google)
Android 低延迟 Wi-Fi 模式下,框架会明确关闭 Wi-Fi 省电 - CPU Analysis Microsoft
WPA 的 DPC/ISR 图:DPC、ISR 每段连续运行的时间,以及该函数所在的模块(Module)
相关原因
同一层:L2 客户端操作系统与设备
其他层中同样导致“一卡一卡”的原因
查看含图示和实验的原卡片