This document is about: QUANTUM 3
SWITCH TO

プロファイリング

はじめに

プロファイリングは、コードの部分間の相対的なパフォーマンスを見つけ、開発者がホットスポットを詳細に調査できる優れたツールです。しかし、プロファイリングツール、特にUnityのものはオーバーヘッドによりパフォーマンスに影響を与えるため、絶対的なパフォーマンス測定を見つけるのには役立ちません。

推奨されるパフォーマンス分析の手順は次のとおりです:

  1. Quantumのリリースビルド(quantumソリューション)とIL2CPP Unityビルドを使用して、シミュレーション時間、レンダリング時間などを測定し、全体的な数値を得るためにQuantum Graph Profilerを付加します。
  2. DeterministicConfig.ChecksumInterval にゼロまたは高い値を設定することを確認します。頻繁なチェックサムはパフォーマンスに影響を与えます。
  3. その後、どこを見ればいいのか(シミュレーションか、レンダリングかなど)大まかなアイデアを持って、Unity ProfilerまたはQuantum Task Profilerを使用してプロファイリングセッションを行います。

Quantumのデバッグビルドは、リリースビルドよりも最大5倍遅くなる可能性があります。また、デバッグ+monoビルドはリリース+il2cppビルドよりも最大10倍遅くなる可能性があります。

Unity Profiler

Quantumのパフォーマンス統計はUnity Profilerに統合されており、QuantumRunnerスクリプト内でデフォルトで開始されます。

C#

Quantum.Profiling.HostProfiler.Init(..)

Quantumシミュレーションコード内でこのUnity Profilerパターンを使ってカスタムセクションを追加できます:

C#

HostProfiler.Start("Foo");
{
  HostProfiler.Start("Bar1");
  // do work
  HostProfiler.End();

  HostProfiler.Start("Bar2");
  // do work
  HostProfiler.End();
}
HostProfiler.End();

最新のQuantum SDKバージョン(2.1)では、QuantumはUnityのTimelineプロファイラー向けのデータも提供します。Quantumは、Debug設定のときのみプロファイリングデータを提供します。

Quantumタスクプロファイラー

Quantumタスクプロファイラーは、UnityのTimelineプロファイラーに類似したカスタムのスタンドアロングラフィカルパフォーマンスプロファイラーです。デバッグまたはリリース版のQuantum DLLが選択された状態で実行できます。

これを有効にするには、SessionRunner.Arguments.GameFlagsQuantumGameFlags.EnableTaskProfiler を設定します。

  • QuantumRunnerLocalDebug ゲームオブジェクトの IsTaskProfilerEnabled を切り替え、ローカルデバッグモードでタスクプロファイラーを有効にします。
  • または、QuantumMenuのオンラインモードを使用して QuantumMenuUIController ゲームオブジェクト内の QuantumMenuConnectArgs.EnableTaskProfiler を切り替えます。
  • ゲームを開始します。
  • Tools > Quantum > Window > Task Profiler を開きます。
  • Record ボタンを切り替えます。

Unity Profilerと同様に、リモートデバイス上で実行されているアプリは、同じローカルネットワーク内でUDPを介してUnityエディターに接続します。

Quantum Task Profiler
Quantum Task Profiler

リモートプロファイリング

Quantumタスクプロファイラーにリモートで接続し、エディターと同じネットワーク上で実行されているビルドを監視することが可能です(UDPポート30000)。この機能を有効にするには、単に QuantumEditorSettings アセットの下部にある Remote Profiler チェックボックスを切り替えてください。その後、タスクプロファイラービューを閉じて再度開いてください。

Profiling Graphs
QuantumEditorSettingsでのリモートプロファイラーのトグル

Quantumグラフプロファイラー

Quantumグラフプロファイラーは、ゲームシーンに統合してゲームのパフォーマンスやネットワーク状態のグラフを表示するためのツールです。このプロファイラーはQuantum SDKの一部で、Assets\Photon\Quantum\Runtime\GraphProfilers にあります。

インストール方法: プレハブ QuantumGraphPrefabProfilers をシーンにドラッグします。

リアルタイムプロファイリング

これらのランタイムグラフは、様々なネットワーク条件下でのゲームの全体的なパフォーマンスとQuantumシミュレーションの追跡に役立ちます。グラフとその値はUnityの更新レートに基づいており、各値は単一のUnityフレームにおける累積時間/カウントなどを示します。

プロファイラーは以下のグラフを提供します:

  • Engine Delta Time: Unityフレーム間の Time.unscaledDeltaTime と等しい。Engine Delta Time が目標FPSを反映しないことがあるため、これを修正するには QualitySettings.vSyncCount = 0 を設定します。
  • Frame Time: Unity内部処理やレンダリングを含むすべてのスクリプトロジック。フレームの終了を待つ時間は除外されます。
  • User Scripts Time: FixedUpdate() + Update() + LateUpdate() を実行するのにかかる時間。
  • Render Time: 最後の LateUpdate() からレンダリングの終了までの時間。
  • Simulation Time: QuantumRunner.Default.Game.Session.Stats.UpdateTime と等しい。
  • Predicted Frames: Unityフレーム内でシミュレーションされた予測Quantumフレームの数 (QuantumRunner.Default.Game.Session.PredictedFrames に等しい)。
  • Verified Frames: Unityフレーム内でシミュレーションされた検証されたQuantumフレームの数。
  • Network Activity: サーバーからの最後のデータ送信からの時間。
  • Ping: ネットワークピアの往復時間 (RTT)。
  • Markers: 最大8つのカスタムブール値をマーカーを使用して追跡可能。各マーカーはユニークな色で表されます。デフォルトでは Red = サーバーによって入力が置き換えられた および Orange = チェックサム計算済み です。
Profiling Graphs
リアルタイムプロファイリンググラフ

マーカーに関する注意点

可読性を向上させるために、マーカーグラフの更新速度は他のグラフの2倍です。これは、プロファイラーのプレハブ内の Samples プロパティで調整できます。

複数の MarkersProfiler インスタンスがサポートされています:

  1. 名前 MarkersProfiler でインスタンスを取得します: MarkersProfiler profiler = MarkersProfiler.Get(GAMEOBJECT_NAME);
  2. profiler.SetMarker(INDEX) を呼び出します。

その他のツール

リアルタイムプロファイリングツールには、以下のような(より基本的な)ツールも含まれています:

  • 目標FPSを変更する (Application.targetFrameRate)。
  • ネットワーク条件(遅延、ジッター、損失)をシミュレートする。

これらは、異なるレンダリング速度や悪いネットワークを迅速にシミュレートするのに役立ちます。影響はすぐにグラフ(予測フレーム、シミュレーション時間など)に表示されます。

注意: ネットワーク損失をシミュレートする際は、値に注意して設定してください。ネットワークの損失をシミュレートするためには1〜3%を使用し、ローカルの損失(例えば、3つの壁の後ろにあるルーターへの悪い接続)をシミュレートするにはより高い値を使用してください。

Back to top