한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

ゲームラグ白書 › L9 サーバーのゲームプロセス

アップデートによるトラフィックパターンの変化 Patch changes traffic pattern

原因ID sp-patch-traffic · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ, インフラチーム・ネットワークインフラ

図と実験のあるメインページでこのカードを開く →

新しいコンテンツ・エフェクト・同期項目がパケットのサイズと頻度を増やすと、問題なく動いていたサーバーがアップデート後からMTU・帯域幅・パケット数の上限に引っかかります。

なぜ アップデートで新しいスキルエフェクト・同期項目・アイテム情報が増え、パケットが大きくなるか頻繁になる → すると 大きなパケットはMTUを超えてフラグメント化され、増えた分は帯域幅・クラウドのPPS上限・送信バッファに引っかかる → 画面では アップデート直後から、混雑した場所でワープ・スキル不発・入力遅延。インフラは何も変えていないのにパケットロスが増える

症状
ワープ, 不発・ロールバック, 入力遅延
要因
パケットロス, 遅延
誰に起きるか
サーバー全体, 特定の場所・チャンネル, 特定の地域・ISP
いつ
人が集中したとき, 夜のピーク時間帯, 常に
担当
主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ, インフラチーム・ネットワークインフラ
ゲーム開発チームの対応
パケットを1,200バイト以下に自前で分割、新しい同期項目は変更分だけを送り、距離・重要度に応じて頻度を下げる、デプロイ前にテストサーバーでユーザーあたりの毎秒パケット数・バイト数と最大パケットサイズを前のビルドと比較、トラフィックのメトリクスにビルドバージョンを記録。
インフラチームの対応
サーバー機器・OS:デプロイ時刻をグラフに表示し、ユーザーあたりの毎秒パケット数・バイト数と平均パケットサイズをデプロイ前後で比較、インスタンスの上限超過カウンターにアラート、必要ならより大きなインスタンス。ネットワーク:ファイアウォール・ロードバランサー・DDoS対策機器の処理上限と、フラグメントを遮断していないかを点検。
数値の目安
UDPパケットは1,200バイト以下なら安全で、インターネットの経路MTUは通常1,500バイト、トンネルを通るとさらに小さくなります(GREトンネルなら1,476バイト)。経路MTUを超えたパケットはフラグメント化されるか破棄され、フラグメント化されたパケットはフラグメントを1つ失うだけで全体が失われます。ユーザーあたりの毎秒パケット数が20%増えればサーバー全体でも20%増えるため、上限近くで使っていたインスタンスはすぐにあふれます。
グラフでは
ある時点から階段状に上昇 · ユーザーあたりの毎秒パケット数・バイト数、平均パケットサイズ
確認箇所
デプロイ時刻の前後で、サーバーのNICの毎秒パケット数・バイト数(sar -n DEVのrxpck/s・txpck/s・rxkB/s・txkB/s、EC2ではNetworkPacketsOut・NetworkOut)を同時接続数で割って比較。平均パケットサイズはバイト数 ÷ パケット数、サイズの分布はパケットキャプチャをWiresharkのPacket Lengths統計で確認
該当する場合
デプロイ直後からユーザーあたりのパケット数・バイト数や平均パケットサイズが一段上がったまま推移し、同じ時刻からサーバーが作ったフラグメント数(sar -n IPのfragcrt/s)やインスタンスの上限超過カウンター(AWS ENAのpps_allowance_exceeded・bw_out_allowance_exceeded)が増える
該当しない場合
トラフィックパターンはデプロイ前後で同じなのに遅延・パケットロスだけが増えたなら、同じ時刻のインフラ変更(設定、経路、機器、OS・カーネルのアップデート)を確認
確認手段
インフラのツールで確認(ゲームコード不要)
もっと詳しく
「アップデート前は問題なかった」という報告が来たら、インフラの変更と合わせて最初に確認すべきゲーム側の原因です。パッチノートにネットワークの変更がなくても、新しいエフェクトや同期項目が1つ増えるだけで、混雑した場所では数百人分に掛け算されます。増えたトラフィックが実際に引っかかる箇所は、「UDPパケットのIPフラグメンテーション」「クラウドのPPS上限超過」「NIC帯域幅の飽和」「カーネルのソケットバッファ不足」「中間機器の処理上限超過(ファイアウォール・IPS・DDoS対策)」の各項目で扱います。この項目は、その上限に達する出発点がゲームのアップデートだった場合なので、上限を引き上げる前に、アップデートで増えたトラフィックをまず減らします。同じ時刻にOS・カーネルもアップデートしていたなら、ユーザーあたりのトラフィックが変わったかどうかで「OS・カーネル・ドライバー・ファームウェアのアップデート後の性能変化」と切り分けます。

出典

  1. RFC 8085: UDP Usage Guidelines IETF
    UDPアプリケーションは経路MTUを超えるデータグラムを送るべきではない(SHOULD NOT)、フラグメントを1つ失うとフラグメント化されたパケット全体が失われ、一部のNAT・ファイアウォールはフラグメントをすべて破棄
  2. RFC 8899: Packetization Layer Path MTU Discovery for Datagram Transports IETF
    UDPなどのデータグラム通信の基本となる安全なサイズ(BASE_PLPMTU)として1,200バイトを推奨
  3. Maximum transmission unit and maximum segment size Cloudflare
    インターネットの経路MTUは1,500、GREトンネルを通ると1,476
  4. Monitor network performance for ENA settings on your EC2 instance AWS
    pps_allowance_exceeded・bw_out_allowance_exceeded:インスタンスのPPS・送信帯域幅の上限を超えて、キューにたまったか破棄されたパケットの数
  5. sar(1) — Linux manual page sysstat
    sar -n DEVのrxpck/s・txpck/s(毎秒のパケット数)・rxkB/s・txkB/s(毎秒のKB)、sar -n IPのfragcrt/s(毎秒作成したIPフラグメント数、ipFragCreates)
  6. CloudWatch metrics that are available for your instances AWS
    NetworkPacketsOut(インスタンスがすべてのネットワークインターフェースから送信したパケット数)・NetworkOut(送信したバイト数)
  7. 8.7. Packet Lengths Wireshark
    キャプチャしたパケットを長さの区間ごとに分け、件数・平均・最小・最大を表示

あわせて読みたい原因

同じ層:L9 サーバーのゲームプロセス

同じ症状(ワープ)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る