ゲームラグ白書 › L6 サーバーのネットワークカード
GRO/LROの結合待ちによる遅延 GRO/LRO batching
原因ID nic-offload · 主担当 インフラチーム・サーバーインフラ
図と実験のあるメインページでこのカードを開く →
複数のパケットを1つにまとめてCPUの負担を減らす機能です。設定によっては、小さなゲームのパケットが、一緒にまとめる次のパケットを少し待つことがあります。
なぜ NIC・カーネルが到着したパケットをまとめて処理 → すると ハードウェアによる結合(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 サーバーのネットワークカード
同じ症状(入力遅延)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る