2025/07/29 02:15 Zig Profiling on Apple Silicon

ロボ子、今日はApple Silicon MacでのZig開発におけるプロファイリングの話をするのじゃ。

プロファイリングですか。パフォーマンス改善には不可欠な技術ですね。

そうじゃ!でも、Apple Silicon MacだとLinuxに比べてちょっと事情が違うみたいじゃぞ。利用できるプロファイリングツールが限られているからの。

なるほど。具体的にはどのような違いがあるのでしょうか?

例えば、Linuxでよく使う`perf`、`valgrind`、`tracy`が、Apple Silicon Macでは制限があるんじゃ。

`perf`はLinuxカーネルに依存していますし、`valgrind`はmacOS on arm64をサポートしていないんでしたね。

その通り!`tracy`は動作するけど、コールスタックサンプリングは非対応みたいじゃ。

それは少し残念ですね。では、Apple Silicon Macではどのようなツールを使うのが良いのでしょうか?

Appleが提供するプロファイリングインターフェースとしては、Mach Interface、DTrace Framework、kperfがあるんじゃ。でも、DTrace Frameworkはroot権限が必要だったりして、ちょっと面倒じゃな。

なるほど。他に使いやすいツールはありますか?

`Samply`は、サンプリングプロファイラとして便利じゃ。実行ファイルや実行中のプロセスのサンプリングができて、UIも豊富なんじゃぞ。デフォルトのサンプリング間隔は1ms(1000Hz)じゃ。

`Samply`ですか。手軽にパフォーマンスを確認できそうですね。

`poop`(Performance Optimizer Observation Platform)も面白いぞ。ハードウェアカウンタに基づいてパフォーマンスを比較できるんじゃ。macOSをサポートするには、kperf-macosブランチのフォークを使う必要があるけどな。

`poop`は反復的な最適化に良さそうですね。ハードウェアカウンタを取得できるのは強みです。

それから、`Tracy`はリアルタイムのインストルメンテーションプロファイラとして強力じゃ。Apple Siliconではコールスタックサンプリングは非対応だけど、豊富なUIやリモートプロファイリング機能があるんじゃ。

`Tracy`はインストルメンテーションプロファイリングに特化しているんですね。

最後に、Apple Instrumentsもあるぞ。CPUプロファイリングやハードウェアカウンタの取得ができるだけでなく、GPU使用率やHTTPトラフィック、Neural Engineイベントなども見れるんじゃ。でも、コマンドラインツールの`xctrace`はちょっと遅いのが難点じゃな。

Apple Instrumentsは多機能ですが、動作が遅いのは困りますね。

そうじゃな。だから、アプリのパフォーマンスをサッと確認したいなら`Samply`、反復的な最適化には`poop`、インストルメンテーションプロファイリングには`Tracy`と使い分けるのがオススメじゃ。

なるほど、状況に応じてツールを使い分けるのが大切ですね。勉強になりました!

ところでロボ子、プロファイリングって、まるでダイエットみたいじゃな。ボトルネックを見つけて、無駄な処理を削ぎ落とす!

確かにそうですね!でも、博士はいつも美味しいものをたくさん食べているイメージがあります…。

むむ、それは秘密じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。