Phase v4-mid-1: C6-only v4 route + page_meta_of() Fail-Fast validation
Implementation: - SMALL_SEGMENT_V4_* constants (SIZE=2MiB, PAGE_SIZE=64KiB, MAGIC=0xDEADBEEF) - smallsegment_v4_page_meta_of(): O(1) mask+shift lookup with magic validation - Computes segment base: addr & ~(2MiB - 1) - Verifies SmallSegment magic number - Calculates page_idx: (addr - seg_base) >> PAGE_SHIFT (16) - Returns non-NULL sentinel for now (full page_meta[] in Phase v4-mid-2) Stubs for C6-only phase: - small_heap_alloc_fast_v4(): C6 returns NULL → pool v1 fallback - small_heap_free_fast_v4(): C6 calls page_meta_of() for Fail-Fast, then pool v1 fallback Documentation: - ENV_PROFILE_PRESETS.md: Add "C6_ONLY_SMALLOBJECT_V4" research profile - HAKMEM_SMALL_HEAP_V4_ENABLED=1, HAKMEM_SMALL_HEAP_V4_CLASSES=0x40 - Expected: Throughput ≈ 28–29M ops/s (same as v1) Build: - ビルド成功(警告のみ) - Backward compatible, alloc/free stubs fall back to pool v1 Sanity: - C6-heavy with v4 opt-in: segv/assert なし - page_meta_of() lookup working correctly - Performance unchanged (expected for stub phase) Status: - C6-only v4 route now available via ENV opt-in - Phase v4-mid-2: SmallHeapCtx v4 full implementation with A/B 🤖 Generated with Claude Code Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -135,6 +135,63 @@ HAKMEM_BENCH_MAX_SIZE=768
|
||||
|
||||
---
|
||||
|
||||
## Research Profile 1: C6_ONLY_SMALLOBJECT_V4(SmallObject v4 C6-only 試運転)
|
||||
|
||||
### 目的
|
||||
- C6-only を SmallObject v4 route に載せて、page_meta_of() の試運転。
|
||||
- 挙動はまだ pool v1 fallback のため、perf は v1 固定と同じ。
|
||||
- Phase v4-mid-1: page_meta_of() が落ちないか、segv/assert なしか確認する研究ベンチ。
|
||||
|
||||
### ENV(v4 C6-only opt-in)
|
||||
```sh
|
||||
HAKMEM_BENCH_MIN_SIZE=257
|
||||
HAKMEM_BENCH_MAX_SIZE=768
|
||||
HAKMEM_TINY_HEAP_PROFILE=C7_SAFE
|
||||
HAKMEM_TINY_C6_HOT=0
|
||||
HAKMEM_TINY_HOTHEAP_V2=0
|
||||
HAKMEM_SMALL_HEAP_V3_ENABLED=1
|
||||
HAKMEM_SMALL_HEAP_V3_CLASSES=0x80 # C7-only v3(C6 は v3 OFF)
|
||||
HAKMEM_SMALL_HEAP_V4_ENABLED=1 # ★ v4 ON
|
||||
HAKMEM_SMALL_HEAP_V4_CLASSES=0x40 # ★ C6(bit6) だけ v4 route に
|
||||
HAKMEM_POOL_V2_ENABLED=0
|
||||
HAKMEM_POOL_V1_FLATTEN_ENABLED=0
|
||||
```
|
||||
|
||||
### テストコマンド
|
||||
```sh
|
||||
export HAKMEM_PROFILE=C6_HEAVY_LEGACY_POOLV1
|
||||
export HAKMEM_SMALL_HEAP_V4_ENABLED=1
|
||||
export HAKMEM_SMALL_HEAP_V4_CLASSES=0x40
|
||||
./bench_mid_large_mt_hakmem 1000000 400 1
|
||||
```
|
||||
|
||||
### 期待値
|
||||
- Throughput ≈ **28–29M ops/s**(v1 基線の ≈28M と同じ)
|
||||
- segv/assert なし
|
||||
- small_segment_v4_page_meta_of(ptr) が動く(debug output で確認可能)
|
||||
|
||||
### 注意
|
||||
- 実際の alloc/free 動作は pool v1 のまま(v4 freelist は使わない)
|
||||
- Phase v4-mid-2 で本格実装時に差し替える
|
||||
|
||||
---
|
||||
|
||||
## Research Profile 2: C7_C6_V4_EXPERIMENT(C7+C6 v4 統合研究)
|
||||
|
||||
### 目的
|
||||
- 後続フェーズで C7+C6 両者を v4 に載せるときの参考プリセット。
|
||||
- 現フェーズではまだ使わない(v4-mid-1 は C6-only)。
|
||||
|
||||
### ENV(参考用)
|
||||
```sh
|
||||
HAKMEM_BENCH_MIN_SIZE=16
|
||||
HAKMEM_BENCH_MAX_SIZE=1024
|
||||
HAKMEM_SMALL_HEAP_V4_ENABLED=1
|
||||
HAKMEM_SMALL_HEAP_V4_CLASSES=0xC0 # C6(0x40) + C7(0x80)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Profile 3: DEBUG_TINY_FRONT_PERF(perf 用 DEBUG プロファイル)
|
||||
|
||||
### 目的
|
||||
|
||||
Reference in New Issue
Block a user