游戏卡顿白皮书 › L3 家庭网络
缓冲区膨胀(路由器队列) Bufferbloat
原因 ID hn-bufferbloat · 主责 外部·外部 · 配合 研发团队·客户端开发
在含图示和实验的完整版中打开此卡片 →
家里有人上传视频或下载大文件时,路由器队列里会堆积几百 ms 的数据包,游戏数据包也得排在后面等。
起因 家人上传视频、云备份,自己直播推流,大文件下载,把线路占满 → 结果 路由器或光猫把装不下的数据包堆进大队列 → 画面表现 游戏数据包也在队列后面等待,ping 暴涨到几百 ms
- 症状
- 操作延迟, 快进, 瞬移
- 因素
- 延迟, 抖动
- 谁会遇到
- 同一家庭, 只有我
- 何时出现
- 偶尔随机, 晚高峰
- 负责方
- 主责 外部·外部 · 配合 研发团队·客户端开发
- 研发团队要做的事
- ping 突然升到几百 ms 时在画面上显示网络状态(提示同一线路上可能有大流量传输)。
- 外部要做的事
- 引导玩家使用支持 SQM(fq_codel、CAKE)或 QoS 的路由器,SQM 速率设为线路速率的 90~95%(这样队列才会出现在路由器内部,才有效果),限制上传速度。
- 数值参考
- 上行 10 Mbps 的线路配 1 MB 缓冲区,队列可长达 800 ms。
- 监控图上
- 随人数/负载上升 · RTT、线路上行/下行用量
- 查看位置
- 开着 ping 用测速把线路占满,或使用测量负载下延迟的网页测试(见 Bufferbloat.net 的说明)。与路由器界面上的上行、下行用量一起看
- 确认依据
- 上行或下行占满线路期间 ping 升到几百 ms,传输结束后恢复(负载下延迟超过 50 ms 就值得怀疑)。开启 SQM 后消失
- 排除依据
- 线路空闲时 ping 仍冲高,看“Wi-Fi 干扰/信号弱”或“线路质量差”
- 确认手段
- 需在玩家侧环境确认
- 深入了解
- 上行方向尤其容易堵,因为有线电视宽带(Cable)、移动网络的上行往往比下行窄得多。光纤带宽充足的家庭,Wi-Fi 段会成为瓶颈,同样的情况会发生在路由器的无线队列里。游戏数据包很小,几乎不占带宽,但同样要在队列里等。只有上行堵塞时,变慢的只是自己的输入,别人的动作正常。手机上,同一部手机的照片备份、应用更新会塞满手机基带和基站的队列,引起同样的问题。
出处
- Setting up SQM for CeroWrt 3.10 Bufferbloat.net
把 SQM 速率降到实测速度的 95%(按宣传速率则为 85%),把瓶颈从运营商设备移到路由器内部,才有效果 - SQM (Smart Queue Management) OpenWrt
下行、上行速率填实测值的 90%,队列算法推荐 cake(CPU 较弱时用 fq_codel) - Ending the Anomaly: Achieving Low Latency and Airtime Fairness in WiFi (USENIX ATC 2017) USENIX
Wi-Fi 段占满时,路由器无线队列会产生几百 ms 延迟;修好无线队列后,负载下延迟可降到约 1/10 - Tests for Bufferbloat Bufferbloat.net
开着 ping 用测速占满线路,ping 上升即为缓冲区膨胀;负载下延迟超过 50 ms(或低于 B 级)时建议采取对策
相关原因
同一层:L3 家庭网络
其他层中同样导致“操作延迟”的原因
查看含图示和实验的原卡片