External Profiler Support

Juliaは、外部トレースプロファイラに対する明示的なサポートを提供しており、ランタイムの実行動作の高レベルな概要を取得することができます。

現在サポートされているプロファイラーは次のとおりです:

Adding New Zones

新しいゾーンを追加するには、JL_TIMING マクロを使用します。コードベース全体で JL_TIMING を検索することで、数多くの例を見つけることができます。新しいタイプのゾーンを追加するには、それを JL_TIMING_OWNERS に追加します(おそらく JL_TIMING_EVENTS にも)。

Dynamically Enabling and Disabling Zones

JULIA_TIMING_SUBSYSTEMS 環境変数を使用すると、特定の Julia 実行のためにゾーンを有効または無効にすることができます。たとえば、変数を +GC,-INFERENCE に設定すると、GC ゾーンが有効になり、INFERENCE ゾーンが無効になります。

Tracy Profiler

Tracy は、オプションでJuliaに統合できる柔軟なプロファイラーです。

典型的なTracyセッションは次のようになります:

典型的なTracyの使用法

Building Julia with Tracy

Tracy統合を有効にするには、Make.userファイルに追加オプションWITH_TRACY=1を指定してJuliaをビルドします。

Installing the Tracy Profile Viewer

プロファイルビューワを取得する最も簡単な方法は、TracyProfiler_jll パッケージを追加し、次のコマンドでプロファイラを起動することです:

run(TracyProfiler_jll.tracy())
Note

macOSでは、プロファイラーのUI要素が過度に大きく表示される場合、TRACY_DPI_SCALE環境変数を1.0に設定することをお勧めします。

ヘッドレスインスタンスを実行してトレースをディスクに保存するには、次のようにします。

run(`$(TracyProfiler_jll.capture()) -o mytracefile.tracy`)

その代わりに。

Tracy UIの使用に関する情報は、Tracyマニュアルを参照してください。

Profiling Julia with Tracy

トレイシーでジュリアのプロファイリングを行う典型的なワークフローは、次のようにジュリアを起動することから始まります:

JULIA_WAIT_FOR_TRACY=1 ./julia -e '...'

環境変数は、JuliaがTracyプロファイラーに正常に接続するまで待機することを保証します。その後、TracyプロファイラーのUIを使用してConnectをクリックし、Juliaの実行が再開され、プロファイリングが開始されるはずです。

Profiling package precompilation with Tracy

パッケージのプリコンパイルプロセスをプロファイルするには、プリコンパイルしたいパッケージを指定して Base.compilecache を明示的に呼び出すのが最も簡単です:

pkg = Base.identify_package("SparseArrays")
withenv("JULIA_WAIT_FOR_TRACY" => 1, "TRACY_PORT" => 9001) do
    Base.compilecache(pkg)
end

ここでは、Tracyのカスタムポートを使用しており、Tracy UIで接続する正しいクライアントを見つけやすくしています。

Adding metadata to zones

さまざまな jl_timing_show_* および jl_timing_printf 関数を使用して、ゾーンに文字列(または文字列群)を添付することができます。たとえば、推論のトレースゾーンは、推論されているメソッドインスタンスを表示します。

TracyCZoneColor 関数は、特定のゾーンの色を設定するために使用できます。コードベースを検索して、どのように使用されているかを確認してください。

Viewing Tracy files in your browser

https://topolarity.github.io/trace-viewer/ にアクセスして、Tracyトレースのための(実験的な)ウェブビューワーを確認してください。

ローカルの .tracy ファイルを開くか、ウェブからの URL を提供できます(例:Github リポジトリ内のファイル)。ウェブからトレースファイルを読み込む場合、他の人とページの URL を直接共有することもでき、同じトレースを表示できるようになります。

Enabling stack trace samples

Tracyでコールスタックサンプリングを有効にするには、Make.userファイルに以下のオプションを指定してJuliaをビルドしてください:

WITH_TRACY := 1
WITH_TRACY_CALLSTACKS := 1
USE_BINARYBUILDER_LIBTRACYCLIENT := 0

make -C deps clean-libtracyclient を実行して、Tracyの再ビルドを強制する必要があるかもしれません。

この機能はトレースサイズとプロファイリングオーバーヘッドに大きな影響を与えるため、特にトレースファイルをオンラインで共有する予定がある場合は、可能な限りコールスタックサンプリングをオフにしておくことをお勧めします。

JuliaのJITランタイムはまだTracyのシンボル化との統合を持っていないため、Juliaの関数は通常、これらのスタックトレースでは不明となります。

Intel VTune (ITTAPI) Profiler

このセクションはまだ書かれていません。