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>
6.4 KiB
Hakmem Tiny Allocator - Modularization Quick Reference
Analysis Date: 2025-11-01
Full Report: TINY_MODULARIZATION_ANALYSIS.md
Current Status
hakmem_tiny.c: 2245 lines (was 4555 - 51% reduction achieved)
Extracted: 2136 lines into 9 modules
Target: Reduce to ~1000 lines (55% additional reduction possible)
Top 10 Largest Functions (1042 lines = 46% of file)
| Function | Lines | % | Category |
|---|---|---|---|
| hak_tiny_init() | 450 | 20% | Initialization |
| hak_tiny_trim() | 116 | 5% | Lifecycle |
| tiny_tls_cache_drain() | 90 | 4% | Lifecycle |
| tiny_slow_alloc_fast() | 88 | 4% | Cold path |
| allocate_new_slab() | 79 | 3.5% | Slab mgmt |
| ultra_refill_sll() | 56 | 2.5% | Refill |
| sll_refill_small_from_ss() | 45 | 2% | Refill |
| superslab_tls_bump_fast() | 45 | 2% | Hot path |
| frontend_refill_fc() | 44 | 2% | Refill |
| tiny_fast_refill_and_take() | 39 | 1.7% | Refill |
Priority Roadmap
PRIORITY 1: Hot Path Inline Extraction (417 lines, 19%)
Effort: 2-3 hours | Risk: LOW | When: Immediately
Create:
core/hakmem_tiny_hot_pop.inc.h (84 lines)
core/hakmem_tiny_fastcache.inc.h (53 lines)
core/hakmem_tiny_refill.inc.h (280 lines)
Why first: Largest impact, lowest risk, no performance degradation
PRIORITY 2: Initialization Extraction (450 lines, 20%)
Effort: 3-4 hours | Risk: LOW | When: After Priority 1
Create:
core/hakmem_tiny_init.inc (450 lines)
Optional split:
core/hakmem_tiny_init_env.inc (74 lines)
core/hakmem_tiny_init_superslab.inc (100 lines)
core/hakmem_tiny_init_magazine.inc (150 lines)
core/hakmem_tiny_init_workers.inc (126 lines)
Why second: Single largest function, cold path only
PRIORITY 3: Lifecycle Management (226 lines, 10%)
Effort: 2 hours | Risk: LOW | When: After Priority 2
Create:
core/hakmem_tiny_lifecycle.inc (226 lines)
Contains:
- hak_tiny_trim() (116 lines)
- tiny_tls_cache_drain() (90 lines)
- tiny_apply_mem_diet() (20 lines)
PRIORITY 4: Slab Management (142 lines, 6%)
Effort: 2-3 hours | Risk: MEDIUM | When: After Priority 3
Option A (Simple):
core/hakmem_tiny_slab_mgmt.inc (142 lines)
Option B (Better, Recommended):
core/hakmem_tiny_slab.h
core/hakmem_tiny_slab.c
Contains: allocate_new_slab, release_slab, move_to_full/free_list
Cumulative Impact
| After Phase | Lines Remaining | Reduction | Cumulative |
|---|---|---|---|
| Current | 2245 | - | 0% |
| Phase 1 (hot path inline) | 1828 | -417 | -19% |
| Phase 2 (init) | 1378 | -450 | -39% |
| Phase 3 (lifecycle) | 1152 | -226 | -49% |
| Phase 4 (slab mgmt) | 1010 | -142 | -55% |
Quick Extraction Commands
Phase 1: Hot Path Inline
# Create headers
touch core/hakmem_tiny_hot_pop.inc.h
touch core/hakmem_tiny_fastcache.inc.h
touch core/hakmem_tiny_refill.inc.h
# Extract functions (lines 407-493, 873-900, 584-623, 952-1234)
# Add includes after line 733 (after hotmag.inc.h)
# Test: make clean && make && ./bench_tiny_hot_hakmi
Phase 2: Initialization
# Create module
touch core/hakmem_tiny_init.inc
# Extract hak_tiny_init() (lines 1526-1976)
# Add include at line 1525
# Test: make clean && make && ./bench_random_mixed_hakmi
Phase 3: Lifecycle
# Create module
touch core/hakmem_tiny_lifecycle.inc
# Extract functions (lines 1985-2101, 2135-2225, 2226-2245)
# Add include after init.inc
# Test: HAKMEM_TINY_TRIM_SS=1 ./test_program
Phase 4: Slab Management
# Option A: Simple .inc
touch core/hakmem_tiny_slab_mgmt.inc
# Option B: Proper module (recommended)
touch core/hakmem_tiny_slab.h
touch core/hakmem_tiny_slab.c
# Extract functions (lines 1303-1325, 1327-1406, 1408-1431, 1479-1521)
# Test: Full benchmark suite
Validation After Each Phase
# Must pass all tests
make clean && make
make test
# Performance verification (< 2% variance allowed)
./bench_tiny_hot_hakmi
./bench_random_mixed_hakmi
./scripts/run_bench_suite.sh
# Memory efficiency check
./scripts/run_memory_efficiency.sh
File Organization After All Phases
core/hakmem_tiny.c ~1010 lines (55% reduction)
Hot path inline headers:
hakmem_tiny_hot_pop.inc.h +84 lines
hakmem_tiny_fastcache.inc.h +53 lines
hakmem_tiny_refill.inc.h +280 lines
hakmem_tiny_hotmag.inc.h 147 lines (exists)
hakmem_tiny_ultra_front.inc.h 52 lines (exists)
Backend includes:
hakmem_tiny_init.inc +450 lines
hakmem_tiny_lifecycle.inc +226 lines
hakmem_tiny_slab_mgmt.inc +142 lines
hakmem_tiny_alloc.inc 198 lines (exists)
hakmem_tiny_free.inc 814 lines (exists)
hakmem_tiny_intel.inc 863 lines (exists)
hakmem_tiny_background.inc 261 lines (exists)
hakmem_tiny_slow.inc 36 lines (exists)
hakmem_tiny_remote.inc 56 lines (exists)
Total modules: 40 files, ~8700 lines well-organized
Success Criteria
- Phase 0: 51% reduction achieved (4555→2245 lines)
- Phase 1: 19% additional reduction (2245→1828 lines)
- Phase 2: 20% additional reduction (1828→1378 lines)
- Phase 3: 10% additional reduction (1378→1152 lines)
- Phase 4: 6% additional reduction (1152→1010 lines)
- Final Goal: 55% total reduction (2245→1010 lines)
- No performance regression (< 2% variance)
- All tests pass
- Compilation time increase < 10%
Next Steps
- Start with Priority 1 (hot path inline, lowest risk, highest impact)
- Measure baseline performance before extraction
- Extract one module at a time, test thoroughly
- Commit after each successful extraction (git)
- Document any issues or learnings in TINY_MODULARIZATION_LESSONS.md
Key Decisions
Q: Single .inc or multiple sub-modules for init (450 lines)?
A: Start with single .inc (simpler), split later if needed
Q: .inc file or proper .h/.c module for slab management?
A: Prefer proper module (.h/.c) for better encapsulation
Q: Flat or hierarchical directory structure?
A: Stay flat until 30+ files, then consider core/tiny/ subdirectory
Q: Performance regression tolerance?
A: < 2% variance acceptable, > 5% requires investigation
For detailed analysis, see TINY_MODULARIZATION_ANALYSIS.md