This document is about: QUANTUM 2
SWITCH TO

プロファイリング

イントロ

一般的にプロファイリングは、コードの部分間の相対的なパフォーマンスを見つけ出し、開発者がホットスポットを掘り下げることを可能にする良いツールです。しかし、プロファイリングツール、特にUnityのものは、そのオーバーヘッドがパフォーマンスに影響を与えるため、絶対的なパフォーマンス測定値を見つけるには役に立ちません。

推奨される性能解析の手順:

  1. Quantum Release ビルド (quantum solution) 、 IL2CPP Unity ビルド、 添付のQuantum Graph Profiler を使用してシミュレーション時間、レンダリング時間などを測定し、経時的な総合値を出します。
  2. チェックサムを頻繁に行うとパフォーマンスに影響するため、DeterministicConfig.ChecksumIntervalにはゼロか大きな値を設定するようにしてください。
  3. 次に、シミュレーションやレンダリングなど、どこを見るべきかを大まかに把握した上で、Unity ProfilerやQuantum Task Profilerを使ってプロファイリングを行ってください。

Quantumのデバッグビルドは、リリースビルドの5倍遅くなることがあります。また、デバッグ+モノのビルドは、リリース+IL2CUPのビルドの10倍遅くなる可能性があります。

Unity Profiler

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

C#

Quantum.Profiling.HostProfiler.Init(..)

Unity Profilerのパターンを利用することで、Quantumシミュレーションのコードにカスタムセクションを追加することができます。

C#

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

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

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

Quantum Task Profiler

Quantum Task Profiler は、Unity Timeline プロファイラーのような、Unity 用のカスタムかつスタンドアローンのグラフィカルなパフォーマンスプロファイラーです。Quantumソリューションが Debug または ReleaseProfiler 設定でコンパイルされたときのみデータを提供します(後者は、Quantum 2.1で追加されています)。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プロバイダは、パフォーマンスとネットワーク統計を視覚的に分析するために、アプリに統合することができる追加ツールです。

ご使用のUnity Editorに対応したバージョンをダウンロードしてください。

Unity バージョン リリース日/th> ダウンロード
Unity 2018.4 2020年1月30日 QuantumProfilers_Unity2018_20230414
Unity 2019.4+ 2021年6月28日 QuantumProfilers_20230414

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

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

プロファイラには、以下のグラフがあります。

  • Engine Delta Time: Unityフレーム間の Time.unscaledDeltaTimeEngine 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つのカスタムブーリアン値を追跡することができます。各マーカーは固有の色で表現され、デフォルトでは 赤 = 入力がサーバに置き換えられるオレンジ = チェックサムが計算される となっています。
profiling graphs
リアルタイムプロファイリンググラフ

マーカーについて

見やすくするために、マーカーのグラフは他のグラフより2倍速く動作しています。これは、Profilers プレハブの Samples プロパティで調整することができます。

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

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

他のツール

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

  • ターゲットFPSの変更 (Application.targetFrameRate)
  • ネットワークの状態(遅延、ジッター、損失)をシミュレート

これらは、異なるレンダリング速度や悪いネットワークを素早くシミュレートするのに便利です。その効果は、グラフですぐに確認できます(予測フレーム数、シミュレーション時間、...)。

N.B.: ネットワーク損失をシミュレートする場合は、値の設定に注意してください。ネットワーク上の損失をシミュレートする場合は1~3%、ローカルな損失をシミュレートする場合はより高い値を使用します(例:3つの壁の向こうのルーターに接続不良)。

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

エディタと同じネットワーク上で動作しているビルドに対して、リモートでQuantum Task Profilerにフックすることが可能です。この機能を有効にするには、QuantumEditorSettingsアセットの一番下にあるRemote Profilerチェックボックスをオンにします。

profiling graphs
QuantumEditorSettingsのリモートプロファイラのトグル
Back to top