Add v4 C7/C6 fast classify and small-segment v4 scaffolding

This commit is contained in:
Moe Charm (CI)
2025-12-10 19:14:38 +09:00
parent 3261025995
commit f2ce7256cd
11 changed files with 221 additions and 17 deletions

View File

@ -31,6 +31,21 @@
- Batch+THP 寄り(+`HAKMEM_FREE_POLICY=batch HAKMEM_DISABLE_BATCH=0 HAKMEM_THP=auto`, SS_OS_STATS=1: **33.24M ops/s**`madvise=3 enomem=0 disabled=0`。perf: task-clock 49.57ms / minor-faults 6,731 / user 35.4ms / sys 15.1ms。
- 所感: pf/OPS とも大差なし。低 madvise での改善は見られず、Batch+THP 側がわずかに良好(+1〜2%。vm.max_map_count が厳しい環境で failfast を避けたい場合のみ keep/STRICT=0 に切替える運用が現実的。
### Phase PF2: pf/Segment 足場v4 強制で pf ベースライン取得)
- 目的: C7/C6 v4 を前提に pf/OS の現状値を押さえ、small-object 専用 Segment Box を設計する地ならし。
- Release pf ベースラインv3 OFF, v4=C7+C6 ON:
- ENV: `HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE HAKMEM_BENCH_MIN_SIZE=16 HAKMEM_BENCH_MAX_SIZE=1024 HAKMEM_SS_OS_STATS=1 HAKMEM_SMALL_HEAP_V4_ENABLED=1 HAKMEM_SMALL_HEAP_V4_CLASSES=0xC0 HAKMEM_SMALL_HEAP_V3_ENABLED=0`
- perf stat: **31,779,973 ops/s**, cycles=205,322,023 / instructions=385,092,104 / task-clock=51.40ms / page-faults=6,702。`[SS_OS_STATS] alloc=2 free=4 madvise=2 enomem=0 disabled=0 mmap_total=2`
- DEBUG perf (cycles:u, -O0/-g, v4=C7+C6):
- Throughput=15,173,790 ops/s。self% 上位: tiny_alloc_gate_fast 13.33%, free 14.37% (small_heap_free_fast_v4 3.39%), main 12.93%, malloc 7.09%, ss_map_lookup 4.97%, memset/hak_super_registry_init 合算 ~4.5%, small_heap_alloc_fast_v4 2.23%, hak_tiny_size_to_class 2.21%, tiny_route_get 2.34%, front_gate_unified_enabled 2.36%, tiny_route_is_heap_kind 2.09%, xorshift32 2.08%。
- ドキュメント/足場:
- 追加: `docs/analysis/PF_STATUS_V4_202502.md`pf/OS 数値まとめ)、`docs/analysis/SMALLOBJECT_SEGMENT_V4_DESIGN.md`small-object Segment v4 設計メモ)。
- 追加: `core/box/smallsegment_v4_box.h` / `core/box/smallsegment_v4_env_box.h`(型と ENV だけ、挙動不変)。
- 健康診断Release 再ビルド後、v3 デフォルトで実行):
- Mixed 161024B (`HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE`): **36.16M ops/s**segv/assert なし)。
- C6-heavy (`HAKMEM_PROFILE=C6_HEAVY_LEGACY_POOLV1`, min=257/max=768): **28.33M ops/s**segv/assert なし)。
- 目安レンジからは少し低めMixed。今後の PF/Segment A/B はこのラインからの増減を確認する。
### Hotfix: madvise(ENOMEM) を握りつぶし、以降の madvise を停止Superslab OS Box
- 変更: `ss_os_madvise_guarded()` を追加し、madvise が ENOMEM を返したら `g_ss_madvise_disabled=1` にして以降の madvise をスキップ。EINVAL だけは従来どおり STRICT=1 で Fail-FastENV `HAKMEM_SS_MADVISE_STRICT` で緩和可)。
- stats: `[SS_OS_STATS]``madvise_enomem/madvise_other/madvise_disabled` を追加。HAKMEM_SS_OS_STATS=1 で確認可能。
@ -1071,3 +1086,13 @@ export HAKMEM_POOL_ZERO_MODE=header
- C6 v1: 28,690,913 ops/s
- C6 v4: 30,068,995 ops/s+4.8%segv/assert なし
- Mixed 161024B: デフォルトは C6 v1 のまま(`HAKMEM_SMALL_HEAP_V4_CLASSES=0x80` で C7-only。C6 v4 は研究箱として opt-in`0x40`)。
### Phase v4-5: C5 v4 パイロットC5-heavy 専用、強ゲート)
- 変更:
- v4 クラスビットに C5(bit5=0x20) を追加。HotBox_v4 / ColdIface_v4 / front free を C5 パスでも通電。
- `small_heap_v4_class_enabled(5)` 経由で route LUT が v4 を返せるようにしつつ、デフォルトは bit5=0研究箱
- ENV 例C5-only v4 の opt-in:
- `HAKMEM_SMALL_HEAP_V4_ENABLED=1`
- `HAKMEM_SMALL_HEAP_V4_CLASSES=0x20`
- 状態:
- 実装のみ。C5-heavy / Mixed A/B は未実施。デフォルトは C5 v1 のままMixed プロファイルも bit5=0で、segv/assert 無しを確認した上で昇格判断。