Integrated MID v3.5 into active code path, making it available for C5/C6/C7 routing. Key Changes: - Policy Box: Added SMALL_ROUTE_MID_V35 with ENV gates (HAKMEM_MID_V35_ENABLED, HAKMEM_MID_V35_CLASSES) - HotBox: Implemented small_mid_v35_alloc/free with TLS-cached page allocation - Front Gate: Wired MID_V35 routing into malloc_tiny_fast.h (priority: ULTRA > MID_V35 > V7) - Build: Added core/smallobject_mid_v35.o to all object lists Architecture: - Slot sizes: C5=384B, C6=512B, C7=1024B - Page size: 64KB (170/128/64 slots) - Integration: ColdIface v2 (refill/retire), Stats v2 (observation), Learner v2 (dormant) Status: Build successful, ready for A/B benchmarking Next: Performance validation (C6-heavy, C5+C6-only, Mixed benchmarks) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
6.9 KiB
Phase v11a-3: MID v3.5 Implementation Summary
Date: 2025-12-12 Status: Build Complete - Ready for A/B Benchmarking Author: Claude Opus 4.5
Overview
Phase v11a-3 successfully integrated MID v3.5 into the active code path, making it available for routing C5/C6/C7 allocations. This phase activates the Segment/ColdIface/Stats/Learner v2 infrastructure implemented in Phase v11a-2.
Implementation Tasks Completed
Task 1: Policy Box Updates (L3)
Files Modified:
/mnt/workdisk/public_share/hakmem/core/box/smallobject_policy_v7_box.h/mnt/workdisk/public_share/hakmem/core/smallobject_policy_v7.c
Changes:
- Added
SMALL_ROUTE_MID_V35toSmallRouteKindenum - Implemented ENV gate functions:
mid_v35_enabled()- checksHAKMEM_MID_V35_ENABLEDmid_v35_class_mask()- readsHAKMEM_MID_V35_CLASSES(default: 0x60 for C5+C6)
- Updated policy init with priority: ULTRA > MID_V35 > V7 > MID_V3 > LEGACY
- Added MID_V35 case to
small_route_kind_name()
Task 2: MID v3.5 HotBox Implementation (L1)
Files Created:
/mnt/workdisk/public_share/hakmem/core/box/smallobject_mid_v35_box.h- Public API/mnt/workdisk/public_share/hakmem/core/smallobject_mid_v35.c- Implementation
Implementation:
- TLS-cached page allocation (per-class fast path)
- Slot sizes: C5=384B, C6=512B, C7=1024B
- Page size: 64KB (170/128/64 slots for C5/C6/C7)
- Alloc: Fast path (TLS cache hit) + Slow path (refill via ColdIface)
- Free: Simplified counting (no freelist yet - deferred to v11b)
- Header writing: Integrates with tiny_region_id_write_header
Key Design Decisions:
- Reused
SmallPageMetatypedef (matches segment/cold_iface structure) - Simplified free path (cross-page free deferred to v11b RegionIdBox integration)
- Header integration for compatibility with existing Tiny infrastructure
Task 3: Front Gate Integration (L0/L1 Boundary)
Files Modified:
/mnt/workdisk/public_share/hakmem/core/front/malloc_tiny_fast.h
Changes:
- Added MID v3.5 box header include
- Alloc path: Check policy for MID_V35, call
small_mid_v35_alloc()before V7 - Free path: Check policy for MID_V35, call
small_mid_v35_free()after ULTRA checks
Priority Order (Alloc/Free):
- ULTRA (C4-C7)
- MID v3.5 (Policy-driven)
- V7 (Policy-driven)
- Legacy routes
Task 4: Build System Updates
Files Modified:
/mnt/workdisk/public_share/hakmem/Makefile
Changes:
- Added
core/smallobject_mid_v35.otoOBJS_BASE - Added
core/smallobject_mid_v35.otoBENCH_HAKMEM_OBJS_BASE - Added
core/smallobject_mid_v35.otoTINY_BENCH_OBJS_BASE
Build Results:
- Clean build successful
- Benchmarks compiled:
bench_random_mixed_hakmem,bench_mid_large_mt_hakmem - Minor warnings (unused parameter
size) - non-critical
ENV Configuration
MID v3.5 Activation
# Enable MID v3.5
export HAKMEM_MID_V35_ENABLED=1
# Configure classes (default: 0x60 = C5+C6)
export HAKMEM_MID_V35_CLASSES=0x60 # C5 + C6
# export HAKMEM_MID_V35_CLASSES=0x20 # C5 only
# export HAKMEM_MID_V35_CLASSES=0x40 # C6 only
Policy Debug Output
Policy initialization prints route assignments on first call:
[POLICY_V7_INIT] Route assignments:
C0: LEGACY
C1: LEGACY
C2: LEGACY
C3: LEGACY
C4: ULTRA
C5: MID_V35
C6: MID_V35
C7: ULTRA
Next Steps (Task 5: A/B Benchmarks)
Benchmark 1: C6-Heavy (MID Specialization Check)
# Baseline: MID v3.5 OFF
HAKMEM_PROFILE=C6_HEAVY_LEGACY_POOLV1 \
HAKMEM_MID_V35_ENABLED=0 \
./bench_mid_large_mt_hakmem 1 1000000 400 1
# Test: MID v3.5 ON (C6 only)
HAKMEM_PROFILE=C6_HEAVY_LEGACY_POOLV1 \
HAKMEM_MID_V35_ENABLED=1 \
HAKMEM_MID_V35_CLASSES=0x40 \
./bench_mid_large_mt_hakmem 1 1000000 400 1
Expected: Performance within ±5% of MID v3
Benchmark 2: C5+C6-Only (257-768B Range)
# Baseline: MID v3.5 OFF
HAKMEM_BENCH_MIN_SIZE=257 \
HAKMEM_BENCH_MAX_SIZE=768 \
HAKMEM_MID_V35_ENABLED=0 \
./bench_random_mixed_hakmem 1000000 400 1
# Test: MID v3.5 ON (C5+C6)
HAKMEM_BENCH_MIN_SIZE=257 \
HAKMEM_BENCH_MAX_SIZE=768 \
HAKMEM_MID_V35_ENABLED=1 \
HAKMEM_MID_V35_CLASSES=0x60 \
./bench_random_mixed_hakmem 1000000 400 1
Expected: +2-4% improvement (matching v7 gains)
Benchmark 3: Mixed 16-1024B (Reference)
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE \
HAKMEM_MID_V35_ENABLED=1 \
HAKMEM_MID_V35_CLASSES=0x60 \
./bench_random_mixed_hakmem 1000000 400 1
Expected: Baseline ±3% (no regression)
Known Limitations (Deferred to v11b)
-
Cross-Page Free: Current implementation only handles frees to the current TLS page
- Need RegionIdBox lookup for cross-page free
- Planned for v11b with proper segment ownership check
-
Freelist Reuse: No freelist implementation yet
- Slots are marked free via counter only
- Full freelist support planned for v11b
-
Learner Route Switching: Learner v2 is in observation mode only
- Dynamic route switching deferred to v11b
- Current implementation: static routing based on ENV
Code Quality
- Modularity: Clean L1/L2/L3 separation maintained
- Box Boundaries: Proper isolation between HotBox/ColdIface/Stats/Learner
- Header Compatibility: Integrates with existing Tiny region_id infrastructure
- Build Hygiene: All targets compile cleanly (only unused parameter warnings)
Files Summary
New Files (2)
core/box/smallobject_mid_v35_box.h- Public API (48 lines)core/smallobject_mid_v35.c- Implementation (165 lines)
Modified Files (4)
core/box/smallobject_policy_v7_box.h- Enum updatecore/smallobject_policy_v7.c- ENV helpers + priority logiccore/front/malloc_tiny_fast.h- Route integrationMakefile- Object file lists (3 locations)
Total Code Addition
- New: ~213 lines
- Modified: ~60 lines
- Total Impact: ~273 lines
Architecture Notes
Layer Interaction (L0→L1→L2→L3)
L0 (Front) malloc_tiny_fast.h
↓ (Policy check: MID_V35?)
L1 (HotBox) smallobject_mid_v35.c
↓ (Refill needed?)
L2 (Cold) smallobject_cold_iface_mid_v3.c
↓ (Get page from segment)
L2 (Segment) smallobject_segment_mid_v3.c
↓ (Stats recording)
L2 (Stats) smallobject_stats_mid_v3.c
↓ (Learner evaluation - observation only)
L2 (Learner) smallobject_learner_v2.c
↓ (Policy update - dormant)
L3 (Policy) smallobject_policy_v7.c
Memory Layout
- Segment: 2 MiB contiguous region
- Pages: 64KB per page
- Slots: 384B (C5), 512B (C6), 1024B (C7)
- TLS Cache: One current page per class per thread
Conclusion
Phase v11a-3 successfully activated MID v3.5 infrastructure. The implementation is ready for A/B benchmarking to validate performance against the original MID v3 and establish a baseline for future optimizations.
Status: ✅ Build Complete Next: Task 5 (A/B Benchmarks) - Performance validation Future: Task 6 (Documentation) - Results recording