Add v4 C7/C6 fast classify and small-segment v4 scaffolding
This commit is contained in:
@ -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 16–1024B (`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-Fast(ENV `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 16–1024B: デフォルトは 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 無しを確認した上で昇格判断。
|
||||
|
||||
Reference in New Issue
Block a user