游戏卡顿白皮书 › L6 服务器网卡
GRO/LRO 合并等待延迟 GRO/LRO batching
原因 ID nic-offload · 主责 运维团队·系统运维
在含图示和实验的完整版中打开此卡片 →
这是把多个数据包合并成一个、以减轻 CPU 负担的功能。视配置而定,较小的游戏数据包可能要短暂等待下一个可合并的包。
起因 网卡和内核把到达的数据包合并处理 → 结果 开启了硬件合并(LRO)或合并等待时间设置时,会为等下一个包而短暂停留 → 画面表现 延迟略有增加(一般不超过几十 µs)
- 症状
- 操作延迟
- 因素
- 延迟
- 谁会遇到
- 全服
- 何时出现
- 一直
- 负责方
- 主责 运维团队·系统运维
- 运维团队要做的事
- 按游戏流量调整(关闭 LRO,检查合并等待时间设置);影响通常较小,排在其他原因之后再查。
- 监控图上
- 一直偏高 · 同一数据中心内的往返时间
- 查看位置
- 用 ethtool -k 查看 lro、gro 状态,查看设备 sysfs 配置中的 gro_flush_timeout 值,并比较修改前后同一数据中心内小包的往返时间
- 确认依据
- LRO 已开启或 gro_flush_timeout 大于 0,关闭或设为 0 后小包的往返时间缩短
- 排除依据
- 修改后差异在几 µs 以内,则不是这个原因
- 确认手段
- 运维工具即可确认(无需游戏代码)
出处
- NAPI Linux kernel
gro_flush_timeout 设得较大时能合并处理,代价是负载低时会产生延迟 - Linux Base Driver for the Intel(R) Ethernet 10 Gigabit PCI Express Adapters (ixgbe) Linux kernel
GRO 把接收流量合并成大块以节省 CPU,是由 LRO 改进而来的功能 - ethtool(8) — Linux manual page ethtool
ethtool -K 的 gro、lro on|off 设置
相关原因
同一层:L6 服务器网卡
其他层中同样导致“操作延迟”的原因
查看含图示和实验的原卡片