8 ポイント 投稿者 GN⁺ 2025-03-11 | 1件のコメント | WhatsAppで共有
  • StrobelightはMetaのプロファイリングオーケストレーターで、複数のオープンソース技術を組み合わせてエンジニアが性能とリソース利用を改善できるよう支援する
    • 導入後、年間で15,000台のサーバーに相当する容量削減効果を達成

Strobelightの動作方式

  • Strobelightは単一のプロファイラではなく、複数のプロファイラを調整するオーケストレーターである
  • Metaのすべての本番ホストで実行され、次のような性能指標を収集する
    • CPU使用率
    • メモリ割り当て
    • その他の性能メトリクス
  • エンジニアはこれを通じて性能ボトルネックやリソース浪費の問題を把握し、コードを最適化できる

プロファイラの役割と必要性

  • プロファイラはサンプリングベースの統計分析ツールである
  • 例: CPUサイクルイベントから関数呼び出しスタックと、CPU上で関数が実行される時間を分析できる
  • コード実行状態を詳細に把握し、性能改善に貢献する

Strobelightの多様なプロファイラ

  • Strobelightには合計42個のプロファイラが含まれる
    • jemallocベースのメモリプロファイラ
    • 関数呼び出し回数プロファイラ
    • Python、Java、Erlangなど言語別のイベントベースプロファイラ
    • AI/GPUプロファイラ
    • オフCPU時間追跡プロファイラ
    • サービスリクエスト遅延時間追跡プロファイラ
  • プロファイリングツールはコマンドラインツールまたはWeb UIで実行できる
  • 継続的プロファイリングおよび特定条件発生時のトリガーベースプロファイリングを設定できる

Ad-hocプロファイラ対応

  • エンジニアが新しいプロファイラを追加するには、複数のコード修正とデプロイが必要
  • bpftraceスクリプトを書いて素早くプロファイラを追加できる
  • エンジニアは特定関数の性能問題を迅速に追跡・分析できる

プロファイラ間の衝突防止

  • Strobelightはプロファイラ間のリソース衝突防止システムを内蔵
  • CPUサイクル追跡中は他のPMUカウンター使用禁止などのルールを適用
  • 同時実行およびキュー管理システムを通じてリソース衝突を最小化

自動プロファイリングと動的サンプリング

  • StrobelightはMetaのすべてのサービスで自動的にプロファイリングを実行する
  • 各サービスのワークロードに応じてサンプリング頻度と期間を自動調整する
  • サンプリング確率と収集頻度を自動補正し、一貫したデータを提供する

性能最適化と容量削減の事例

LBRプロファイラ

  • Intelのハードウェア機能である**Last Branch Record (LBR)**サンプリングをサポート
  • **FDO (Feedback Directed Optimization)**で使用され、バイナリ性能を向上
  • Metaの上位200サービスでCPUサイクル使用量を最大20%削減する効果

イベントプロファイラ

  • Linuxのperfツールと似た機能を提供
  • 性能イベント(CPUサイクル、L3キャッシュミスなど)をサンプリングして可視化
  • コードパスで発生する問題を事前に検知して修正可能

Stack SchemasとStrobemeta

Stack Schemas

  • 関数呼び出しスタックにタグを追加して可視性を向上
  • フィルタリングと可視化で不要な関数を除去できる

Strobemeta

  • ランタイムで動的メタデータを呼び出しスタックに追加
  • サービスエンドポイント、遅延時間などに関連する詳細情報を提供

シンボル化処理(Symbolization)

  • バイナリの仮想アドレスを関数名およびソースコード情報に変換
  • DWARF、ELF、gsym、blazesymなどのオープンソース技術ベース
  • シンボル化作業はプロファイリング後に行い、性能低下を防止

Strobelightデータ可視化ツール

Scuba

  • SQLベースのクエリおよび可視化ツール
  • プロファイリングデータに対して時系列、分布、フレームグラフなどを提供

Tracery

  • 時間ベースの複合プロファイリングデータ可視化ツール
  • サービスリクエストスパン、CPUサイクル、オフCPUデータを統合して可視化可能

"Biggest Ampersand" 事例

  • エンジニアがStrobelightデータを通じてstd::vectorのコピー問題を発見
  • autoキーワードの後ろに&を追加 → 不要なコピーを防止
  • 結果として年間約15,000台のサーバー削減効果が発生

オープンソース

1件のコメント

 
GN⁺ 2025-03-11
Hacker Newsの意見
  • 継続的プロファイリングには Grafana の Pyroscope を勧める、Go で使っておりうまく動作している
    • 複数の言語をサポートしており、eBPF ベースである
  • Meta/FB の C++ コードは、他の古い大手テック企業のコードより読みやすい
  • Strobelight は、特に高 qps のサービスで最適化する価値のある箇所を簡単に見つけられるようにしてくれる生命線だ
  • Meta のユーザー空間バイナリにはフレームポインタが含まれており、スタックをたどることが可能になっている
    • そうでなければ、複雑で非効率な方法を使わざるを得なかっただろう
  • 非ネイティブ言語向けのイベントプロファイラがあると主張している(例: Python)
    • Python の状態をどう読み取るのかが明確ではない
  • Strobelight の GitHub リポジトリはまだ基本的な段階で、いつ更新されるのか気になっている
  • 名前は、高速な周期運動を調べるストロボの使用を参照しているようだ
  • オープンソースプロジェクトがこのように統合されていればよいのにと思う
    • Facebook の内部 UI は良さそうに見える
  • 計算コストのモデリングは難しい
    • 流体力学を計算要件に当てはめたら面白そうだ
  • AWS/Azure/GCP の主要競合は、この種のツールの不足のために苦戦しているのではないかと思う
    • Microsoft ではネットワークトラフィックを追跡するツールを作っており、デバッグに非常に役立った
    • Meta のあらゆるものに対して疑いの目で見ている
  • パフォーマンスプロファイリングのことだ
    • タイトルとドメインを見て、ユーザープロファイリングのことだと思った
  • Strobelight を Parca と Polar Signals を通じてすべての人に提供しようと取り組んでいる
    • 一部はすでに存在しており、今年はさらに多くのものが出てくる予定だ