- 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件のコメント
Hacker Newsの意見