ゲームラグ白書 › TCP再送の根本原因
物理エラー(不良ケーブル・光モジュール・コネクター) Bit errors: bad cable, optics, dirty fiber
原因ID rt-physical · 主担当 インフラチーム・ネットワークインフラ · 副担当 インフラチーム・サーバーインフラ, 外部・外部
図と実験のあるメインページでこのカードを開く →
ケーブルの損傷、ほこりの付いた光コネクター、寿命を迎えた光モジュールはビットエラーを起こし、壊れたパケットは機器が黙って破棄します。
なぜ ケーブル・光モジュール・コネクターの不良でビットが反転 → すると チェックサム(CRC)が合わないパケットを機器が破棄 → 画面では その経路を通る人だけが継続的に一瞬止まっては早送り、時間帯とは無関係
- 症状
- フリーズ, 早送り, ワープ
- 要因
- パケットロス
- 誰に起きるか
- 特定の場所・チャンネル, 同じ家
- いつ
- 常に
- 担当
- 主担当 インフラチーム・ネットワークインフラ · 副担当 インフラチーム・サーバーインフラ, 外部・外部
- インフラチームの対応
- CRCエラーは壊れた方向の受信側で計上されるため、両端とも確認。ネットワーク:機器ポートのCRC・入力エラーカウンターを確認、光信号の強度を点検(スイッチの光モジュール情報)、光コネクターの清掃、ケーブル・光モジュールの交換。サーバー機器・OS:サーバーのethtool -Sのrx_crc_errors(ドライバーによって名前が少し違う)を確認、光信号の強度を点検(ethtool -m)、サーバー側のケーブル・NICの交換。
- 外部の対応
- ユーザーの家の区間ならLANケーブル・ルーターの交換を案内、通信事業者の回線区間なら通信事業者に回線の点検を依頼。
- 数値の目安
- パケットロスが0.1%でも、ゲームのパケット1,000個に1回です。その経路を通る人が数十人いれば、数秒ごとに誰かがカクッと止まります。ビットエラーは大きなパケットほど起きやすくなります。
- グラフでは
- 一部だけ高い · ポートごとのCRCエラー数、サーバー・ポートごとの再送率
- 確認箇所
- リンク両端のCRCカウンターを確認。サーバーはethtool -Sのrx_crc_errorsやip -s -s linkのcrc、スイッチはポートのFCSエラー(dot3StatsFCSErrors)・入力エラー(ifInErrors)。光リンクならethtool -mとスイッチの光モジュール情報で受信光強度を確認
- 該当する場合
- 1つのポートのCRCエラーが時間帯に関係なく継続的に増え、そのポートを通るサーバー・接続だけ再送率が高い。同じ種類の他のリンクより受信光強度が低い
- 該当しない場合
- CRCは変わらないのに出力破棄だけが増えるならキューあふれ(「送信バーストによる浅いバッファのあふれ」「ボトルネックでのキューあふれ」)。片側のレイトコリジョンともう片側のCRCがそろって増えるなら「デュプレックスの不一致」
- 確認手段
- インフラのツールで確認(ゲームコード不要)
出典
- Interface statistics Linux kernel
rx_crc_errorsは受信側のインターフェースがCRCエラーとして数えたパケット数、ip -s -s linkとethtool -Sで確認 - ethtool(8) — Linux manual page ethtool
-SでNIC・ドライバーごとの統計、-mで光モジュール(SFP+・QSFP)のEEPROMと光診断情報を確認 - RFC 3635: Definitions of Managed Objects for the Ethernet-like Interface Types IETF
スイッチポートのFCSエラー(dot3StatsFCSErrors)、このエラーは入力エラー(ifInErrors)に合算
あわせて読みたい原因
同じ層:TCP再送の根本原因
同じ症状(フリーズ)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る