2025/10/31 11:54 Perfetto: Swiss army knife for Linux client tracing

やあ、ロボ子。今日はPerfettoというツールについて話すのじゃ。

Perfettoですか?初めて聞きました。どんなツールなんですか?

Perfettoは、Linuxカーネル、システム、組み込み開発者向けのデバッグとパフォーマンス分析ツールじゃ。複数のツールが連携して動作するスイートなのじゃ。

なるほど。デバッグやパフォーマンス問題の根本原因を特定するのに役立つんですね。

そうじゃ!Perfetto UIは、AndroidやChromeのトレース表示用に構築されているけど、他の用途にも使えるぞ。

構成要素にはどんなものがあるんですか?

記録ツール、protobuf形式、トレースプロセッサがあるのじゃ。記録ツールはC++アプリ用SDKや、ftraceとか/procとか/sysからデータを集めるデーモンじゃ。

protobuf形式というのは?

高パフォーマンスなトレース形式で、書き込み効率が高いのじゃ。トレースプロセッサは、protobuf形式や他のトレース形式を解析するC++ライブラリで、SQLクエリインターフェースを介してデータを提供するのじゃ。

SQLクエリで分析できるのは便利ですね!

じゃろ?Perfetto UIやPython APIでも使えるぞ。perf.data、ftraceテキスト形式、Firefoxプロファイラ形式、Chrome JSON形式とか、色々なトレース形式をサポートしているのじゃ。

Perfetto UIはWebベースのトレースビジュアライザーなんですね。タイムライン表示やSQLクエリを統合していると。

そうじゃ。ブラウザ内で動くから、トレースデータがシステム外に出る心配もないぞ。静的サーバーでホストもできるし。

記事では、Julia集合を生成するRustプログラムを使ってデモをしているんですね。VulkanによるGPUレンダリングとマルチスレッドCPU計算を使用していると。

そうそう。わざとパフォーマンスのバグを仕込んで、フレームレートが落ちる状況を再現しているのじゃ。GitHubでコードとトレースが公開されているから、試してみると良いぞ。

CPU問題の疑いがある場合は、perfを使ってプロファイルを取得し、FlameGraphで可視化するんですね。

その通り!Perfetto UIでperfプロファイルを可視化して、タイムスタンプ情報を確認するのじゃ。インタラクティブなFlameGraphで、特定の時間範囲を選んで分析もできるぞ。

スケジューラトレースも重要ですね。trace-cmdで収集して、Perfetto UIで可視化すると。

CPUスケジューリングトラックやスレッド状態を見て、スリープ状態の原因を特定するのじゃ。

アプリケーションレベルの可視性も確保できるんですね。tracingクレートとtracing-perfettoクレートを使うと。

そうじゃ。ユーザースペースのインストルメンテーションを表示して、プログラムの動作を分析するのじゃ。フローを使って、異なる処理間の因果関係を可視化することもできるぞ。

perf、ftrace、アプリケーションのトレースをマージして、Perfetto UIで統合的に可視化できるのは強力ですね。

じゃろ?異なるデータソースからの情報を組み合わせて、問題の根本原因を特定するのじゃ。

エリア選択、FlameGraphの機能、クエリインターフェース、デバッグトラックの表示など、Perfetto UIには色々な機能があるんですね。

そうじゃ。SQLクエリを使ってトレースデータを分析したり、ピボットテーブルやフィルターオプションを使ったりできるぞ。

記事のデモでは、動的な品質更新がフレームレートの低下を引き起こしていたんですね。

そう。ロック競合を解消しても問題が解決しなくて、バックグラウンドスレッドに処理を移動することで改善したのじゃ。

Mesa、VizTracer、pthread_traceなど、オープンソースコミュニティでもPerfettoが利用されているんですね。

そうじゃ。Perfettoプロジェクトへの貢献やプルリクエストも歓迎されているぞ。

Perfetto、奥が深いですね。私も使いこなせるように頑張ります。

よし、ロボ子。Perfettoマスターへの道は遠いぞ。まずは、Perfettoを使って、ロボ子の隠されたバグを見つけてみようかの?

えっ、私にバグがあるんですか!?

冗談じゃ!ロボ子にバグがあったら、私が一番困るわ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。