[論文レビュー] Understanding and Finding JIT Compiler Performance Bugs
この論文は実証的に四つのエンジンにわたるJITコンパイラの性能バグを研究し、層状の差分性能テストのためのJitteryを提案し、ツールを用いて12件の新しいバグを報告する(11件は確認済み、6件は修正済み)。
Just-in-time (JIT) compilers are key components for many popular programming languages with managed runtimes (e.g., Java and JavaScript). JIT compilers perform optimizations and generate native code at runtime based on dynamic profiling data, to improve the execution performance of the running application. Like other software systems, JIT compilers might have software bugs, and prior work has developed a number of automated techniques for detecting functional bugs (i.e., generated native code does not semantically match that of the original code). However, no prior work has targeted JIT compiler performance bugs, which can cause significant performance degradation while an application is running. These performance bugs are challenging to detect due to the complexity and dynamic nature of JIT compilers. In this paper, we present the first work on demystifying JIT performance bugs. First, we perform an empirical study across four popular JIT compilers for Java and JavaScript. Our manual analysis of 191 bug reports uncovers common triggers of performance bugs, patterns in which these bugs manifest, and their root causes. Second, informed by these insights, we propose layered differential performance testing, a lightweight technique to automatically detect JIT compiler performance bugs, and implement it in a tool called Jittery. We incorporate practical optimizations into Jittery such as test prioritization, which reduces testing time by 92.40% without compromising bug-detection capability, and automatic filtering of false-positives and duplicates, which substantially reduces manual inspection effort. Using Jittery, we discovered 12 previously unknown performance bugs in the Oracle HotSpot and Graal JIT compilers, with 11 confirmed and 6 fixed by developers.
研究の動機と目的
- 主要エンジン(HotSpot、Graal、V8、SpiderMonkey)における実世界のJITコンパイラ性能バグを評価する。
- テストとデバッグを導くために、トリガー、症状、根本原因を特徴付ける。
- 層状の差分テストに基づく軽量な検出ツール(Jittery)の設計・評価。
- 将来の研究を支援するJIT性能バグの公開データセットを提供する。
提案手法
- 4つのJITエンジン(HotSpot、Graal、V8、SpiderMonkey)からの191件のバグレポートを手動で詳細に分析する。
- 性能バグの共通のトリガー、パターン、根本原因を特定する。
- Jitteryを設計・実装する。層状の差分性能テストツールで、many small programs にわたって2つのJIT設定を比較する。
- テストの時間と偽陽性を減らすためのテスト優先度付けや剪定などの最適化を組み込む。
- Jitteryを実エンジンで実行して評価し、以前には未知だったバグを発見する(12件;11件は確認済み;6件は修正済み)。
- プロジェクトリポジトリでデータセットとスクリプトを公開する。
実験結果
リサーチクエスチョン
- RQ1RQ1: JIT性能バグを引き起こす入力アーティファクトは何か。
- RQ2RQ2: JIT性能バグの共通の症状は何か。
- RQ3RQ3: JIT性能バグの共通の根本原因は何か。
主な発見
- 小さなマイクロベンチマークによって表れるバグは全体のほぼ半数にのぼる。
- バグは性能退化や同等実行間の差異といった比較信号を通じて検出されることが多い。
- 推測やランタイム相互作用といったJIT特有の機能は、従来の最適化問題を超える重要なバグ源となる。
- Jitteryは層状のテストと優先度付けによってテスト時間を92.40%削減しつつ、バグ検出性を損なわない。
- Jitteryを用いて、著者らはOracle HotSpotとGraal JITコンパイラで以前は未知だった性能バグを12件発見した。11件は確認され、6件は開発者によって修正された。
- この研究は今後の研究のためのJIT性能バグの公開データセットを提供する。
より良い研究を、今すぐ始めましょう
論文設計から論文執筆まで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。