Files
hakmem/core/box/tiny_ultra_classes_box.h

18 lines
689 B
C
Raw Normal View History

#ifndef HAKMEM_TINY_ULTRA_CLASSES_BOX_H
#define HAKMEM_TINY_ULTRA_CLASSES_BOX_H
// Purpose: Named constants for ULTRA tier classes (C4, C5, C6, C7)
#define TINY_CLASS_C4 4
Phase FREE-LEGACY-OPT-5-1/5-2: C5 ULTRA free+alloc integration Summary: ======== Implemented C5 ULTRA TLS cache pattern following the successful C6 ULTRA design: - Phase 5-1: Free-side TLS cache + segment learning - Phase 5-2: Alloc-side TLS pop for complete free+alloc cycle integration Targets C5 class (129-256B) as next legacy reduction after C6 completion. Key Changes: ============ 1. NEW FILES: - core/box/tiny_c5_ultra_free_box.h: C5 ULTRA TLS cache structure - core/box/tiny_c5_ultra_free_box.c: C5 free path implementation (same pattern as C6) - core/box/tiny_c5_ultra_free_env_box.h: ENV gating (HAKMEM_TINY_C5_ULTRA_FREE_ENABLED) 2. MODIFIED FILES: - core/front/malloc_tiny_fast.h: * Added C5 ULTRA includes * Added C5 alloc-side TLS pop at lines 186-194 (integrated with C6) * Added C5 free path at lines 333-337 (integrated with C6) - core/box/tiny_ultra_classes_box.h: * Added TINY_CLASS_C5 constant * Added tiny_class_is_c5() macro * Extended tiny_class_is_ultra() to include C5 - core/box/free_path_stats_box.h: * Added c5_ultra_free_fast counter * Added c5_ultra_alloc_hit counter - core/box/free_path_stats_box.c: * Updated stats dump to output C5 counters - Makefile: * Added core/box/tiny_c5_ultra_free_box.o to all object lists 3. Design Rationale: - Exact copy of C6 ULTRA pattern (proven effective) - TLS cache capacity: 128 blocks (same as C6 for consistency) - Segment learning on first C5 free via ss_fast_lookup() - Alloc-side pop integrated directly in malloc_tiny_fast.h hotpath - Legacy fallback unification via tiny_legacy_fallback_free_base() 4. Expected Impact: - C5 legacy calls: 68,871 → 0 (100% elimination) - Total legacy reduction: ~53% of remaining 129,623 - Mixed workload: Minimal regression (C5 is smaller class, fewer allocations) 5. Stats Collection: Run with: HAKMEM_TINY_C5_ULTRA_FREE_ENABLED=1 HAKMEM_FREE_PATH_STATS=1 ./bench_allocators_hakmem Expected output: [FREE_PATH_STATS] ... c5_ultra_free=68871 c5_ultra_alloc=68871 ... legacy_fb=60752 ... [FREE_PATH_STATS_LEGACY_BY_CLASS] ... c5=0 ... Status: ======= - Code: ✅ COMPLETE (3 new files + 5 modified files) - Compilation: ✅ Verified (no errors, only unused variable warnings unrelated to C5) - Functionality: Ready to benchmark (ENV gating: default OFF, opt-in via ENV) Phase Progression: ================== ✅ Phase 4-4: C6 ULTRA free+alloc (legacy C6: 137,319 → 0) ✅ Phase 5-1/5-2: C5 ULTRA free+alloc (legacy C5: 68,871 → 0 expected) ⏳ Phase 4.5: C4 ULTRA (34,727 remaining) 📋 Future: C3/C2 ULTRA if beneficial 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2025-12-11 19:26:51 +09:00
#define TINY_CLASS_C5 5
#define TINY_CLASS_C6 6
#define TINY_CLASS_C7 7
// Helper macros for class checking
#define tiny_class_is_c4(idx) ((idx) == TINY_CLASS_C4)
Phase FREE-LEGACY-OPT-5-1/5-2: C5 ULTRA free+alloc integration Summary: ======== Implemented C5 ULTRA TLS cache pattern following the successful C6 ULTRA design: - Phase 5-1: Free-side TLS cache + segment learning - Phase 5-2: Alloc-side TLS pop for complete free+alloc cycle integration Targets C5 class (129-256B) as next legacy reduction after C6 completion. Key Changes: ============ 1. NEW FILES: - core/box/tiny_c5_ultra_free_box.h: C5 ULTRA TLS cache structure - core/box/tiny_c5_ultra_free_box.c: C5 free path implementation (same pattern as C6) - core/box/tiny_c5_ultra_free_env_box.h: ENV gating (HAKMEM_TINY_C5_ULTRA_FREE_ENABLED) 2. MODIFIED FILES: - core/front/malloc_tiny_fast.h: * Added C5 ULTRA includes * Added C5 alloc-side TLS pop at lines 186-194 (integrated with C6) * Added C5 free path at lines 333-337 (integrated with C6) - core/box/tiny_ultra_classes_box.h: * Added TINY_CLASS_C5 constant * Added tiny_class_is_c5() macro * Extended tiny_class_is_ultra() to include C5 - core/box/free_path_stats_box.h: * Added c5_ultra_free_fast counter * Added c5_ultra_alloc_hit counter - core/box/free_path_stats_box.c: * Updated stats dump to output C5 counters - Makefile: * Added core/box/tiny_c5_ultra_free_box.o to all object lists 3. Design Rationale: - Exact copy of C6 ULTRA pattern (proven effective) - TLS cache capacity: 128 blocks (same as C6 for consistency) - Segment learning on first C5 free via ss_fast_lookup() - Alloc-side pop integrated directly in malloc_tiny_fast.h hotpath - Legacy fallback unification via tiny_legacy_fallback_free_base() 4. Expected Impact: - C5 legacy calls: 68,871 → 0 (100% elimination) - Total legacy reduction: ~53% of remaining 129,623 - Mixed workload: Minimal regression (C5 is smaller class, fewer allocations) 5. Stats Collection: Run with: HAKMEM_TINY_C5_ULTRA_FREE_ENABLED=1 HAKMEM_FREE_PATH_STATS=1 ./bench_allocators_hakmem Expected output: [FREE_PATH_STATS] ... c5_ultra_free=68871 c5_ultra_alloc=68871 ... legacy_fb=60752 ... [FREE_PATH_STATS_LEGACY_BY_CLASS] ... c5=0 ... Status: ======= - Code: ✅ COMPLETE (3 new files + 5 modified files) - Compilation: ✅ Verified (no errors, only unused variable warnings unrelated to C5) - Functionality: Ready to benchmark (ENV gating: default OFF, opt-in via ENV) Phase Progression: ================== ✅ Phase 4-4: C6 ULTRA free+alloc (legacy C6: 137,319 → 0) ✅ Phase 5-1/5-2: C5 ULTRA free+alloc (legacy C5: 68,871 → 0 expected) ⏳ Phase 4.5: C4 ULTRA (34,727 remaining) 📋 Future: C3/C2 ULTRA if beneficial 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2025-12-11 19:26:51 +09:00
#define tiny_class_is_c5(idx) ((idx) == TINY_CLASS_C5)
#define tiny_class_is_c6(idx) ((idx) == TINY_CLASS_C6)
#define tiny_class_is_c7(idx) ((idx) == TINY_CLASS_C7)
#define tiny_class_is_ultra(idx) (tiny_class_is_c4(idx) || tiny_class_is_c5(idx) || tiny_class_is_c6(idx) || tiny_class_is_c7(idx))
#endif // HAKMEM_TINY_ULTRA_CLASSES_BOX_H