Major Features: - Debug counter infrastructure for Refill Stage tracking - Free Pipeline counters (ss_local, ss_remote, tls_sll) - Diagnostic counters for early return analysis - Unified larson.sh benchmark runner with profiles - Phase 6-3 regression analysis documentation Bug Fixes: - Fix SuperSlab disabled by default (HAKMEM_TINY_USE_SUPERSLAB) - Fix profile variable naming consistency - Add .gitignore patterns for large files Performance: - Phase 6-3: 4.79 M ops/s (has OOM risk) - With SuperSlab: 3.13 M ops/s (+19% improvement) This is a clean repository without large log files. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
22 KiB
Hakmem Tiny Allocator Modularization Analysis
Executive Summary
Current State: 2245 lines in hakmem_tiny.c (reduced from 4555 lines - 51% reduction achieved) Recent Extractions: 2136 lines successfully extracted into 4 .inc modules Analysis Date: 2025-11-01 Recommendation: Continue phased modularization with focus on initialization, slab management, and hot-path inlining
1. Current File Organization
1.1 Main Module (hakmem_tiny.c)
Size: 2245 lines
Largest Functions:
hak_tiny_init()- 450 lines (20% of file!) - INITIALIZATIONhak_tiny_trim()- 116 lines (5%) - LIFECYCLEtiny_tls_cache_drain()- 90 lines (4%) - LIFECYCLEtiny_slow_alloc_fast()- 88 lines (4%) - COLD PATHallocate_new_slab()- 79 lines (3.5%) - SLAB MANAGEMENTultra_refill_sll()- 56 lines (2.5%) - REFILLsll_refill_small_from_ss()- 45 lines (2%) - REFILLsuperslab_tls_bump_fast()- 45 lines (2%) - HOT PATHfrontend_refill_fc()- 44 lines (2%) - REFILLtiny_fast_refill_and_take()- 39 lines (1.7%) - REFILL
Top 10 Total: 1042 lines (46% of remaining file!)
1.2 Successfully Extracted Modules
| File | Lines | Purpose | Type |
|---|---|---|---|
| hakmem_tiny_intel.inc | 863 | Intelligence/telemetry engine | Backend |
| hakmem_tiny_free.inc | 814 | Free path with remote/magazine handling | Hot path |
| hakmem_tiny_background.inc | 261 | Background workers and event queue | Backend |
| hakmem_tiny_alloc.inc | 198 | Wrapper-context allocation | Cold path |
| hakmem_tiny_tls_ops.h | 251 | TLS list operations (inline) | Hot path |
| hakmem_tiny_hotmag.inc.h | 147 | Hot magazine operations | Hot path |
| hakmem_tiny_ultra_front.inc.h | 52 | Ultra-fast frontend tier | Hot path |
| hakmem_tiny_slow.inc | 36 | Slow path stubs | Cold path |
| hakmem_tiny_remote.inc | 56 | Remote free queue handling | Backend |
1.3 Supporting Infrastructure Modules
| File | Lines | Purpose | Type |
|---|---|---|---|
| hakmem_tiny_superslab.{h,c} | 215+484 | SuperSlab allocator | Core backend |
| hakmem_tiny_magazine.{h,c} | 45+144 | Magazine data structures | Core |
| hakmem_tiny_stats.{h,c} | 277+251 | Statistics batching | Observability |
| hakmem_tiny_tls_list.h | 131 | TLS free list helpers | Core |
| hakmem_tiny_batch_refill.h | 232 | Batch refill logic | Hot path |
| hakmem_tiny_mini_mag.h | 148 | Mini-magazine helpers | Hot path |
1.4 API/Query Modules (Small)
| File | Lines | Purpose |
|---|---|---|
| hakmem_tiny_stats_api.h | 23 | Stats query API |
| hakmem_tiny_query_api.h | 18 | General query API |
| hakmem_tiny_rss_api.h | 9 | RSS utilities |
| hakmem_tiny_registry_api.h | 32 | Registry API |
| hakmem_tiny_{rss,query,registry}.c | 28+72+63 | API implementations |
2. Detailed Function Analysis
2.1 Initialization Section (470+ lines, 21%)
Primary Function: hak_tiny_init() (450 lines)
Breakdown:
- Lines 1526-1600: Environment variable parsing (74 lines)
- Registry, wrapper mode, remote drain, mem diet, magazine caps
- Lines 1600-1700: SuperSlab initialization (100 lines)
- Capacity setup, queue initialization, background workers
- Lines 1700-1850: Magazine initialization (150 lines)
- Per-class magazine setup, TLS initialization
- Lines 1850-1976: Backend worker spawning (126 lines)
- Intelligence engine, background refill workers
Extraction Opportunity:
hakmem_tiny_init_env.inc- 74 lines (env parsing)hakmem_tiny_init_superslab.inc- 100 lines (SS setup)hakmem_tiny_init_magazine.inc- 150 lines (mag setup)hakmem_tiny_init_workers.inc- 126 lines (workers)- Total extraction potential: 450 lines → 4 modules
2.2 Lifecycle Management (206 lines, 9%)
Functions:
hak_tiny_trim()- 116 lines (1985-2101)tiny_tls_cache_drain()- 90 lines (2135-2225)
Purpose: Memory reclamation, cleanup, trim operations
Extraction Opportunity:
hakmem_tiny_lifecycle.inc- 206 lines- Could include
tiny_apply_mem_diet()(20 lines) as well - Total: 226 lines
2.3 Slab Management (120 lines, 5.3%)
Functions:
allocate_new_slab()- 79 lines (1327-1406)release_slab()- 23 lines (1408-1431)move_to_full_list()- 20 lines (1479-1499)move_to_free_list()- 20 lines (1501-1521)
Extraction Opportunity:
hakmem_tiny_slab_mgmt.inc- 142 lines- Or move to
hakmem_tiny_slab.{h,c}as a proper module (better)
2.4 Registry Operations (22 lines, 1%)
Function:
registry_lookup()- 22 lines (1303-1325)
Note: Already has hakmem_tiny_registry.c/h infrastructure Action: Move this function to hakmem_tiny_registry.c
2.5 Hot Path Inline Functions (200+ lines, 9%)
Per-Class Hot Pop Functions (84 lines):
tiny_hot_pop_class0/1/2/3()- 21 lines each × 4 = 84 lines
Extraction Opportunity:
- These are
always_inlinehot-path functions - Should extract to
hakmem_tiny_hot_pop.inc.h(inline header) - Similar to existing
hakmem_tiny_hotmag.inc.hpattern
Fast Path Helpers (100+ lines):
tiny_fast_pop()- 17 lines (377-394)tiny_fast_push()- 13 lines (394-407)fastcache_pop()- 8 lines (873-881)fastcache_push()- 7 lines (881-888)quick_pop()- 8 lines (892-900)
Extraction Opportunity:
hakmem_tiny_fastcache.inc.h- inline hot-path helpers
2.6 Refill Operations (184 lines, 8.2%)
Functions:
ultra_refill_sll()- 56 lines (1178-1234)sll_refill_small_from_ss()- 45 lines (952-997)superslab_tls_bump_fast()- 45 lines (1016-1061)frontend_refill_fc()- 44 lines (1063-1107)tiny_fast_refill_and_take()- 39 lines (584-623)quick_refill_from_sll()- 18 lines (918-936)quick_refill_from_mag()- 11 lines (938-949)bulk_mag_to_sll_if_room()- 22 lines (1133-1155)
Extraction Opportunity:
hakmem_tiny_refill.inc.h- 280+ lines- These are mostly inline functions used in hot paths
- Should be header-based for inlining
2.7 TLS Operations and Helpers (100+ lines, 4.5%)
Functions:
tiny_tls_refresh_params()- 24 lines (352-376)tiny_tls_bind_slab()- 7 lines (318-325)tiny_tls_default_refill()- 7 lines (325-332)tiny_tls_default_spill()- 8 lines (332-340)tiny_tls_publish_targets()- 7 lines (340-347)tiny_tls_request_trim()- 5 lines (347-352)
Note: Some of this overlaps with hakmem_tiny_tls_ops.h Action: Consolidate into existing TLS ops module
2.8 Miscellaneous Helpers (50+ lines)
Functions:
tiny_slow_alloc_fast()- 88 lines (495-583) - COLD PATHtiny_optional_push()- 27 lines (777-804)hak_tiny_alloc_superslab_try_fast()- 16 lines (900-916)hak_thread_id16()- 4 lines (837-841)eventq_push_ex()- 26 lines (843-869)- Various small inline helpers
3. Proposed Modularization Plan
Phase 1: Initialization Extraction (HIGH PRIORITY)
Goal: Extract 450-line hak_tiny_init() function
Strategy A: Multi-file split (Recommended)
core/tiny/init/
hakmem_tiny_init.c - Main init orchestrator (50 lines)
hakmem_tiny_init_env.inc - Environment parsing (74 lines)
hakmem_tiny_init_superslab.inc - SuperSlab setup (100 lines)
hakmem_tiny_init_magazine.inc - Magazine setup (150 lines)
hakmem_tiny_init_workers.inc - Worker spawning (126 lines)
Strategy B: Single large module (Simpler)
core/hakmem_tiny_init.inc - All initialization (450 lines)
Benefit: Reduces main file by 20% Risk: Low - initialization is cold path, one-time execution Priority: HIGH - largest function
Phase 2: Lifecycle Management (MEDIUM PRIORITY)
Goal: Extract trim and cleanup operations
core/hakmem_tiny_lifecycle.inc
- hak_tiny_trim() (116 lines)
- tiny_tls_cache_drain() (90 lines)
- tiny_apply_mem_diet() (20 lines)
Total: 226 lines (10% reduction)
Benefit: Cleaner separation of concerns Risk: Low - cold path, called rarely Priority: MEDIUM
Phase 3: Slab Management Module (MEDIUM PRIORITY)
Goal: Consolidate slab lifecycle into proper module
Option A: Keep as .inc
core/hakmem_tiny_slab_mgmt.inc
- allocate_new_slab() (79 lines)
- release_slab() (23 lines)
- move_to_full_list() (20 lines)
- move_to_free_list() (20 lines)
Total: 142 lines (6% reduction)
Option B: Promote to proper module (Recommended)
core/hakmem_tiny_slab.h - Slab API and inline helpers
core/hakmem_tiny_slab.c - Slab management implementation
Benefit: Better encapsulation, testability Risk: Low-medium - called from multiple paths, need careful header management Priority: MEDIUM
Phase 4: Hot Path Inline Extraction (HIGH PRIORITY)
Goal: Extract inline hot-path functions to headers for readability
4A: Hot Pop Functions
core/hakmem_tiny_hot_pop.inc.h
- tiny_hot_pop_class0/1/2/3() (84 lines)
4B: Fast Cache Operations
core/hakmem_tiny_fastcache.inc.h
- fastcache_pop/push() (15 lines)
- quick_pop() (8 lines)
- tiny_fast_pop/push() (30 lines)
Total: 53 lines
4C: Refill Operations
core/hakmem_tiny_refill.inc.h
- ultra_refill_sll() (56 lines)
- sll_refill_small_from_ss() (45 lines)
- superslab_tls_bump_fast() (45 lines)
- frontend_refill_fc() (44 lines)
- Other refill helpers (90 lines)
Total: 280 lines (12% reduction)
Benefit: Maintains performance (inlining), improves readability Risk: LOW - these are already inline functions Priority: HIGH - significant line count reduction (417 lines total)
Phase 5: Registry Consolidation (LOW PRIORITY)
Goal: Move registry_lookup() to existing registry module
Move: registry_lookup() (22 lines) → hakmem_tiny_registry.c
Benefit: Logical grouping, minimal benefit Risk: Very low Priority: LOW - only 22 lines
4. Proposed Folder Structure
Option A: Flat with Subdirectories (Recommended)
core/
hakmem_tiny.c # Main orchestrator (900 lines after phase 1-4)
hakmem_tiny.h # Main header
# Hot path inline headers (included in tiny.c)
hakmem_tiny_hotmag.inc.h # ✓ Exists (147 lines)
hakmem_tiny_ultra_front.inc.h # ✓ Exists (52 lines)
hakmem_tiny_hot_pop.inc.h # NEW (84 lines) - Phase 4A
hakmem_tiny_fastcache.inc.h # NEW (53 lines) - Phase 4B
hakmem_tiny_refill.inc.h # NEW (280 lines) - Phase 4C
# Backend implementation includes
hakmem_tiny_alloc.inc # ✓ Exists (198 lines)
hakmem_tiny_free.inc # ✓ Exists (814 lines)
hakmem_tiny_intel.inc # ✓ Exists (863 lines)
hakmem_tiny_background.inc # ✓ Exists (261 lines)
hakmem_tiny_slow.inc # ✓ Exists (36 lines)
hakmem_tiny_remote.inc # ✓ Exists (56 lines)
hakmem_tiny_init.inc # NEW (450 lines) - Phase 1
hakmem_tiny_lifecycle.inc # NEW (226 lines) - Phase 2
hakmem_tiny_slab_mgmt.inc # NEW (142 lines) - Phase 3
# Supporting modules (proper .h/.c pairs)
hakmem_tiny_superslab.{h,c} # ✓ Exists
hakmem_tiny_magazine.{h,c} # ✓ Exists
hakmem_tiny_stats.{h,c} # ✓ Exists
hakmem_tiny_tls_list.h # ✓ Exists
hakmem_tiny_slab.{h,c} # NEW - Phase 3 Option B
...
Option B: Hierarchical Subdirectories (Future)
core/tiny/
tiny.c # Main file
tiny.h # Main header
frontend/ # Hot path allocation
hot_pop.inc.h
fastcache.inc.h
ultra_front.inc.h
hotmag.inc.h
refill.inc.h
backend/ # Slow path/management
alloc.inc
free.inc
slab_mgmt.inc
lifecycle.inc
init.inc
background.inc
intel.inc
remote.inc
core/ # Core infrastructure
superslab.{h,c}
magazine.{h,c}
slab.{h,c}
tls_list.h
stats.{h,c}
api/ # Public APIs
stats_api.h
query_api.h
registry_api.h
rss_api.h
Recommendation: Start with Option A (flat), migrate to Option B when module count exceeds 30 files.
5. Module Boundary Analysis
5.1 Natural Module Boundaries
Frontend (Hot Path - Inline Headers):
- Ultra-fast tier: Bump allocator, hot magazines
- Fast tier: FastCache, Quick slots
- Per-class specialization: Hot pop functions
- Refill operations: SLL refill, mag refill, SS bump
Backend (Cold Path - .inc Files):
- Initialization: Environment, setup, workers
- Lifecycle: Trim, drain, cleanup
- Slab management: Allocation, release, list operations
- Intelligence: Telemetry, events, background workers
- Remote operations: Cross-thread free handling
Core Infrastructure (Proper Modules):
- SuperSlab: Large-scale memory management
- Magazine: Per-class caching
- TLS Lists: Thread-local free lists
- Statistics: Performance metrics
APIs (Small Modules):
- Query interface
- Stats interface
- Registry interface
5.2 Dependency Graph
hakmem_tiny.c
├─ [includes frontend inline headers]
│ ├─ hakmem_tiny_hot_pop.inc.h (NEW)
│ ├─ hakmem_tiny_fastcache.inc.h (NEW)
│ ├─ hakmem_tiny_refill.inc.h (NEW)
│ ├─ hakmem_tiny_hotmag.inc.h (existing)
│ └─ hakmem_tiny_ultra_front.inc.h (existing)
│
├─ [includes backend .inc files]
│ ├─ hakmem_tiny_init.inc (NEW)
│ ├─ hakmem_tiny_lifecycle.inc (NEW)
│ ├─ hakmem_tiny_slab_mgmt.inc (NEW)
│ ├─ hakmem_tiny_alloc.inc (existing)
│ ├─ hakmem_tiny_free.inc (existing)
│ ├─ hakmem_tiny_intel.inc (existing)
│ ├─ hakmem_tiny_background.inc (existing)
│ ├─ hakmem_tiny_slow.inc (existing)
│ └─ hakmem_tiny_remote.inc (existing)
│
└─ [depends on core modules]
├─ hakmem_tiny_superslab.h/c
├─ hakmem_tiny_magazine.h/c
├─ hakmem_tiny_slab.h/c (NEW)
├─ hakmem_tiny_stats.h/c
└─ hakmem_tiny_tls_list.h
6. Line Count Projections
Current State
hakmem_tiny.c: 2245 lines
After Phase 1 (Init Extraction)
hakmem_tiny.c: 1795 lines (-450, -20%)
hakmem_tiny_init.inc: +450 lines
After Phase 2 (Lifecycle)
hakmem_tiny.c: 1569 lines (-226, -10% additional)
hakmem_tiny_lifecycle.inc: +226 lines
After Phase 3 (Slab Management)
hakmem_tiny.c: 1427 lines (-142, -6% additional)
hakmem_tiny_slab_mgmt.inc: +142 lines
After Phase 4 (Hot Path Inline)
hakmem_tiny.c: 1010 lines (-417, -18% additional)
hakmem_tiny_hot_pop.inc.h: +84 lines
hakmem_tiny_fastcache.inc.h: +53 lines
hakmem_tiny_refill.inc.h: +280 lines
Final Result After All Phases
hakmem_tiny.c: ~1010 lines (55% reduction from 2245)
Remaining in main file:
- Core allocation/free orchestration logic
- Global state declarations
- Wrapper integration
- Forward declarations
- Helper macros
7. Benefits and Risks
Benefits
Maintainability:
- Easier to locate and modify specific functionality
- Reduced cognitive load (1000-line files vs 2200-line files)
- Clear separation of hot path vs cold path
Performance:
- No degradation expected - inline functions stay inline
- Cold path extractions have zero performance impact
- Compiler still sees all code after #include
Testability:
- Modules can be tested in isolation (with proper mocking)
- Easier to benchmark specific subsystems
Documentation:
- Each module can have focused documentation
- Clearer API boundaries
Risks
Compilation:
- Increased include complexity
- Potential circular dependency issues (mitigated by careful ordering)
- Build time may increase slightly (more files to parse)
Debugging:
- Stack traces may show file:line from .inc files
- Need to ensure debug info includes correct file paths
- (Risk is minimal - modern debuggers handle this well)
Refactoring Overhead:
- Need to move forward declarations carefully
- May expose hidden dependencies
- Requires thorough testing after extraction
Cognitive Overhead:
- Developers need to know which file contains what
- Could make code harder to follow if module boundaries are unclear
- (Mitigated by clear naming conventions and documentation)
8. Priority Ranking for Next Phases
PRIORITY 1: Hot Path Inline Extraction (Phase 4)
Why: High impact (417 lines), low risk, maintains performance When: Immediately Effort: 2-3 hours Files:
- hakmem_tiny_hot_pop.inc.h (84 lines)
- hakmem_tiny_fastcache.inc.h (53 lines)
- hakmem_tiny_refill.inc.h (280 lines)
PRIORITY 2: Initialization Extraction (Phase 1)
Why: Largest function (450 lines), cold path, clear boundary When: After Phase 4 Effort: 3-4 hours Files:
- hakmem_tiny_init.inc (450 lines)
- OR split into 4 sub-modules (init_env, init_superslab, init_magazine, init_workers)
PRIORITY 3: Lifecycle Management (Phase 2)
Why: Good size reduction (226 lines), clean separation When: After Phase 1 Effort: 2 hours Files:
- hakmem_tiny_lifecycle.inc (226 lines)
PRIORITY 4: Slab Management (Phase 3)
Why: Logical grouping, moderate size (142 lines) When: After Phase 2 Effort: 2-3 hours Files:
- hakmem_tiny_slab_mgmt.inc OR hakmem_tiny_slab.{h,c}
PRIORITY 5: Registry Consolidation (Phase 5)
Why: Small cleanup, logical grouping When: Any time Effort: 15 minutes Files:
- Move registry_lookup() to hakmem_tiny_registry.c
9. Recommended Action Plan
Week 1: Hot Path Inline Extraction
# Create new inline header files
touch core/hakmem_tiny_hot_pop.inc.h
touch core/hakmem_tiny_fastcache.inc.h
touch core/hakmem_tiny_refill.inc.h
# Extract functions (use sed/awk scripts)
# Add #include statements to hakmem_tiny.c
# Compile and test
# Verify performance (run benchmarks)
Week 2: Initialization Extraction
# Create init module
touch core/hakmem_tiny_init.inc
# Extract hak_tiny_init() function
# Add #include at appropriate location
# Test initialization path thoroughly
Week 3: Lifecycle and Slab Management
# Create lifecycle module
touch core/hakmem_tiny_lifecycle.inc
# Create slab management module
touch core/hakmem_tiny_slab_mgmt.inc
# Extract functions
# Compile and test
Week 4: Testing and Documentation
# Run full benchmark suite
# Update documentation
# Create module dependency diagram
# Write migration guide
10. Success Metrics
Quantitative
- hakmem_tiny.c reduced below 1200 lines (46% reduction)
- No performance regression in hot benchmarks (< 2% variance)
- All tests pass
- Compilation time increase < 10%
Qualitative
- Code is easier to navigate and understand
- Module boundaries are clear and logical
- Documentation accurately reflects new structure
- Team members can easily locate functionality
Appendix A: Full File Inventory
Current tiny-related files (31 files):
Headers (inline/interface):
hakmem_tiny.h (327 lines)
hakmem_tiny_superslab.h (215 lines)
hakmem_tiny_magazine.h (45 lines)
hakmem_tiny_batch_refill.h (232 lines)
hakmem_tiny_stats.h (277 lines)
hakmem_tiny_stats_api.h (23 lines)
hakmem_tiny_query_api.h (18 lines)
hakmem_tiny_rss_api.h (9 lines)
hakmem_tiny_registry_api.h (32 lines)
hakmem_tiny_tls_list.h (131 lines)
hakmem_tiny_remote_target.h (25 lines)
hakmem_tiny_bg_spill.h (52 lines)
hakmem_tiny_mini_mag.h (148 lines)
hakmem_tiny_tls_ops.h (251 lines)
Inline implementation headers (.inc.h):
hakmem_tiny_hotmag.inc.h (147 lines)
hakmem_tiny_ultra_front.inc.h (52 lines)
hakmem_tiny_bg_bin.inc.h (37 lines)
Include-only backend modules (.inc):
hakmem_tiny_intel.inc (863 lines)
hakmem_tiny_free.inc (814 lines)
hakmem_tiny_background.inc (261 lines)
hakmem_tiny_alloc.inc (198 lines)
hakmem_tiny_remote.inc (56 lines)
hakmem_tiny_slow.inc (36 lines)
Implementation files (.c):
hakmem_tiny.c (2245 lines) ← MAIN FILE
hakmem_tiny_superslab.c (484 lines)
hakmem_tiny_magazine.c (144 lines)
hakmem_tiny_stats.c (251 lines)
hakmem_tiny_rss.c (28 lines)
hakmem_tiny_query.c (72 lines)
hakmem_tiny_registry.c (63 lines)
hakmem_tiny_remote_target.c (40 lines)
hakmem_tiny_bg_spill.c (83 lines)
TOTAL: ~8,700 lines across 31 files
MAIN: 2,245 lines (26% of total)
Appendix B: Extraction Script Templates
B.1 Extract Function to .inc File
#!/bin/bash
# extract_function.sh <source_file> <function_name> <target_inc>
SOURCE="$1"
FUNCTION="$2"
TARGET="$3"
# Find function start and end lines
START=$(grep -n "^${FUNCTION}(" "$SOURCE" | cut -d: -f1)
# Find matching closing brace (simple version - may need improvement)
END=$(awk "NR>=$START && /^}$/ {print NR; exit}" "$SOURCE")
# Extract function
sed -n "${START},${END}p" "$SOURCE" > "$TARGET"
# Remove from source (leave comment)
sed -i "${START},${END}c\\
// EXTRACTED TO $TARGET\\
// See $TARGET for implementation
" "$SOURCE"
echo "Extracted $FUNCTION ($((END-START+1)) lines) to $TARGET"
B.2 Create Inline Header Template
#!/bin/bash
# create_inline_header.sh <module_name>
MODULE="$1"
HEADER="hakmem_tiny_${MODULE}.inc.h"
cat > "core/$HEADER" << 'EOF'
#ifndef HAKMEM_TINY_${MODULE^^}_INC_H
#define HAKMEM_TINY_${MODULE^^}_INC_H
// Module: ${MODULE}
// Purpose: [Description]
// Type: Inline hot-path functions
// Phase: [Phase number]
// Forward declarations (if needed)
// Inline function implementations
#endif // HAKMEM_TINY_${MODULE^^}_INC_H
EOF
echo "Created core/$HEADER"
Appendix C: Performance Validation Checklist
After each extraction phase, run:
# 1. Compilation check
make clean && make
# 2. Unit tests
make test
# 3. Hot-path benchmarks
./bench_tiny_hot_hakmi
./bench_tiny_hot_mi
./bench_random_mixed_hakmi
./bench_random_mixed_mi
# 4. Memory efficiency
./scripts/run_memory_efficiency.sh
# 5. Full benchmark suite
./scripts/run_bench_suite.sh
# 6. Verify no regressions
# Compare results with baseline (before extraction)
END OF REPORT