Search Unity

同じプロジェクトの 2 つの異なるバージョンのパフォーマンスを比較する必要に迫られたことはありませんか?アセットの修正やコード修正、最適化や設定変更、あるいは Unity のバージョンのアップグレードを行った結果、どのような影響がもたらされたか、確認したいことはありませんか?本記事では、このような場合に Profile Analyzer(プレビュー版)を活用する方法をご紹介します。

本ツール開発の経緯

私たち Unity の Platform Performance チームでは、あらゆる種類のパフォーマンス問題の調査を、Unity の全バージョン・全対応プラットフォームで行っています。こうした調査を行うに当たって、ネイティブのプラットフォームツールのほかに欠かせないのは、言うまでもなく Unity プロファイラーです。

このような調査のひとつを行う中で私たちは、分析が必要なデータに最も関連性の高いフレームを特定することが大きな課題となっていることに気付きました。そこで、プロファイラーデータの複数のフレームをまとめて、任意のマーカーと関連性の高いフレームを特定するためのツールを構築しました。これにより、挙動の変化の原因をより正確に特定することが可能になりました。

単一のデータセットを分析する

Profiler ウィンドウ内の現在のフレームの一式から、Profile Analyzer の Single ビューに追加することができます。これは CPU データを分析し、フレーム、スレッド、およびマーカー別の消費時間や処理回数を(その最小値・最大値・中央値・平均値・上位/下位四分位値も含めて)視覚化し、Profiler ウィンドウのそれらが表示されるフレームにリンクを送り返します。時間・フレーム・スレッド・マーカーの分布もヒストグラムと箱ひげ図で提供されており、経時的な挙動を視覚的に確認しやすくなっています。

2 つのデータセットを比較する

Single ビューに表示された情報を踏まえた上で、Compare ビューでは 2 つのデータセットを読み込むことができます。これらはセットごとに異なる色で表示されます。2 つのデータセットの違いが表として視覚的に整理されます。また分布の違いもヒストグラフと箱ひげ図として表示されます。コードやデータの変更前後、プロジェクト設定の変更前後、Unity バージョンのアップグレード前後などの 2 つのデータセットを比較することができます。

包括的なフィルタリングシステムが Single ビューと Compare ビューの両方で利用可能となっており、分析情報を、マーカーやスレッド、フレーム、スタック深度に絞り込むことができます。

データをフィルタリングする

フィルタリング制御を使ってデータセットを絞り込むことができます。名前の部分的な一致、実行されるスレッド、特定のスタック深度などによってマーカーを制限することが可能です。

特定の名前によってフィルタリングした上で、さらに別の名前を持つマーカーを除外することも可能です。こうすることで、フィルタリング結果から、統計上関係のないマーカーや、分析表示を何らかの形で妨げているマーカーをすべて削除することができます。また、ウィンドウの上部にあるフレーム制御を使って、フレームのサブセットを選択することも可能です。

Compare ビューでは 2 つのデータセットが自動的に深度に合わせて表示されるので、トップレベルのマーカーが正しく整列されるようになっています。ただし、これは「Auto Right」のチェックボックスと Left・Right の深度制御でオーバーライド可能です。この機能は、生成されるマーカーが変化した、異なるバージョンの Unity からのデータセットを比較する場合に特に便利です。

皆様もぜひお試しください

Profile Analyzer は今後も引き続き、Unity 社内での重要なシステムのパフォーマンスや最適化のモニタリングに使用されます。最近では、大きなテクスチャ―の作成によってレンダースレッドのストールが発生したため、本ツールを使用して Unity のテクスチャー読み込みパフォーマンスの調査を行いました。検索とフィルタリングのおかげで、問題に関連するキーメトリックに的を絞った分析が、従来より簡単に行えました。このようなパフォーマンスの調査・改善を開発者の皆様にもより簡単に行っていただけるように、本ツールを Unity 2019.1 のリリースと同時にパッケージとして公開しましたので、ぜひお試しください。皆様のご意見・ご感想をフォーラムまでお気軽にお寄せください。

15 コメント

コメントの配信登録

コメント受付を終了しました。

  1. its_all_over

    5月 24, 2019 2:57 pm

    But its still limited to 300 profiler frames, right?

    1. Lyndon Homewood

      5月 24, 2019 3:30 pm

      The Profile Analyser doesn’t have a hard limit set, but as it pulls data from the Unity Profiler it’s currently only able to work on up to 300 frames available. There is a feature in development on the Unity Profiler side that will open this up to more frames. When that is released the Profile Analyser will automatically work with the larger data sets.

  2. This is incredibly awesome! Thanks so much for creating this.

    I’m comparing two data sets from iOS runs, one with graphics jobs disabled and another with graphics jobs enabled (actually, I’m confused about this, is graphic jobs supported in iOS using Metal? If not, why is it an option in the iOS settings?).
    Multithreaded rendering is disabled on both, but I see time spent in the Work Thread for both sets. I’m assuming this worker thread is not related to rendering in the singlethreaded rendering data set?

    I’m also seeing “541 of 538 markers” in the Filters window, is it a bug?

    1. …ok I see that when a multithreaded rendering data set is loaded “Render Thread” shows up in the Filter…. so cool!!!!

      1. Lyndon Homewood

        5月 21, 2019 10:03 am

        This page is a useful overview of the multi threaded rendering and graphics jobs that may help you.
        https://unity3d.com/learn/tutorials/topics/best-practices/multithreaded-rendering-graphics-jobs
        It was written in relation to 2018.1.

    2. Lyndon Homewood

      5月 21, 2019 9:46 am

      The marker count sounds like a bug. Thanks for highlighting. I am currently unable to reproduce it at the moment. Please can you raise a bug and attach both the Unity Profiler file (.data) and the Profile Analyzer file (.pdata) so we can look into it. If you reply with the case number here then I can check up on it.

      1. Thank you! It’s case 1156532. I think I found a more urgent/important issue and reported another bug, number 1156539. If you could take a look at this bug instead it would be great, as I’m relying on the numbers of the analyzer to verify if my performance changes are significant.

        1. Lyndon Homewood

          5月 22, 2019 12:35 pm

          I’ve replied on the issue regarding the ‘Top Marker’ display.
          https://issuetracker.unity3d.com/issues/profile-analyzer-top-marker-bar-doesnt-match-calls-list

          The display is functioning correctly but the UI is not clear enough to inform you of the difference between the values.
          We will look into improving it in a later version, so I’ll keep the issue open until the UI is updated.

          Summary from issue:

          The Top 10 Marker bar shows the marker value on the median frame. This frame is the one with the median total frame time.
          The comparison graph shows the median of all the samples over all the frames.
          So these two may not match.

          If you switch to the single view there are two columns.
          ‘Median’ is the median value of the marker over all frames (same as the comparison view).
          ‘At Median Frame’ is the value of the marker on the ‘median frame’ with the median overall frame time. (same as seen in the top 10 view)

          If you click on the frame time graphs and choose “Select Median Frame” for both data sets, then the values will all match.

          Hopefully that clears up the confusion and reassures you that the values are reliable (And that the UI will be reviewed).

  3. Emil "AngryAnt" Johansen

    5月 14, 2019 12:38 pm

    One of the big things we are looking forward to. Much excite! :)

    Our development builds by default output profiler data to timestamped collections. Will it be somewhat straight forward to present a list of profile dumps to generate analysis for and then cycle through and compare them? Or is that just something we’ll be writing our own little tooling for?

    1. Lyndon Homewood

      5月 14, 2019 1:18 pm

      Currently the tool requires you to open the profile with the Unity Profiler first to get it into the analyser. I.e. Either load a saved .data or .raw file into the Unity Profiler (or perform a new capture with the Profiler), then open the Profiler Analyser tool and click ‘pull’ to grab the data for analysis. Then the analysis can be saved out as a .pdata file for future review or comparison. We recommend you keep the .data file alongside the .pdata file so you can jump between the profiler and analyser if needed. Generally I’ve found the workflow quite fast and usually have the Unity Profiler and Unity Profile Analyser docked together side by side so I can jump between overview and individual frame analysis.

      It may be possible to automated that .raw to .pdata conversion as part of your workflow so you can simply have a folder of .pdata files for opening with the tool. Thanks for highlighting your specific use case.

      1. Emil "AngryAnt" Johansen

        5月 14, 2019 1:36 pm

        Excellent! I have no doubt we’ll have that running just perfectly adjusted to our needs in no time. Thanks again :)

  4. Great !

    Will this support to connect the device or using IP

    1. Lyndon Homewood

      5月 14, 2019 10:39 am

      This tool pulls data from the standard Unity Profiler.
      So you can use all the standard connection methods of the Unity Profiler to capture data from devices.

      You can also use the C# Profiler.logFile API in your applications to write out a performance capture, then load this into the Unity Profiler and use the Profile Analyser to review that data.
      https://docs.unity3d.com/ScriptReference/Profiling.Profiler-logFile.html

  5. Richard Bates

    5月 13, 2019 4:09 pm

    Looks great!

    Does the analysis only run retrospectively, or is there a ‘live’ mode?
    Interesting possibilities, e.g. to pause execution if an unusual frame occurs.

    1. Lyndon Homewood

      5月 14, 2019 10:36 am

      Thanks for the feedback,

      The tool was designed to be run after the capture as this allows more time for the analysis to be performed.
      The analysis time is dependent on the complexity of the project and the number of markers output in the capture.
      This time is currently likely to be longer than the frame time for a complex project.