核心概念
Scalerは、アプリケーションとライブラリの相互作用を監視・分析することで、ライブラリの不適切な使用や、アプリケーションの非効率な設計を特定し、性能の向上に役立つ。
要約
Scalerは、複雑なシステムにおける各コンポーネント(ライブラリやアプリケーション)の相互作用を理解するための新しい分析手法「クロスフロー分析(XFA)」を提案している。XFAは、各コンポーネントが呼び出すAPIの実行時間と呼び出し回数を詳細に追跡することで、ライブラリの不適切な使用や、アプリケーションの非効率な設計を特定する。
Scalerは、Universal Shadow Tableやリレーション認識データ折りたたみなどの新しい技術を導入することで、低オーバーヘッドでAPIの呼び出しを効率的に追跡できる。実験の結果、Scalerは既存のプロファイラよりも多くの未知の性能問題を検出できることが示された。具体的には、cannealアプリケーションでは、libstdc++ライブラリの不適切な使用を特定し、データ構造の変更により52%の性能向上を実現した。また、dedupアプリケーションでは、I/O操作の非効率性と、メモリアロケータの設定の問題を特定し、それぞれ49.1%と74.2%の性能向上を実現した。
統計
cannealアプリケーションでは、libstdc++ライブラリの実行時間が全体の77%を占めていた。
dedupアプリケーションでは、read()が全体の18%、write()が35%の実行時間を占めていた。また、write()が1,109,852回呼び出されていた。
dedupアプリケーションでは、メモリアロケータのmadvise()とmprotect()が全体の68%の実行時間を占めていた。
ferretアプリケーションでは、スレッド間の実行時間に大きな偏りがあり、rankスレッドの実行時間がsegスレッドの16倍であった。
swaptionsアプリケーションでは、pthreadライブラリのスピンロックが全体の99%の実行時間を占めていた。
引用
"アプリケーション開発者は、一部の不適切なライブラリAPIを使用している可能性がある。一方で、APIの呼び出し方式の異常な動作から、アプリケーションやライブラリの設計の非効率性を推測することができる。"
"既存のツールは、ハードウェアに関連する性能問題や、マルチスレッドに関連する性能問題に焦点を当てているが、コンポーネント間の相互作用に着目したものはない。"