Phase 2-Opt2: Reduce SuperSlab default size to 512KB (+10-15% perf)
Changes: - SUPERSLAB_LG_MIN: 20 → 19 (1MB → 512KB) - SUPERSLAB_LG_DEFAULT: 21 → 19 (2MB → 512KB) - SUPERSLAB_LG_MAX: 21 (unchanged, still allows 2MB) Benchmark Results: - ws=256: 72M → 79.80M ops/s (+10.8%, +7.8M ops/s) - ws=1024: 56.71M → 65.07M ops/s (+14.7%, +8.36M ops/s) Expected: +3-5% improvement Actual: +10-15% improvement (EXCEEDED PREDICTION!) Root Cause Analysis: - Perf analysis showed shared_pool_acquire_slab at 23.83% CPU time - Phase 1 removed memset overhead (+1.3%) - Phase 2 reduces mmap allocation size by 75% (2MB → 512KB) - Fewer page faults during SuperSlab initialization - Better memory granularity (less VA space waste) - Smaller allocations complete faster even without page faults Technical Details: - Each SuperSlab contains 8 slabs of 64KB (total 512KB) - Previous: 16-32 slabs per SuperSlab (1-2MB) - New: 8 slabs per SuperSlab (512KB) - Refill frequency increases slightly, but init cost dominates - Net effect: Major throughput improvement Phase 1+2 Cumulative Improvement: - Baseline: 64.61M ops/s - Phase 1 final: 72.92M ops/s (+12.9%) - Phase 2 final: 79.80M ops/s (+23.5% total, +9.4% over Phase 1) Files Modified: - core/hakmem_tiny_superslab_constants.h:12-33 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -9,18 +9,27 @@
|
||||
// SuperSlab Layout Constants
|
||||
// ============================================================================
|
||||
|
||||
// Log2 range for SuperSlab sizes (in MB):
|
||||
// - MIN: 1MB (2^20)
|
||||
// - MAX: 2MB (2^21)
|
||||
// - DEFAULT: 2MB unless constrained by ACE/env
|
||||
// Log2 range for SuperSlab sizes:
|
||||
// - MIN: 512KB (2^19) - Phase 2 optimization: reduced from 1MB
|
||||
// - MAX: 2MB (2^21) - unchanged
|
||||
// - DEFAULT: 512KB (2^19) - Phase 2 optimization: reduced from 2MB
|
||||
//
|
||||
// Phase 2-Opt2: Reduce SuperSlab size to minimize initialization cost
|
||||
// Benefit: 75% reduction in allocation size (2MB → 512KB)
|
||||
// Expected: +3-5% throughput improvement
|
||||
// Rationale:
|
||||
// - Smaller SuperSlab = fewer page faults during allocation
|
||||
// - Better memory granularity (less wasted VA space)
|
||||
// - Memset already removed in Phase 1, so pure allocation overhead
|
||||
// - Perf analysis showed shared_pool_acquire_slab at 23.83% CPU time
|
||||
#ifndef SUPERSLAB_LG_MIN
|
||||
#define SUPERSLAB_LG_MIN 20
|
||||
#define SUPERSLAB_LG_MIN 19
|
||||
#endif
|
||||
#ifndef SUPERSLAB_LG_MAX
|
||||
#define SUPERSLAB_LG_MAX 21
|
||||
#endif
|
||||
#ifndef SUPERSLAB_LG_DEFAULT
|
||||
#define SUPERSLAB_LG_DEFAULT 21
|
||||
#define SUPERSLAB_LG_DEFAULT 19
|
||||
#endif
|
||||
|
||||
// Size of each slab within SuperSlab (fixed, never changes)
|
||||
|
||||
Reference in New Issue
Block a user