Generated comprehensive performance analysis reports: - PERF_ANALYSIS_EXECUTIVE_SUMMARY.md: Executive summary with key findings - README_PERF_ANALYSIS.md: Index and navigation guide - perf_analysis_summary.md: Detailed bottleneck analysis Key findings: - HAKMEM: 55.7M ops/s vs System: 86.7M ops/s (-35.7%) - Top bottleneck: SuperSlab memset (23.83% CPU time) - Quick win: Remove redundant memset → +10-15% throughput - Phase 1 optimizations target: 65M ops/s (+17%)
5.1 KiB
5.1 KiB
HAKMEM Allocator Performance Analysis Results
分析実施日: 2025-11-28
分析対象: HAKMEM allocator (commit 0ce20bb83)
ベンチマーク: bench_random_mixed (1,000,000 ops, working set=256)
ツール: Linux perf (record/stat/report/annotate)
📊 クイックサマリー
| 指標 | HAKMEM | System malloc | 差分 |
|---|---|---|---|
| Throughput | 55.7M ops/s | 86.7M ops/s | -35.7% ❌ |
| IPC | 2.12 | 2.09 | +1.4% ✅ |
| Branch Miss | 2.56% | 3.39% | -24.5% ✅ |
| Cache Miss | 9.28% | 13.26% | -30.0% ✅ |
| Instructions | 167M | 94M | +78.4% ❌ |
| Cache Refs | 1.86M | 340K | +448% ❌ |
結論: 効率は良いが仕事量が多すぎる → 不要な処理の削減が最優先
📁 生成ファイル一覧
メインレポート
-
PERF_ANALYSIS_EXECUTIVE_SUMMARY.md ⭐
- エグゼクティブサマリー
- トップ3ボトルネック
- 最適化ロードマップ (Phase 1-3)
- すぐに試せるコマンド
-
perf_analysis_summary.md
- 詳細分析レポート (9.4KB)
- 全ボトルネックの説明
- 優先度付き最適化提案 (5項目)
- 実測効果予測 (楽観的/保守的シナリオ)
-
perf_comparison_chart.txt
- 視覚的比較チャート
- ASCII バーグラフ形式
生データ
- perf_hakmem_stats.txt - HAKMEM の perf stat 出力
- perf_system_stats.txt - System malloc の perf stat 出力
- perf_hakmem_hotspots.txt - ホットスポット詳細 (perf report)
- perf_hakmem_callgraph.txt - コールグラフ (perf report -g)
- perf_annotate_malloc.txt - malloc 関数のアセンブリアノテーション
🔥 トップ3ボトルネック
1. SuperSlab 初期化 (23.83% CPU時間)
- 原因: 4つの memset() で 1MB-2MB をゼロクリア
- 対策: memset 削除 (mmap は既にゼロ初期化済み)
- 効果: +10-15% throughput
- 実装箇所:
/mnt/workdisk/public_share/hakmem/core/hakmem_tiny_superslab.c:912-915
2. 多層分岐ルーティング (36M branches)
- 原因: smallmid → tiny → mid → ACE の順次チェック
- 対策: Dispatch table で一発判定
- 効果: +5-8% throughput
3. 過剰なキャッシュアクセス (1.86M refs)
- 原因: SuperSlab メタデータが大きい、Hot/Cold 混在
- 対策: Cache line 最適化 (hot fields を先頭64Bに集約)
- 効果: +3-5% cache efficiency
🎯 推奨アクション
すぐに試せる (1-2日)
cd /mnt/workdisk/public_share/hakmem
# 1. memset 削除版
cp core/hakmem_tiny_superslab.c core/hakmem_tiny_superslab.c.bak
sed -i '912,915s/^/\/\/ PERF_OPT: /' core/hakmem_tiny_superslab.c
make clean && make
./bench_random_mixed_hakmem 1000000 256 42
# 2. mincore 無効化版
make clean
make CFLAGS="-DHAKMEM_DISABLE_MINCORE_CHECK=1"
./bench_random_mixed_hakmem 1000000 256 42
期待効果: 55M → 63-67M ops/s (+13-20%)
📈 最適化ロードマップ
| Phase | 実装期間 | 目標 | 施策 |
|---|---|---|---|
| Phase 1 | 1-2日 | 65M ops/s (+17%) | memset削除, mincore無効化, likely hints |
| Phase 2 | 1週間 | 77M ops/s (+39%) | dispatch table, 512KB SuperSlab, LTO, cache line |
| Phase 3 | 2週間 | 詳細分析 | Valgrind, MT bench, workload別最適化 |
🛠️ 使用したコマンド
プロファイリング
# ホットスポット分析
perf record -g ./bench_random_mixed_hakmem 1000000 256 42
perf report --stdio | head -100 > perf_hakmem_hotspots.txt
# 統計比較
perf stat -e cycles,instructions,cache-references,cache-misses,branches,branch-misses \
./bench_random_mixed_hakmem 1000000 256 42 2>&1 | tee perf_hakmem_stats.txt
perf stat -e cycles,instructions,cache-references,cache-misses,branches,branch-misses \
./bench_random_mixed_system 1000000 256 42 2>&1 | tee perf_system_stats.txt
# コールグラフ
perf report --stdio -g graph,0.5,caller --no-children | head -200 > perf_hakmem_callgraph.txt
# アノテーション
perf annotate --stdio malloc > perf_annotate_malloc.txt
📚 関連ファイル
ソースコード
/mnt/workdisk/public_share/hakmem/core/box/hak_alloc_api.inc.h- Alloc API/mnt/workdisk/public_share/hakmem/core/box/hak_free_api.inc.h- Free API/mnt/workdisk/public_share/hakmem/core/hakmem_tiny_superslab.c- SuperSlab 実装/mnt/workdisk/public_share/hakmem/core/hakmem_shared_pool.c- Shared Pool
ベンチマーク
/mnt/workdisk/public_share/hakmem/bench_random_mixed_hakmem- HAKMEM版/mnt/workdisk/public_share/hakmem/bench_random_mixed_system- System malloc版
🔍 詳細を読むには
- 全体像を把握:
PERF_ANALYSIS_EXECUTIVE_SUMMARY.mdを読む (5分) - 詳細な分析:
perf_analysis_summary.mdを読む (15分) - 生データ確認:
perf_hakmem_*.txtファイル群を参照
次のステップ:
PERF_ANALYSIS_EXECUTIVE_SUMMARY.mdを開く- "すぐに試せるコマンド" を実行
- スループット改善を確認
質問・フィードバック: 分析者 Claude Code (Sonnet 4.5)