## Memo ## Memo with LLM ### 論文情報 - **タイトル**: PerfBench: Can Agents Resolve Real-World Performance Bugs? - **著者と所属**: - Spandan Garg (Microsoft Corporation) - Roshanak Zilouchian Moghaddam (Microsoft Corporation) - **カンファレンス/ジャーナル名**: arXiv preprint (arXiv:2509.24091) - **発表年**: 2025年9月28日投稿 ### 論文概要 本論文は、ソフトウェア工学エージェントが実世界のパフォーマンスバグを解決できるかを評価するための新しいベンチマーク「PerfBench」を提案している。PerfBenchは、GitHubの人気.NETリポジトリから収集された81の実世界のパフォーマンスバグ修正タスクで構成され、エージェントが独自のパフォーマンスベンチマークを生成し、実行メトリクスを比較することで修正を検証する新しい評価ハーネスを特徴としている。評価の結果、現在の最先端コーディングエージェントはパフォーマンス最適化タスクに苦戦しており、ベースラインの[[2025__ICLR__OpenHands - An Open Platform for AI Software Developers as Generalist Agents|OpenHands]]エージェントの成功率は約3%にとどまるが、パフォーマンス対応のツールと指示を組み込んだOpenHands-Perf-Agentでは約20%の成功率を達成している。 ### 詳細解説 #### 問題設定 **入力**: - .NETリポジトリのコンテキスト(パフォーマンスバグ修正前のコミット時点) - GitHubイシューに記載されたパフォーマンス問題の説明 - リポジトリ名、.NETバージョン、コミットハッシュなどのメタデータ **出力**: - パフォーマンス問題を解決するためのコード変更 - BenchmarkDotNetフレームワークを使用した自己生成ベンチマークテスト - ベンチマーク結果の比較分析 **必要なデータ**: GitHub上の1,200以上の.NETリポジトリ(スター数>10)から収集された、パフォーマンス関連キーワード("performance", "slow", "optimization", "memory", "CPU"など)を含むコミット。各タスクは人間の専門家によって検証され、本物のパフォーマンスバグと改善を表していることが確認されている。 #### 提案手法 本研究では、2つの主要なコンポーネントを提案している。 **1. PerfBenchベンチマーク** - 81の実世界パフォーマンスバグ修正タスク - 32の異なる.NETリポジトリから収集 - 各タスクにはDockerコンテナによる隔離された実行環境 - 以下のメタデータを含む: - リポジトリ名と.NETバージョン - バグありとバグ修正後のコミットハッシュ - GitHubイシューの説明 - 正解パッチ **2. 評価ハーネス** 評価ハーネスは以下の自動化されたプロセスで構成される: 評価メトリクス: - **成功率(%)**: 既存のユニットテストに合格し、少なくとも1つのベンチマークでパフォーマンスが改善され、他のベンチマークで劣化がないタスクの割合 - **パフォーマンス改善**: 実行時間削減、メモリ使用量削減(KB、ms単位など) - **トークン使用量**: タスク解決に使用された入力・出力トークン数 - **ステップ数**: エージェントがタスク解決に要したステップ数 - **コスト**: LLMプロバイダーの価格設定に基づく実行コスト($) **3. OpenHands-Perf-Agent** ベースラインのOpenHandsエージェントに対して、以下の2つの主要な改良を加えた: (a) **パフォーマンス対応指示**: - ベンチマーク生成の明示的な指示 - BenchmarkDotNetフレームワークの使用 - MemoryDiagnoserを使用したメモリ測定 - パフォーマンスバグ修正の高レベルステップの明確化 (b) **出力処理**: - ベンチマーク結果の要約テーブルのみを抽出(トークン使用量を90%以上削減) - 成功時は要約統計のみを保持 - エラー時は完全な出力を保持して診断を可能に #### 新規性 **1. 初のパフォーマンスバグ修正ベンチマーク** 既存のベンチマーク(SWE-bench等)は機能的正確性に焦点を当てているが、PerfBenchはパフォーマンスバグという非機能的問題を評価する初のベンチマークである。 **2. エージェント生成ベンチマークによる評価** 事前に存在するテストスイートに依存せず、エージェント自身にパフォーマンスベンチマークを生成させ、開発者の修正とエージェントの修正の実行メトリクスを比較する新しい評価手法。 **3. 包括的なパフォーマンスバグ分類体系** 81のパフォーマンスバグを以下の5つの主要カテゴリに分類: - メモリ管理問題(33件、40.7%) - 並行処理とスレッド問題(14件、17.3%) - 非効率なアルゴリズムとデータ構造(14件、17.3%) - I/Oとシリアライゼーションのパフォーマンス(12件、14.8%) - ビルドと解析ツールのパフォーマンス(8件、9.9%) **4. パフォーマンス対応エージェントの設計** 機能的バグ修正とは根本的に異なるパフォーマンスバグ修正のワークフローを体系化し、専用のエージェント設計を提案。 #### 実験設定 **使用データセット**: - GitHub上の約1,200の.NETリポジトリ(スター数>10) - 最終的に81の高品質タスクを選定 - リポジトリあたり平均1,227ファイル - 問題記述あたり平均121.6語 - 修正コミットあたり平均3.4ファイル、103.7行の変更 **評価指標**: 1. 成功率(%) 2. パフォーマンス改善(相対値%と絶対値) - CPU使用率改善(μs単位) - メモリ割り当て改善(bytes単位) 3. トークン使用量 4. ステップ数 5. ドルコスト **エージェント構成**: - OpenHands(ベースライン): デフォルトのバグ修正プロンプトをC#用に調整 - OpenHands-Perf-Agent: パフォーマンス対応の指示とツールを追加 **使用モデル**: - GPT-4.1 - Claude Sonnet 4 **実行環境**: - 各タスクは隔離されたDockerコンテナで実行 - タスクあたり最大100ステップまで許可 #### 実験結果 **1. 全体的なパフォーマンス** 主要な知見: - ベースラインエージェントは4%未満の成功率で、機能的バグ修正ベンチマーク(SWE-bench Verified >60%)と比較して大幅に低い - OpenHands-Perf-Agentは15-20%の成功率を達成し、ベースラインに対して最大5倍の改善 - Claude Sonnet 4はGPT-4.1よりも優れたパフォーマンスとコスト効率を示す **2. カテゴリ別パフォーマンス** 知見: - I/Oとシリアライゼーションのバグが最も高い成功率(33.3%) - アルゴリズム問題も比較的高い成功率(21.4%) - 並行処理、ビルドツールなどの複雑なカテゴリでは依然として低い成功率 **3. パフォーマンス改善の分析** 成功した修正の分析: - メモリ割り当て削減: すべての成功した修正で20%以上の改善、一部はKBからMBオーダーの改善 - CPU使用率改善: 通常0-40%の範囲、マイクロ秒からミリ秒オーダーの改善 - 最高のCPU改善はアルゴリズムの非効率性に対処した修正に対応 **4. 主要な発見** - パフォーマンスバグ修正は機能的バグ修正とは根本的に異なるアプローチが必要 - 明示的なパフォーマンス対応の指示がエージェントの成功に不可欠 - ベンチマーク出力の適切な処理により、トークン使用量を90%以上削減可能 - 現在のエージェントには依然として大きな改善の余地がある ## Abstract パフォーマンスバグは、機能的な障害を引き起こすことなく計算資源を浪費するソフトウェアの非効率性であり、検出と修正が特に困難である。ソフトウェア工学エージェントの最近の進歩は自動バグ修正において有望な結果を示しているが、既存のベンチマークは主に機能的正確性に焦点を当てており、パフォーマンスバグのような非機能的問題を特定し解決するエージェントの能力を評価できていない。本論文では、GitHubの人気.NETリポジトリから収集された81の実世界のパフォーマンスバグ修正タスクで構成されるベンチマーク「PerfBench」を紹介する。既存のベンチマークが事前に存在するテストスイートに依存しているのとは異なり、PerfBenchはエージェントが独自のパフォーマンスベンチマークを生成できる新しい評価ハーネスを特徴とし、開発者の修正とエージェントの修正について収集された実行メトリクスを比較することで修正を検証する。PerfBenchの各タスクは、パフォーマンス関連の問題にリンクされた実際の開発者の修正から派生し、人間の専門家によって検証されており、実世界の関連性を保証している。我々の評価により、現在の最先端コーディングエージェントはパフォーマンス最適化タスクに苦戦しており、ベースラインのOpenHandsエージェントは我々のベンチマークで約3%の成功率しか達成していないことが明らかになった。我々は、パフォーマンス対応のツールと指示を組み込んだOpenHands-Perf-Agentを開発し、ベンチマークで約20%の成功率を達成した。エージェントが変更をベンチマークするための適切な指示と、ベンチマーク出力処理のためのツールを確実に持つことで、エージェントのパフォーマンスを大幅に改善できることを示したが、依然として改善の余地は残っている。PerfBenchは、パフォーマンス問題を修正するエージェントの能力を向上させるための挑戦的なテストセットを提供する。