游戏卡顿白皮书 › L6 服务器网卡
中断合并过度 Interrupt coalescing
原因 ID nic-coalesce · 主责 运维团队·系统运维
在含图示和实验的完整版中打开此卡片 →
为减轻 CPU 负担,网卡把数据包攒一批再一次性通知 CPU,攒包花了多少时间,就会晚多少。
起因 网卡攒够一定时间或一定数量后再发中断 → 结果 攒包期间数据包在等待 → 画面表现 延迟略有增加。通常很小,设置过度时可达 ms 级
- 症状
- 操作延迟
- 因素
- 延迟
- 谁会遇到
- 全服
- 何时出现
- 一直
- 负责方
- 主责 运维团队·系统运维
- 运维团队要做的事
- 使用自适应合并,按游戏服务器的需要调整数值(ethtool -C)。
- 数值参考
- 通常为几十到几百 µs。对游戏来说一般可以忽略,设置过度时会增大到 ms 级。
- 监控图上
- 一直偏高 · 同一数据中心内的往返时间
- 查看位置
- 用 ethtool -c 查看当前合并设置(adaptive-rx、rx-usecs、rx-frames),比较修改设置前后与同一数据中心其他服务器之间的 ping 往返时间
- 确认依据
- rx-usecs 设得很大(几百 µs 以上),调小后同一数据中心内的往返时间相应缩短
- 排除依据
- 调小后往返时间不变,则不是这个原因
- 确认手段
- 运维工具即可确认(无需游戏代码)
出处
- Linux Driver for Intel(R) Ethernet Network Connection (e1000e) Linux kernel
默认采用自适应中断调节,每秒 4,000~20,000 次(间隔 50~250 µs);减少中断能节省 CPU,但延迟会增加 - Linux Base Driver for Intel(R) Ethernet Network Connection (e1000) Linux kernel
RxIntDelay 可以把接收中断以 1.024 µs 为单位最多推迟 65,535 个单位(约 67 ms),值越大接收延迟越大 - ethtool(8) — Linux manual page ethtool
ethtool -C 的 adaptive-rx、rx-usecs、rx-frames 设置
相关原因
同一层:L6 服务器网卡
其他层中同样导致“操作延迟”的原因
查看含图示和实验的原卡片