Skip to main content
QUICK REVIEW

[論文レビュー] DoubleTake: Fast and Precise Error Detection via Evidence-Based Dynamic Analysis

Tongping Liu, Charlie Curtsinger|arXiv (Cornell University)|Jan 29, 2016
Parallel Computing and Optimization Techniques参考文献 30被引用数 4
ひとこと要約

DoubleTakeは、エラーの証拠が検出された時点でインストルメンテーションを遅延することで、C/C++プログラムにおけるメモリエラーの高速で正確かつ低オーバーヘッドな検出を可能にする、証拠に基づく動的解析という技術を導入する。エポックの境界で実行状態をチェックポイント化し、必要に応じて再実行する際のみインストルメンテーションを有効化することで、DoubleTakeは平均で5%未満のパフォーマンスオーバーヘッドを達成しながら、バッファオーバーフロー、使用後フリー、メモリリークといったバグを正確に特定することができる。

ABSTRACT

This paper presents evidence-based dynamic analysis, an approach that enables lightweight analyses--under 5% overhead for these bugs--making it practical for the first time to perform these analyses in deployed settings. The key insight of evidence-based dynamic analysis is that for a class of errors, it is possible to ensure that evidence that they happened at some point in the past remains for later detection. Evidence-based dynamic analysis allows execution to proceed at nearly full speed until the end of an epoch (e.g., a heavyweight system call). It then examines program state to check for evidence that an error occurred at some time during that epoch. If so, it rolls back execution and re-executes the code with instrumentation activated to pinpoint the error. We present DoubleTake, a prototype evidence-based dynamic analysis framework. DoubleTake is practical and easy to deploy, requiring neither custom hardware, compiler, nor operating system support. We demonstrate DoubleTake's generality and efficiency by building dynamic analyses that find buffer overflows, memory use-after-free errors, and memory leaks. Our evaluation shows that DoubleTake is efficient, imposing just 4% overhead on average, making it the fastest such system to date. It is also precise: DoubleTake pinpoints the location of these errors to the exact line and memory addresses where they occur, providing valuable debugging information to programmers.

研究の動機と目的

  • Valgrind や AddressSanitizer のような従来の動的解析ツールが生じる高いパフォーマンスオーバーヘッドを軽減し、本番環境での導入を可能にすること。
  • 再コンパイルやインストルメンテーションが不要な現行のツールでは、サードパーティライブラリ内のエラーを検出できないという制限を克服すること。
  • バッファオーバーフロー、使用後フリー、メモリリークなどのメモリエラーについて、正確で行単位のエラー特定を、デプロイ済みアプリケーションで可能にすること。
  • カスタムハードウェア、コンパイラ、OSのサポートが不要な実用的で即座に導入可能なソリューションを開発することにより、実世界のシステムへの導入を容易にすること。

提案手法

  • エポックの境界(例:システムコール)でチェックポイントを生成し、必要に応じてロールバックと再実行を可能にすることで、インストルメンテーションを必要な時のみ有効化する。
  • 特定のメモリエラーには、時間の経過とともに証拠が保持されたり増加するという単調性の性質があるため、継続的なインストルメンテーションなしで過去のエラーを検出可能にする。
  • エラーが自然に痕跡を残さない場合でも、検出可能な証拠が存在することを保証するため、メモリ領域に「トリガーワイヤー」(例:キャンバリ)を設置する。
  • 通常の実行中にシステムコールおよびライブラリ関数をインタセプトし、パフォーマンスコストを負担せずにエラーの兆候を監視する。
  • エラーの証拠を検出した段階で、直前のチェックポイントまでロールバックし、アクティブなインストルメンテーション(例:ハードウェアのウォッチポイント)を有効にして再実行することで、障害の正確な行およびメモリアドレスを特定する。
  • フレームワークを即座に導入可能な共有ライブラリとして実装し、ターゲットアプリケーションの再コンパイルやOS、ハードウェアの変更が一切不要である。

実験結果

リサーチクエスチョン

  • RQ1動的解析を、精度を損なわず本番システムに導入可能なほど効率的にできるか?
  • RQ2継続的なインストルメンテーションを避けるために、軽量なモニタリングを用いて後からエラー証拠を信頼性高く検出できるか?
  • RQ3動的解析のパフォーマンスオーバーヘッドを5%未満に抑えることができるか、同時に重要なメモリエラーを検出可能か?
  • RQ4最小限のランタイムコストで、ロールバック・リプレイ機構を用いて、正確にエラーの発生行およびメモリアドレスを特定することが可能か?
  • RQ5再コンパイルやカスタムハードウェアが不要な、変更の加えられないバイナリおよびサードパーティライブラリと互換性を持つシステムを構築することが可能か?

主な発見

  • DoubleTakeは、SPEC CPU2006ベンチマークスイート全体で平均4%のパフォーマンスオーバーヘッドを達成しており、これまでで最も高速な動的解析システムである。
  • DoubleTakeは、誤検出なしにバッファオーバーフロー、使用後フリーのエラー、メモリリークを検出でき、正確にエラーの発生行およびメモリアドレスまで特定する。
  • DoubleTakeは、Valgrind(平均で17倍のパフォーマンス低下)やAddressSanitizer(約30%のオーバーヘッド)よりもはるかに低いオーバーヘッドを実現している。
  • DoubleTakeは、プログラム終了時だけでなく実行中にもメモリリークを検出可能であり、サーバーのような長時間稼働するアプリケーションに適している。
  • 再コンパイルやカスタムハードウェア、OSの変更が不要な即座に導入可能なライブラリとしての展開が可能である。
  • DoubleTakeは、Aftersight や Flashback といった類似システムに比べ、オーバーヘッドと導入の簡便さの両面で優れている。仮想マシンや追加プロセッサに依存しない。

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

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

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

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