This document is about: QUANTUM 3
SWITCH TO

プロファイリング

はじめに

プロファイリングは、コード間の相対的なパフォーマンスを調べ、高負荷な場所を割り出すことができる優れたツールです。しかし、特にUnityのプロファイリングツールは、そのオーバヘッドがパフォーマンスに影響を与えるため、絶対的なパフォーマンス計測には役立ちません。

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

  1. シミュレーション時間やレンダリング時間を測定する場合、Quantumのリリースビルドと、Quantum Graph ProfilerのみをアタッチしたUnityのIL2CPPビルドを使用してください。
  2. DeterministicConfig.ChecksumIntervalは0か高い値を設定してください。頻繁なチェックサムはパフォーマンスに影響を与えます。
  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");
  // 何かを実行する
  HostProfiler.End();

  HostProfiler.Start("Bar2");
  // 何かを実行する
  HostProfiler.End();
}
HostProfiler.End();

Quantumは、UnityのTimeline Profilerのデータも提供します。プロファイリングデータは、Debug設定時のみ提供されます。

Quantum Task Profiler

Quantum Task Profilerは、独自にスタンドアロンで動作するグラフィカルなパフォーマンスプロファイラーで、UnityのTimeline Profilerに似ています。デバッグ/リリースのどちらのQuantum DLLでも実行できます。

SessionRunner.Arguments.GameFlagsQuantumGameFlags.EnableTaskProfilerから有効にすることができます。

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

Unity Profilerと同様に、リモート端末上で実行されているアプリケーションは、同じローカルネットワーク内でUDP経由でUnityエディターに接続します。

Quantum Task Profiler
Quantum Task Profiler

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

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

Profiling Graphs
QuantumEditorSettingsのRemote Profilerのトグル

Quantum Graph Profiler

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

インストールするには、QuantumGraphPrefabProfilersプレハブをシーンにドラッグします。

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

このランタイムのグラフは、ゲーム全体のパフォーマンスや、様々なネットワーク条件下のQuantumシミュレーションの追跡に役立ちます。グラフの値はUnityの更新レートに基づき、単一フレームの累積時間/累積カウントなどを表します。

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

  • Engine Delta Time:Unityのフレーム間のTime.unscaledDeltaTimeになります。Engine Delta Timeが目標FPSを反映しない場合は、QualitySettings.vSyncCount = 0を設定して修正できます。
  • Frame Time:Unityの内部処理とレンダリングを含むすべてのスクリプトロジックの時間です。WaitForEndOfFrameの時間は除外されます。
  • User Scripts TimeFixedUpdate() + Update() + LateUpdate()の実行にかかった時間です。
  • Render TimeLateUpdate()が実行されてからレンダリングが終了するまでの時間です。
  • Simulation TimeQuantumRunner.Default.Game.Session.Stats.UpdateTimeと同じ時間です。
  • Predicted Frames:Unityの1フレーム内にシミュレーションされたQuantum予測フレーム数で、QuantumRunner.Default.Game.Session.PredictedFramesと同じです。
  • Verified Frames:Unityの1フレーム内にシミュレーションされたQuantum確定フレーム数です。
  • Network Activity:サーバーから最後にデータを受信してからの経過時間です。
  • Ping:ネットワークピアのラウンドトリップタイム(RTT)です。
  • Markers:最大8つのブール値を、マーカーを使用して追跡できます。各マーカーはユニークな色で表され、デフォルトでは赤 = サーバーによって置換された入力オレンジ = チェックサムが計算されたです。
Profiling Graphs
リアルタイムプロファイリンググラフ

マーカーについての備考

可読性を向上させるため、マーカーグラフは倍速で実行されます。これは、プロファイラープレハブのSamplesプロパティから調整できます。

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

  1. MarkersProfiler profiler = MarkersProfiler.Get(GAMEOBJECT_NAME)から、名前でインスタンスを取得する
  2. profiler.SetMarker(INDEX)を呼び出す

その他のツール

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

  • 目標FPS(Application.targetFrameRate)を変更する
  • ネットワーク条件(ラグ・ジッター・パケットロス)をシミュレートする

これらは、異なるレンダリング速度や劣悪なネットワークを簡単にシミュレートするのに役立ちます。設定はすぐにグラフ(予測フレーム数・シミュレーション時間など)に反映されます。

注意: パケットロスをシミュレートする際は設定値に注意してください。ネットワーク上のロスのシミュレートには1~3%を、ローカルネットワーク上のロス(例:3つの壁で隔たれた先のルーターへの劣悪な接続)には高い値を使用してください。

Back to top