3 ポイント 投稿者 GN⁺ 2023-12-08 | 1件のコメント | WhatsAppで共有

トレーシングツール紹介

  • トレーシングへの情熱と経験をもとに、さまざまなトレーシング手法を紹介
  • 新しくて興味深いトレーシングツールを2つ含む
  • トレーシングの核心: システムで発生したタイムスタンプデータの収集とタイムラインUIでの可視化

データをタイムラインUIで簡単に可視化する

  • Chromium Event JSON Formatを使った、シンプルなJSON形式のイベントデータ可視化
  • GoogleのPerfettoまたはCatapultビューアーによるトレーシングファイルの確認
  • Pythonユーティリティを活用して、トレースファイルをクリック可能なリンクに変換して共有

高度なフォーマット: Fuchsia Trace FormatとPerfetto Protobuf

  • Fuchsia Trace Format (FTF): サイズの大きいトレースファイル向けの、シンプルでコンパクトなバイナリ形式
  • Perfetto Protobuf: より多くの機能をサポートするコンパクト形式で、Protobufライブラリを通じて生成可能

さまざまなトレーシングツール

  • Speedscope、pprof、Rerunなど、さまざまなトレース可視化ツールを紹介
  • Trace Compass、Firefox Profilerなどのプロファイラビューアーにも言及
広告

トレーシング手法

  • ハードウェアブレークポイント、perf、GDBスクリプティングなど、低レベルのトレーシング手法を紹介
  • Intel Processor Traceを活用したプログラム実行トレース
  • magic-trace: 関数呼び出しを可視化するトレースファイル生成ツール

計測ベースのトレーシングプロファイラ

  • Tracy、Optick、Perfettoなどの計測ベースのトレーシングプロファイラを比較
  • 追加情報を含むイベントデータの重要性を強調

eBPF

  • Linuxカーネルを利用したトレーシングのためのeBPFサブシステムを紹介
  • BCC、bpftrace、plyなどのeBPFトレーシングツールを紹介

eBPFの例: AnthropicのPerfettoベースのパケットおよびユーザーイベントトレーシング

  • ネットワーキングコードのテールレイテンシ分析のために、BCCとPerfetto可視化を組み合わせる
  • eBPFを使ったユーザー空間イベントトレーシングと、Cヘルパーによるイベント処理最適化

バイナリ計測

  • ソースコードにアクセスできないときに使われるバイナリ計測手法を紹介
  • bpftime、E9Patch、Fridaなどのツールを説明
広告

分散トレーシング

  • サービス間トレーシングのためのOpenTelemetry、Zipkin、Odigosなどのソリューションに言及

サンプリングプロファイラ

  • 定期的にプログラム全体のコールスタックをサンプリングするプロファイラを紹介
  • Speedscope、Samplyなど、時間軸を含むUIを使用

QEMU計測

  • すべてのトレーシングツールが失敗したときに使う、QEMUの完全エミュレーションとフック
  • Cannoli、QEMU TCG Plugins、usercornなどのツールを紹介

GN⁺の意見

この記事で最も重要なのは、さまざまな種類の問題を解決するために使えるトレーシング手法の幅広いカタログを提供している点だ。初級ソフトウェアエンジニアにも理解しやすいレベルで多様なトレーシングツールと手法を紹介しており、トレーシングに関心のある人にとって非常に有益で興味深い内容になっている。特に、実例を通じてeBPFトレーシングとPerfetto可視化を組み合わせた例は、実務での適用可能性を示しており、読者に新たなインサイトを提供できるだろう。

1件のコメント

 
GN⁺ 2023-12-08
Hacker Newsのコメント
  • Spall開発者のコメント:

    • Spallは記事で言及されている軽量プロファイラの1つ。
    • 著者の「暗黙的順序ツリー」に関するブログ記事が印象的で、大規模トレース向けツリーについて他の人の視点を見られてよかった。
    • eytzinger-ordered 4-ary treeは、165fps超でも30億個以上の関数を処理するのに問題がない。
    • 現在、タイムスタンプのデルタ圧縮に取り組んでおり、これによってイベントをより小さい容量に収めようとしている。
    • Spallのネイティブビルドで、128GB RAMで100億件のイベントを処理できるようになることを期待している。
  • Windowsアプリケーション開発者へのETWの推薦:

    • Windowsアプリケーションを扱う人には、Event Tracing for Windows(ETW)を勧める。
    • Bruce DawsonのブログはETWを学び始めるうえで最高の出発点。
  • オープンソースソリューションの概要:

    • この分野のオープンソースソリューションについて、かなり良い概観になっている。
    • 重要なトレーシング分野であるタイムトラベルデバッグが抜けている。
    • ハードウェアトレース、計装、決定論的リプレイを活用する興味深いソリューションがある。
    • プログラム内の特定時点に戻り、メモリ全体を再構成してデバッグできるような可視化統合があれば、さらに良い。
  • Anthropicでの採用の進め方:

    • AnthropicでTristanと一緒に働く機会に関する最後の提案がとても魅力的。
    • Tristanは自分が取り組む内容をうまく説明している。
    • ブログ記事にトレースのスクリーンショットがもっとあればよかったと思う。
  • Pythonプログラムとパケットの相関付け技術:

    • 特定の引数を持つシステムコールを追跡して、Pythonプログラムのユーザー空間イベントとパケットの相関を見つける技術に感心した。
  • IDEプラグイン開発チームの経験:

    • 本番運用中のアプリに従来のデバッガの機能を追加するIDEプラグインを開発している。
    • ユーザーが実行中に任意の変数を解析し、コード内で何が起きているのかを理解できるようにする。
    • このプラグインは無料。
  • JavaScript実行コストのプロファイリングに対する業界のニーズ:

    • JavaScriptの実行コストを決定論的にプロファイルする、より良い方法が必要。
    • ChromiumではLinux perfを使った試みがあったが、その変更は削除された。
    • CIでJavaScriptのコストを決定論的に測定する方法について、何かヒントがないか気になっている。
  • dtraceへの言及とbcantrillのラント:

    • 著者はdtraceに軽く触れている。
    • bpftraceがイベントを静かに取りこぼす問題と、dtraceがそうならない理由についてbcantrillが最近語ったラントを確認することを勧める。
  • 便利なツールへの感謝:

    • 記事で紹介されていた便利なツール群への感謝の言葉。