[フレーム]
BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

InfoQのすべての体験をアンロックして、そのメリットを最大限に活用しましょう

ログインして、InfoQのすべての体験をアンロックしましょう!お気に入りの著者やトピックの最新情報を入手し、コンテンツと交流し、限定リソースをダウンロードできます。

ログイン
または

アカウントをお持ちでない方

登録
  • あなたにとって重要なトピックや同僚の最新情報を入手しましょう最新の洞察とトレンドに関する最新情報を即座に受け取りましょう。
  • 継続的な学習のために、無料のリソースに手軽にアクセスしましょうミニブック、トランスクリプト付き動画、およびトレーニング教材。
  • 記事を保存して、いつでも読むことができます記事をブックマークして、準備ができたらいつでも読めます。

Topics

地域を選ぶ

AIオールスターズ2025

"AI活用"をキーワードに「AIを使い倒し/使いこなす」企業の最前線をお届けします。

QCon San Francisco - image
QCon San Francisco 2025

Get production-proven patterns from the leaders who scaled a GenAI search platform to millions, migrated a core ML system without downtime, and architected a global streaming service from the ground up.

Early Bird ends Nov 11.

QCon AI New York - image
QCon AI New York 2025

Move beyond AI demos to real engineering impact. Discover how teams embed LLMs, govern models, and scale inference pipelines to accelerate development securely.

Early Bird ends Nov 11.

QCon London - image
QCon London 2026

Benchmark your systems against leading engineering teams. See what really works in FinOps, modern Java, and distributed data architectures to balance cost, scale, and reliability.

Early Bird ends Nov 11.

InfoQ ホームページ ニュース Uberがプロファイルガイド最適化でパフォーマンス向上

Uberがプロファイルガイド最適化でパフォーマンス向上

2025年4月18日 読了時間 4 分

作者:

翻訳者

原文リンク(2025年03月19日)

プロファイルガイド最適化(PGO)はランタイムデータを使用してコンパイラの判断を支援することで、アプリケーションのパフォーマンスを向上させる強力な技術として登場した。最近の実装例ではUberがGoogleと協力してGolangにPGOを統合し、自社サービス群全体で大幅なパフォーマンスの向上とリソースの節約を実現した。

PGOは従来の静的解析と比べて、実際のランタイム動作を利用してよりスマートなコンパイラ判断をする。典型的な実行時の実行プロファイルを収集することでPGOはホットコードパスを特定し、以下のような技術によって最適化する。

  • 呼び出し頻度に基づくインテリジェントな関数インライン化
  • コードとデータレイアウトの改善によるローカリティの向上
  • レジスタ割り当てと命令スケジューリングの強化
  • 実行パス最適化のための基本ブロック再配置

UberのGoプロファイリングインフラストラクチャ GoのためのUberプロファイリングインフラストラクチャ

UberにおけるPGO実装はいくつかの主要フェーズ:プロファイリング、分析、再コンパイルを包含している。最初にアプリケーションの典型的な実行時にランタイムプロファイリングデータが収集される。このデータは最適化の機会を特定するために分析され、最適化されたバイナリを生成するために再コンパイルプロセスで適用される。C++、Rust、Java、Swiftなどの言語は以前からPGOをサポートしてきたが、Goへの統合は比較的最近のことだ。UberはGoogleと協力してGoへのPGOサポートを導入し、バージョン1.20でPGO駆動のインライン化を導入、バージョン1.21で仮想関数呼び出しの最適化を追加した。

PGOを継続的な最適化フレームワークにシームレスに組み込むため、Uberは体系的なプロセスを確立した。

  1. 日次プロファイル収集:典型的プロファイルを作成するため、複数のインスタンスから継続的にプロファイリングデータを収集する。
  2. サービス別登録:設定システムはPGOのために特定サービスを登録し、ターゲットを絞った最適化を保証する。
  3. 継続的インテグレーション(CI)テスト:PGOソフトウェア開発キット(SDK)はCIテストを経て変更を検証し、安定性を維持する。
  4. デプロイメント:検証後、PGO最適化されたサービスが本番環境にデプロイされる。
  5. パフォーマンスモニタリング:パフォーマンスダッシュボードがサービスに対するPGOの影響を監視し、継続的な評価を可能にする。

PGOを実装中に直面した重要な課題はビルド時間の増加であり、一部のサービスでは最大8倍の遅延が発生した。これはコンパイル時にプロファイリングデータの解析に膨大な時間がかかることが主原因だった。この問題に対処するためUberは、実行時のプロファイリングデータを抽出し、コールグラフを構築し、コンパイル時に使用するためにこの情報をキャッシュするプロファイル前処理ツールを開発した。この前処理によりビルド時間が大幅に短縮され、開発者にとってPGOの統合が現実的なものとなった。

PGOのパフォーマンスへの影響は合成ベンチマークと実世界のサービス評価を用いて評価された。Goで広く使用されているJSONライブラリgo-jsonの場合、ベンチマークで以下の結果が示された:

  • Goのgo-jsonライブラリでは命令トランスレーションルックサイドバッファ(iTLB)のミスを30%削減した
  • 最適化されたインライン化により4%のパフォーマンス向上
  • Uberのトップサービス全体で必要なCPUコアが24,000個減少し、大幅なコスト削減につながった。

他にもいくつかのテクノロジー企業がGoアプリケーションのパフォーマンスを向上させるためにプロファイルガイド最適化(PGO)を採用している。Cloudflare はGoベースのサービスにPGOを統合し、本番環境からCPUプロファイルを収集してコンパイラの最適化を導き、CPU使用量の削減とパフォーマンスの向上を実現している。同様にDatadogはGoアプリケーションを最適化するためにPGOを採用し、Goコンパイラの最適化判断に情報提供するためにプロファイリングデータを活用することで、本番環境で最大14%のCPU節約を達成している。Grafana Labs はオープンソースの継続的プロファイリングプラットフォームであるGrafana Pyroscopeと連携したPGOを採用し、Goアプリケーションを最適化している。この統合はリアルタイムのパフォーマンス分析を提供し、開発者が非効率を特定し、ピークパフォーマンスに対してコード実行を最適化できるようにしている。

要約すると、UberがGoプログラミング環境にプロファイルガイド最適化を統合したことで大幅なパフォーマンス改善がもたらされた。プロファイリングデータを体系的に収集し、ビルド時間を短縮するために前処理を行い、ターゲットとなるコンパイラ最適化を適用することで、Uberはサービスの効率性を向上させた。この取り組みはリソース利用の最適化におけるPGOの可能性を示すだけでなく、ソフトウェアパフォーマンスエンジニアリングにおけるコラボレーションとイノベーションのベネフィットをハイライトしている。

作者について

Claudio Masolo

もっと見るより少なく

この記事に星をつける

おすすめ度
スタイル

このコンテンツのトピックは Performance です。

関連記事:
  • 関連記事

    • 関連スポンサーコンテンツ

特集コンテンツ一覧

InfoQ ニュースレター

毎週火曜日に前週のまとめコンテンツをお送りいたします。(日本語版は不定期リリース)25万人のシニアな開発者コミュニティーにぜひご参加ください。 サンプルを見る

We protect your privacy.

BT

AltStyle によって変換されたページ (->オリジナル) /