diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 435742b1..5618d08a 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -1,4 +1,28 @@ -## HAKMEM 状況メモ (2025-12-05 更新 / C7 Warm/TLS Bind 反映) +## HAKMEM 状況メモ (2025-12-10 更新 / Mixed 基準ライン固定) + +### Phase S-FINAL: Mixed 16–1024B 現行ベースライン固定(C7-only v3 / front v3+LUT+fast classify ON) +- ベンチ: `./bench_random_mixed_hakmem 1000000 400 1`(1 thread, ws=400, iters=1M, seed=1)。 +- ENV: + - プリセット: `HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE` + - bench_profile により自動注入される値: + - `HAKMEM_TINY_HEAP_PROFILE=C7_SAFE` + - `HAKMEM_TINY_C7_HOT=1` + - `HAKMEM_TINY_HOTHEAP_V2=0` + - `HAKMEM_SMALL_HEAP_V3_ENABLED=1` + - `HAKMEM_SMALL_HEAP_V3_CLASSES=0x80`(C7-only SmallObject v3) + - `HAKMEM_POOL_V2_ENABLED=0` + - `HAKMEM_TINY_FRONT_V3_ENABLED=1` + - `HAKMEM_TINY_FRONT_V3_LUT_ENABLED=1` + - `HAKMEM_TINY_PTR_FAST_CLASSIFY_ENABLED=1` + - サイズ範囲: `HAKMEM_BENCH_MIN_SIZE=16 HAKMEM_BENCH_MAX_SIZE=1024`(Mixed 16–1024B 前提。未設定時は既定値を使用) + - その他: `HAKMEM_FREE_POLICY` / `HAKMEM_THP` / stats 系 ENV は未設定(デフォルトのまま)。 +- 結果(現 HEAD, Release): + - HAKMEM: `Throughput = 35771829 ops/s [iter=1000000 ws=400] time=0.028s`(約 **35.8M ops/s**)。 + - ログ: `/tmp/mixed_baseline.log`(ベンチ実行時の標準出力を tee 済み)。 +- メモ: + - 以前の PhaseS1/「Mixed 16–1024B 新基準」では同系統の構成で **44.45M ops/s** を記録していたが、その後のフロント/Tiny/Pool/Superslab 周りのリファクタリングと安全化(madvise ガード・DSO ガード・DEBUG パス整備など)により、現 HEAD の同条件スループットは **約 36M ops/s** レンジに落ち着いている。 + - 以降の最適化はこの Phase S-FINAL を基準ラインとして扱い、A/B は必ず `HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE` 前提で比較する(過去の 44M ops/s とは直接比較しない)。 + - Mixed の「健康診断 run」として、少なくとも `HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE ./bench_random_mixed_hakmem 1000000 400 1` を 1 本通し、segv/assert なし・スループットが 35–38M ops/s レンジに入っていることを確認する。 ### Phase FP1: Mixed 16–1024B madvise A/B(C7-only v3, front v3+LUT+fast classify ON, ws=400, iters=1M, Release) - Baseline (MIXED_TINYV3_C7_SAFE, SS_OS_STATS=1): **32.76M ops/s**。`[SS_OS_STATS] madvise=4 madvise_enomem=1 madvise_disabled=1`(warmup で ENOMEM→madvise 停止)。perf: task-clock 50.88ms / minor-faults 6,742 / user 35.3ms / sys 16.2ms。 diff --git a/PERF_ANALYSIS_16_1024B_20251205.md b/PERF_ANALYSIS_16_1024B_20251205.md index 95c24060..9ac4157d 100644 --- a/PERF_ANALYSIS_16_1024B_20251205.md +++ b/PERF_ANALYSIS_16_1024B_20251205.md @@ -4,6 +4,17 @@ **ベンチマーク**: `bench_random_mixed` (1M iterations, ws=400, seed=1) **サイズ範囲**: 16-1024 bytes (Tiny allocator: 8 size classes) +## Quick Baseline Refresh (2025-12-10, current HEAD, C7-only v3 / front v3 ON) + +**ENV (Release)**: `HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE HAKMEM_BENCH_MIN_SIZE=16 HAKMEM_BENCH_MAX_SIZE=1024` +(bench_profile により `TINY_HEAP_PROFILE=C7_SAFE TINY_C7_HOT=1 TINY_HOTHEAP_V2=0 SMALL_HEAP_V3_ENABLED=1 SMALL_HEAP_V3_CLASSES=0x80 POOL_V2_ENABLED=0 TINY_FRONT_V3_ENABLED=1 TINY_FRONT_V3_LUT_ENABLED=1 TINY_PTR_FAST_CLASSIFY_ENABLED=1` が自動注入される。FREE_POLICY/THP は未設定のまま)。 + +| Allocator | Throughput (ops/s) | 備考 | +|-----------|--------------------|------| +| HAKMEM (current HEAD, C7-only v3) | **35,771,829** | `Throughput = 35771829 ops/s [iter=1000000 ws=400]` | + +> Note: 以前の PhaseS1 では同系統の構成で **44,447,714 ops/s** を記録していたが、その後の Tiny/front/pool/Superslab 側のリファクタリングと安全化により、現 HEAD では同条件でおおよそ 36M ops/s レンジに落ち着いている。以降の最適化はこの数値を新しい基準ラインとして扱う。 + ## Quick Baseline Refresh (2025-12-05, C7-only v3 / front v3 ON) **ENV (Release)**: `HAKMEM_BENCH_MIN_SIZE=16 MAX_SIZE=1024 TINY_HEAP_PROFILE=C7_SAFE TINY_C7_HOT=1 TINY_HOTHEAP_V2=0 SMALL_HEAP_V3_ENABLED=1 SMALL_HEAP_V3_CLASSES=0x80 POOL_V2_ENABLED=0`(front v3/LUT デフォルト ON, SMALL_HEAP_V3_STATS=1)。 diff --git a/docs/analysis/ENV_PROFILE_PRESETS.md b/docs/analysis/ENV_PROFILE_PRESETS.md index ada70dba..9639ba21 100644 --- a/docs/analysis/ENV_PROFILE_PRESETS.md +++ b/docs/analysis/ENV_PROFILE_PRESETS.md @@ -14,19 +14,12 @@ ### ENV 最小セット(Release) ```sh +# プリセットでまとめて指定 +HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE + +# Mixed 16–1024B 前提のサイズ範囲(必要に応じて明示) HAKMEM_BENCH_MIN_SIZE=16 HAKMEM_BENCH_MAX_SIZE=1024 -HAKMEM_TINY_HEAP_PROFILE=C7_SAFE -HAKMEM_TINY_C7_HOT=1 -HAKMEM_TINY_HOTHEAP_V2=0 -HAKMEM_SMALL_HEAP_V3_ENABLED=1 -HAKMEM_SMALL_HEAP_V3_CLASSES=0x80 -HAKMEM_POOL_V2_ENABLED=0 -HAKMEM_TINY_FRONT_V3_ENABLED=1 -HAKMEM_TINY_FRONT_V3_LUT_ENABLED=1 -HAKMEM_TINY_PTR_FAST_CLASSIFY_ENABLED=1 -HAKMEM_FREE_POLICY=batch -HAKMEM_THP=auto ``` ### 任意オプション @@ -37,11 +30,14 @@ HAKMEM_TINY_HEAP_STATS_DUMP=1 HAKMEM_SMALL_HEAP_V3_STATS=1 ``` - v2 系は触らない(C7_SAFE では Pool v2 / Tiny v2 は常時 OFF)。 -- vm.max_map_count が厳しい環境で Fail-Fast を避けたいときの応急処置(性能はほぼ同等〜微減): +- FREE_POLICY/THP を触る実験例(現在の HEAD では必須ではなく、組み合わせによっては微マイナスになる場合もある): ```sh HAKMEM_FREE_POLICY=keep HAKMEM_DISABLE_BATCH=1 HAKMEM_SS_MADVISE_STRICT=0 +# or +HAKMEM_FREE_POLICY=batch +HAKMEM_THP=auto ``` ---