Skip to main content
QUICK REVIEW

[論文レビュー] Coz: Finding Code that Counts with Causal Profiling

Charlie Curtsinger, Emery D. Berger|arXiv (Cornell University)|Aug 12, 2016
Software System Performance and Reliability被引用数 4
ひとこと要約

この論文では、アプリケーションのスループットやレイテンシを最も効果的に向上させる可能性があるコード領域を特定する、新しいパフォーマンス分析手法である因果的プロファイリングを紹介する。並列実行中の他のコードに対して制御された遅延を挿入することで、特定のコード行を仮想的に高速化し、最適化の影響を正確に予測する。実世界のシステムにおいて、最小限のコード変更で9%から68%のパフォーマンス向上を達成している。

ABSTRACT

Improving performance is a central concern for software developers. To locate optimization opportunities, developers rely on software profilers. However, these profilers only report where programs spent their time: optimizing that code may have no impact on performance. Past profilers thus both waste developer time and make it difficult for them to uncover significant optimization opportunities. This paper introduces causal profiling. Unlike past profiling approaches, causal profiling indicates exactly where programmers should focus their optimization efforts, and quantifies their potential impact. Causal profiling works by running performance experiments during program execution. Each experiment calculates the impact of any potential optimization by virtually speeding up code: inserting pauses that slow down all other code running concurrently. The key insight is that this slowdown has the same relative effect as running that line faster, thus "virtually" speeding it up. We present Coz, a causal profiler, which we evaluate on a range of highly-tuned applications: Memcached, SQLite, and the PARSEC benchmark suite. Coz identifies previously unknown optimization opportunities that are both significant and targeted. Guided by Coz, we improve the performance of Memcached by 9%, SQLite by 25%, and accelerate six PARSEC applications by as much as 68%; in most cases, these optimizations involve modifying under 10 lines of code.

研究の動機と目的

  • 従来のプロファイラーが処理時間の報告しか行わないという限界に対処すること。
  • 単に時間がかかるコードではなく、スループットやレイテンシに実際に影響を与える最適化機会を開発者に導くこと。
  • 仮想的なコード最適化のパフォーマンス影響を、実験ベースで正確に定量化する手法を提供すること。
  • 高度に最適化された並列アプリケーションにおいて、効率的かつ正確に最適化機会を同定できること。
  • 明示的なスレッド通信やスケーラビリティ指標にのみ焦点を当てる既存のツールの欠陥を克服すること。

提案手法

  • 因果的プロファイリングは、他の並列実行中のコードに人工的な一時停止を挿入することで、特定のコード行を仮想的に高速化する効果をシミュレートする。
  • 各パフォーマンス実験では、ある特定の行が定められた割合で仮想的に高速化された場合に、プログラムのスループットやレイテンシがどれほど向上するかを測定する。
  • この手法は、ある行の実行中に他のすべてのコードを遅くすることで、その行を速くしたのと同じ相対的効果が得られることに着目している。
  • プロファイラーは、関心のあるすべての行に対してこのような実験を繰り返し、最適化影響の因果モデルを構築する。
  • その結果は、さまざまな仮想的高速化レベルにおける各コード行の期待されるスループット向上を示すプロファイルとして可視化される。
  • このアプローチは、標準的なパフォーマンス監視ツールと統合可能で、実アプリケーション上で効率的に動作する \coz というプロトタイプ因果プロファイラーとして実装されている。

実験結果

リサーチクエスチョン

  • RQ1特定のコード行の最適化がもたらすパフォーマンス影響を、単に実行時間を測定するのではなく、正確に予測できるプロファイリング手法は存在するか?
  • RQ2並列実行中のコードを制御的に遅延させることで実現する仮想的高速化は、最適化の利点を推定するための信頼性があり、効率的な手法であるか?
  • RQ3因果的プロファイリングは、実世界の高度に最適化されたシステムにおいて、未知の高影響度の最適化機会を特定できるか?
  • RQ4因果的プロファイリングは、最小限のコード変更で顕著なパフォーマンス向上を達成するための開発者をどれほど効果的に導けるか?
  • RQ5因果的プロファイリングは、伝統的なプロファイラーおよびその他のパフォーマンス分析ツールと比較して、意味のある最適化ターゲットをどれほど効果的に特定できるか?

主な発見

  • 因果的プロファイリングは、例題プログラムにおける関数 $f_a$ の最適化が最大で4.5%のパフォーマンス向上しかもたらさないのに対し、$f_b$ の最適化は効果がないことを正しく特定している。両者とも類似した実行時間を要しているにもかかわらずである。
  • \\coz プロファイラーは、実際の値から0.5%以内の誤差でこれらの影響を正確に予測しており、最適化効果の推定において高い精度を示している。
  • \\coz に従って、Memcached で9%、SQLite で25%のパフォーマンス向上を達成し、PARSEC の6つのアプリケーションでは最大68%の高速化を実現した。
  • ほとんどの場合、10行未満のコード変更でパフォーマンス向上が達成されており、高い最適化効率を示している。
  • この手法は、キャッシュの整合性、スケジューリング依存関係、I/O に起因するパフォーマンスボトルネックを、明示的なスレッド同期に限らず同定できている。
  • 従来のプロファイラーとは異なり、\\coz は、単に時間がかかるコードと、エンドツーエンドのパフォーマンス指標(スループットやレイテンシ)に実際に影響を与えるコードを区別するため、開発者を誤解させることがない。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。