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

ゲームラグ白書 › L11 ディスク

サーバーの遅延ロード Lazy loading on the server

原因ID dk-lazy-load · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ

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

サーバーがダンジョン・マップのデータを初めて要求されたときにディスクから読むと、そのティックの間、全員が止まります。

なぜ 誰かが初めてダンジョン・エリアに入場 → すると サーバーがゲームスレッドでデータをディスクから読む → 画面では そのサーバーの全員が一瞬フリーズ

症状
フリーズ
要因
ストール
誰に起きるか
特定の場所・チャンネル, サーバー全体
いつ
移動中・マップ切り替え時
担当
主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ
ゲーム開発チームの対応
サーバー起動時の事前ロード、非同期ロード。
インフラチームの対応
スナップショットから作ったばかりのサーバーは、サービス投入前にディスクのウォームアップ(全ブロックを一度読む)を行うか、高速スナップショット復元機能を使う。
グラフでは
不定期なスパイク · サーバーのティック時間、ディスク読み込み
確認箇所
止まった時刻をゲームサーバーログのダンジョン・エリアへの初回入場の記録と突き合わせ、その瞬間のゲームサーバーのディスク読み込み(pidstat -dのkB_rd/s)と、perf trace --durationで長くかかったread・open呼び出しを確認。新しく立ち上がったクラウドサーバーなら、EBSのVolumeAvgReadLatencyを古いサーバーと比較
該当する場合
初めて入場した瞬間だけ止まり、同じ場所に2回目に入るときは止まらない。止まっている間、ゲームスレッドがファイルの読み込みで待っている
該当しない場合
すでにロード済みのエリアでも同じように止まるなら、ティックバジェット超過・GCなど別の原因
確認手段
ゲームサーバー・クライアントのログ・メトリクスが必要
もっと詳しく
クラウドでスナップショット(ディスクのコピー)から作ったばかりのサーバーは、初めて読むブロックごとにリモートストレージから取得するため、普段よりはるかに遅くなります。オートスケーリングで新しく立ち上がったサーバーでだけ最初の入場が際立って長くかかるなら、これを疑います。

出典

  1. Initialize Amazon EBS volumes AWS
    スナップショットから作ったボリュームは、ブロックをS3から取得している間は遅延が増えて性能が落ちる、dd・fioで全ブロックを読んで事前に初期化
  2. Amazon EBS fast snapshot restore AWS
    高速スナップショット復元は、作成時から初期化済みのボリュームを提供し、初回アクセスの遅延をなくす
  3. pidstat(1) — Linux manual page sysstat
    -d:プロセスごとのkB_rd/s(1秒あたりのディスク読み込み量)
  4. perf-trace(1) — Linux manual page perf
    --durationで指定したmsより長くかかったシステムコールだけを表示
  5. Amazon CloudWatch metrics for Amazon EBS AWS
    VolumeAvgReadLatency:1分平均の読み込み遅延(Nitroインスタンス)

あわせて読みたい原因

同じ層:L11 ディスク

同じ症状(フリーズ)を起こすほかの層の原因

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