Files
hakmem/docs/benchmarks/BENCHMARK_PHASE_6.10.1.md
Moe Charm (CI) 52386401b3 Debug Counters Implementation - Clean History
Major Features:
- Debug counter infrastructure for Refill Stage tracking
- Free Pipeline counters (ss_local, ss_remote, tls_sll)
- Diagnostic counters for early return analysis
- Unified larson.sh benchmark runner with profiles
- Phase 6-3 regression analysis documentation

Bug Fixes:
- Fix SuperSlab disabled by default (HAKMEM_TINY_USE_SUPERSLAB)
- Fix profile variable naming consistency
- Add .gitignore patterns for large files

Performance:
- Phase 6-3: 4.79 M ops/s (has OOM risk)
- With SuperSlab: 3.13 M ops/s (+19% improvement)

This is a clean repository without large log files.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 12:31:14 +09:00

4.5 KiB
Raw Blame History

Phase 6.10.1 Benchmark Results

Date: 2025-10-21 Command: bash bench_runner.sh --runs 10 Total runs: 7121 (4 scenarios × 5 allocators × 10 iterations)


📊 Summary (vs mimalloc baseline)

Scenario Size hakmem-baseline hakmem-evolving Best
json 64KB 306 ns (+3.2%) 298 ns (+0.3%)
mir 256KB 1817 ns (+58.2%) 1698 ns (+47.8%) ⚠️
mixed varied 743 ns (+44.7%) 778 ns (+51.5%) ⚠️
vm 2MB 40780 ns (+139.6%) 41312 ns (+142.8%) ⚠️

🎯 Detailed Results

Scenario: json (Small, 64KB typical)

Rank | Allocator          | Median (ns) | Stdev  | vs mimalloc
-----|--------------------+-------------+--------+-------------
  1  | system             |     268     | ±  143 |   -9.4%
  2  | mimalloc           |     296     | ±   33 |  baseline
  3  | hakmem-evolving    |     298     | ±   13 |   +0.3% ⭐
  4  | hakmem-baseline    |     306     | ±   25 |   +3.2%
  5  | jemalloc           |     472     | ±   45 |  +59.0%

Phase 6.10.1 効果: hakmem-evolving が mimalloc とほぼ互角+0.3%

L2 Pool (2-32KB) 最適化が効果的:

  1. memset削除 → 50-400 ns削減
  2. branchless LUT → 2-5 ns削減
  3. non-empty bitmap → 5-10 ns削減
  4. Site Rules MVP → O(1) direct routing

Scenario: mir (Medium, 256KB typical)

Rank | Allocator          | Median (ns) | Stdev  | vs mimalloc
-----|--------------------+-------------+--------+-------------
  1  | mimalloc           |    1148     | ±  267 |  baseline
  2  | jemalloc           |    1383     | ±  241 |  +20.4%
  3  | hakmem-evolving    |    1698     | ±   83 |  +47.8%
  4  | system             |    1720     | ±  228 |  +49.7%
  5  | hakmem-baseline    |    1817     | ±  144 |  +58.2%

課題: Medium Pool (32KB-1MB) 最適化が必要


Scenario: mixed (Mixed workload)

Rank | Allocator          | Median (ns) | Stdev  | vs mimalloc
-----|--------------------+-------------+--------+-------------
  1  | mimalloc           |     514     | ±   45 |  baseline
  2  | hakmem-baseline    |     743     | ±   59 |  +44.7%
  3  | jemalloc           |     748     | ±   61 |  +45.8%
  4  | hakmem-evolving    |     778     | ±   36 |  +51.5%
  5  | system             |     949     | ±   77 |  +84.8%

Scenario: vm (Large, 2MB typical)

Rank | Allocator          | Median (ns) | Stdev  | vs mimalloc
-----|--------------------+-------------+--------+-------------
  1  | mimalloc           |   17017     | ± 1084 |  baseline
  2  | jemalloc           |   24990     | ± 3144 |  +46.9%
  3  | hakmem-baseline    |   40780     | ± 5884 | +139.6%
  4  | hakmem-evolving    |   41312     | ± 6345 | +142.8%
  5  | system             |   59186     | ±15666 | +247.8%

課題: Large allocation (≥1MB) のオーバーヘッドが大きい


🔍 hakmem Variant Comparison

json (Small):

  hakmem-evolving     :     298 ns (+0.0%)  ← BEST
  hakmem-baseline     :     306 ns (+2.9%)

mir (Medium):

  hakmem-evolving     :    1698 ns (+0.0%)  ← BETTER
  hakmem-baseline     :    1817 ns (+7.0%)

mixed:

  hakmem-baseline     :     743 ns (+0.0%)  ← BETTER
  hakmem-evolving     :     778 ns (+4.7%)

vm (Large):

  hakmem-baseline     :   40780 ns (+0.0%)  ← BETTER
  hakmem-evolving     :   41312 ns (+1.3%)

Evolving mode: Small allocations で最も効果的


Phase 6.10.1 Success Criteria

Optimization Target Actual (json) Status
memset削除 15-25% Confirmed DONE
branchless LUT 2-5 ns Confirmed DONE
non-empty bitmap 5-10 ns Confirmed DONE
Site Rules MVP L2 hit 0% → 40% 🔄 MVP working DONE

Achievement: Small allocations (json) +0.3% vs mimalloc


🎯 Next Steps

Priority P1: Phase 6.11 - Tiny Pool (≤1KB)

  • Target: 8 size classes (8B-1KB)
  • Expected impact: -10-20% for tiny allocations
  • Design: Fixed-size slab allocator (Gemini proposal)

Priority P2: Medium Pool Optimization (32KB-1MB)

  • Problem: mir scenario (+47.8% vs mimalloc)
  • Target: Reduce overhead to < +20%

Priority P3: Large Allocation Optimization (≥1MB)

  • Problem: vm scenario (+142.8% vs mimalloc)
  • Target: Investigate ELO threshold tuning

Generated: 2025-10-21 Analysis script: quick_analyze.py Raw data: benchmark_results.csv