ゲームラグ白書 › L9 サーバーのゲームプロセス
ティックバジェット超過 Tick overrun
原因ID sp-tick-overrun · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ
図と実験のあるメインページでこのカードを開く →
1ティックの処理がバジェットを超えるとサーバーのティック周期が延び、そのエリア全体がゆっくり進んだりカクついたりします。
なぜ 1ティック(例:50ms)で処理する仕事がバジェットを超える → すると 1秒に20回計算するはずのゲーム状態を8回しか計算できない → 画面では そのエリア全体がスローモーション(サーバーの設計によってはカクつき)、スキルの反応が遅い
- 症状
- スローモーション, 入力遅延, カクつき
- 要因
- ストール
- 誰に起きるか
- 特定の場所・チャンネル, サーバー全体
- いつ
- 人が集中したとき, 夜のピーク時間帯
- 担当
- 主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ
- ゲーム開発チームの対応
- 重い計算を減らす、ティックを複数のスレッドに分割、人数の分散(チャンネル)、ティックの処理時間をメトリクスとして記録。
- インフラチームの対応
- ティック時間とコアごとのCPU使用率を監視・アラートに追加、シングルコア性能(クロック)の高いCPU・インスタンスを検討。
- 数値の目安
- 20ティックのサーバーのバジェットは50ms、30ティックは33ms、60ティックは16.7msです。急な集中に備えて、普段はバジェットの半分程度しか使わないよう余裕を持たせるほうが安全です。
- グラフでは
- 人数・負荷に連動して上昇 · サーバーのティック時間、ゾーン・チャンネルごとの人数、ゲームスレッドのCPU
- 確認箇所
- サーバーが記録するティック処理時間(p99)・ティック超過回数を、ゾーン・チャンネルごとの人数と同じグラフに並べて確認。ティックのメトリクスがなければ、pidstat -t 1でゲームスレッド1本のCPU使用率
- 該当する場合
- 人数が集中した時刻にティック時間がバジェット(20ティックなら50ms)を超え、その間ゲームスレッドのCPU使用率が100%近くに張り付いている
- 該当しない場合
- ティックが超過しているのにゲームスレッドのCPUが低ければ、待ち側の原因(GC停止、ロック、同期呼び出し)。bccのrunqlatでランキューの待ち時間が長ければ、スレッドにCPUが割り当てられていないので、CPU不足・スレッド過多の側
- 確認手段
- ゲームサーバー・クライアントのログ・メトリクスが必要
- もっと詳しく
- ティックが遅れたときの見え方は、サーバーの設計によって異なります。ティックごとにゲーム状態を決まった時間(例:50ms)だけ進めるサーバーでは、ゲーム内の時間そのものが遅くなってスローモーションになります。実際に経過した時間の分だけ一度に動かすサーバーでは、ゲームの進行速度は保たれますが、パケットがまばらになり一度に大きく動くため、カクつき・ワープに見えます。どちらの場合も入力の反応は遅れます。ゲームスレッド1つがサーバー全体を担当していればサーバー全体が、エリアごとにスレッドを分けていればそのエリアが遅くなります。EVE Onlineのように、大規模な戦闘でわざとゲーム内の時間を最大10倍まで遅くして(Time Dilation)計算を追いつかせるゲームもあります。
- 実際の事例
- CCP Games 2014: EVE OnlineのHED-GP大規模艦隊戦でのサーバー過負荷
出典
- VALORANT's 128-Tick Servers Riot Games
128ティックのサーバーは1フレームを7.8125ms以内に終える必要がある、サーバーのフレーム時間をサブシステムごとに計測し、バジェットを配分して管理 - HED-GP Technical Retrospective: What a HED-ache CCP Games
EVE Onlineは過負荷時にTime Dilationでゲーム内の時間を遅くし、下限は10%(10倍遅い)、普段のノードのCPUは80%未満 - Handling variation in time Unity
固定間隔のシミュレーションが遅れると、追いつくためのステップをまとめて実行し、上限を超えた時間は捨てるため、ゲーム内の時間が実際より遅く流れる - pidstat(1) — Linux manual page sysstat
-tで、プロセスに属するスレッドごとの統計(CPU使用率など)も表示 - Demonstrations of runqlat, the Linux eBPF/bcc version IO Visor
スケジューラーのランキュー待ち時間(タスクにCPUが割り当てられるまで待った時間)をヒストグラムで表示
あわせて読みたい原因
同じ層:L9 サーバーのゲームプロセス
同じ症状(スローモーション)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る