Files
hakmem/docs/archive/BENCH_MODE.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

90 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Bench Mode (Tiny-focused, mimalloc-inspired)
Purpose
- Tinyホットパスに全振りして、syntheticな小物ベンチbench_comprehensive_hakmemで上限性能を測るプリセット
- 直リンクPGOで 400M+ 帯、System malloc と互角以上を狙う
Recommended Setup
- Build: PGO直リンク
- `./build_pgo.sh all`
- `HAKMEM_WRAP_TINY=1 ./bench_comprehensive_hakmem`
- Flags/Env既定で余計な観測はOFFになっています
- `export HAKMEM_WRAP_TINY=1` # Tiny Pool 有効
- 学習/観測は未設定OFFでOK`HAKMEM_LEARN`/`HAKMEM_PROF`/`HAKMEM_SITE_RULES`
- サイズヒストグラム: 設定時のみ有効 `HAKMEM_HIST_SAMPLE=N`(ベンチ時は未設定推奨)
- 共有ライブラリLD_PRELOADも試す場合PGO
- `make pgo-profile-shared && make pgo-build-shared`
- `HAKMEM_WRAP_TINY=1 LD_PRELOAD=./libhakmem.so ./bench_comprehensive_system`
What This Mode Does
- Tiny fast-path 最優先hak_alloc_at()の最前段)
- Magazine pop/push を可能な限り短絡化
- 観測/学習/ヒストグラムをホットパスから外す必要時のみON
Notes
- このモードは「このベンチで最大値を出すため」の最適化を優先します。
- 実アプリでは観測・学習ACE/Learner等をONにしてバランスを取ってください。
Direct-Link Comparison (mimalloc)
- 直リンクで公平に比較するためのターゲットを追加しています。
- mimalloc直リンク: `make bench_comprehensive_mi`
- 実行前に共有libパスを通す: `export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/mimalloc-bench/extern/mi/out/release`
- 実行: `./bench_comprehensive_mi`
- HAKMEM直リンク: `./bench_comprehensive_hakmem`
- LD_PRELOADに依存せず、コアの速さを安定に比較できます。
Tiny Param Sweep / RSS
- パラメタスイープ: `bash scripts/sweep_tiny_params.sh 100000`
- RSS計測steady-state: `bash scripts/measure_rss_tiny.sh <size> <live> <iters>`
- 例: `bash scripts/measure_rss_tiny.sh 64 20000 1000`
- 退出時フラッシュを有効化: `HAKMEM_TINY_FLUSH_ON_EXIT=1 ./bench_...`
- リフィルバッチ A/B小サイズ向け:
- `HAKMEM_TINY_REFILL_MAX_HOT`既定192/ `HAKMEM_TINY_REFILL_MAX`既定64
- 例: `HAKMEM_TINY_REFILL_MAX_HOT=256 HAKMEM_TINY_REFILL_MAX=128 bash scripts/run_tiny_hot_triad.sh 80000`
Ultra Tiny Mode (SLL-only)
- ベンチ向けにホットパスを極限まで単純化するモードmimalloc風
- 有効化: `export HAKMEM_TINY_ULTRA=1`
- 効果:
- alloc/freeのホットパスから remote 監視・mini-mag・統計を外し、SLL pop/push 中心に。
- SLLが空のときだけクラスロック下でバッチ補充SuperSlab/TinySlabから取り出してSLLへ積む
- 併用推奨ノブ:
- `HAKMEM_TINY_REMOTE_DRAIN_TRYRATE=0`, `HAKMEM_TINY_REMOTE_DRAIN_THRESHOLD=1000000`
- `HAKMEM_TINY_TLS_SLL=1`既定ON
- `HAKMEM_TINY_MAG_CAP=128`64Bは512をA/B
Ultra Tunables (per-class overrides)
- バッチとSLL capをクラスごとに上書きできますUltraのみ:
- `HAKMEM_TINY_ULTRA_BATCH_C{0..7}=N`
- `HAKMEM_TINY_ULTRA_SLL_CAP_C{0..7}=N`
- 推奨初期値(直リンク):
- 16B (class=1): `ULTRA_BATCH_C1=96`, `ULTRA_SLL_CAP_C1=384`
- 32B (class=2): `ULTRA_BATCH_C2=96`, `ULTRA_SLL_CAP_C2=384`
- 64B (class=3): `ULTRA_BATCH_C3=224`, `ULTRA_SLL_CAP_C3=768`
- スイープ: `bash scripts/sweep_ultra_params.sh 40000 150`
Experimental: FLINT (Frontend + Intelligence)
- FRONT: `HAKMEM_TINY_FRONTEND=1`FastCache最前段、実験
- INT: `HAKMEM_INT_ENGINE=1`イベント収集BG適応、オーバーヘッド極小
- Note:
- 現時点のFRONTは一部ケースで不安定triadの56/64/128でセグフォ報告。既定はOFF、A/B実験のみ推奨。
- INTのみFRONTなしは安定・低オーバーヘッド。学習の準備としてA/BでON可。
Quick Runners (CSV outputs)
- Comprehensive pair (direct-link HAKMEM vs mimalloc):
- `bash scripts/run_comprehensive_pair.sh`
- CSV: `bench_results/comp_pair_YYYYMMDD_HHMMSS/summary.csv`
- Tiny hot triad (HAKMEM/System/mimalloc):
- `bash scripts/run_tiny_hot_triad.sh 80000`
- CSV: `bench_results/tiny_hot_triad_YYYYMMDD_HHMMSS/results.csv`
- Random mixed triad (various working sets):
- `bash scripts/run_random_mixed_matrix.sh 120000`
- CSV: `bench_results/random_mixed_YYYYMMDD_HHMMSS/results.csv`
- Bench Preset: TinyHot 400Mbenchonly
- 目的: ≤64B帯のsyntheticベンチ直リンクでピークを出す専用プリセットメインラインには影響なし
- 実行PGO, SLLonly + warmup, 32B調整版:
- `bash scripts/run_tiny_sllonly_r12w192_triad.sh 30000`
- ウォームアップ: 8=64, 16=96, 32=192, 64=192初回のみ
- REFILLクラス別: 32B=12他は既定8〜12をA/B
- 期待: 824Bで400M超、32Bは400430MPGO/環境依存)