ゲームラグ白書 › L9 サーバーのゲームプロセス
シングルスレッドのエリア過負荷(ホットスポット) Single-threaded hot zone
原因ID sp-hotzone · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ
図と実験のあるメインページでこのカードを開く →
エリアごとに1つのスレッドが担当する構造では、1か所に人が集中すると、そのコア1つだけが100%になります。
なぜ 1つのエリア(チャンネル)を1つのスレッドが担当 → すると 人が1か所に集中するとそのコアだけが飽和し、ほかのコアには余裕がある → 画面では そのエリアだけラグが出て、ほかのエリアは問題ない
- 症状
- スローモーション, 入力遅延
- 要因
- ストール
- 誰に起きるか
- 特定の場所・チャンネル
- いつ
- 人が集中したとき
- 担当
- 主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ
- ゲーム開発チームの対応
- チャンネルの分散、エリア内部の並列化、人数の上限。
- インフラチームの対応
- コアごとのCPU使用率を監視・アラートに追加(サーバー全体の平均ではコア1つの飽和が埋もれる)。
- 数値の目安
- 16コアのサーバーでコア1つが100%でも、サーバー全体のCPU使用率は約6%に見えます。コアごとの使用率を確認しないと見つけられません。
- グラフでは
- 人数・負荷に連動して上昇 · コアごとのCPU使用率、スレッドごとのCPU
- 確認箇所
- mpstat -P ALL 1でコアごとの使用率を、pidstat -t 1でゲームプロセスのスレッドごとのCPUを確認し、最も忙しいスレッドが担当するゾーンの人数と比較
- 該当する場合
- サーバー全体のCPUは低いのに、スレッド1つ(コア1つ)だけが100%近くに張り付いており、その時刻にそのスレッドが担当するゾーンに人が集中している
- 該当しない場合
- 複数のコアが均等に高ければ、サーバー全体の過負荷。1つのコアの%soft(受信処理)だけが高ければ、NIC割り込みの単一コア集中の側
- 確認手段
- インフラのツールで確認(ゲームコード不要)
- もっと詳しく
- ほかのエリアが問題ないのは、エリアごとにティックを個別に回している場合の話です。複数のエリアのスレッドが毎ティック互いを待ってから一緒に次のティックへ進む構造なら、最も忙しいエリア1つがサーバー全体のティックを遅らせます。
- 実際の事例
- CCP Games 2014: EVE OnlineのHED-GP大規模艦隊戦でのサーバー過負荷
出典
- Time Dilation – How’s That Going? CCP Games
EVE OnlineのTime Dilationはノード単位のため、同じノードに載っている遠くの星系まで遅くなる、大規模な戦闘は星系を4つだけ載せた強化ノードで処理 - mpstat(1) — Linux manual page sysstat
プロセッサーごとの使用率と全体の平均を分けて表示(-P ALL)、%softはソフトウェア割り込みの処理に使った時間の割合 - pidstat(1) — Linux manual page sysstat
-tで、プロセスに属するスレッドごとの統計(CPU使用率など)も表示
あわせて読みたい原因
同じ層:L9 サーバーのゲームプロセス
同じ症状(スローモーション)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る