Phase 9: SuperSlab optimization & EMPTY slab recycling (WIP)

Phase 9-1: O(1) SuperSlab lookup optimization
- Created ss_addr_map_box: Hash table (8192 buckets) for O(1) SuperSlab lookup
- Created ss_tls_hint_box: TLS caching layer for SuperSlab hints
- Integrated hash table into registry (init, insert, remove, lookup)
- Modified hak_super_lookup() to use new hash table
- Expected: 50-80 cycles → 10-20 cycles (not verified - SuperSlab disabled by default)

Phase 9-2: EMPTY slab recycling implementation
- Created slab_recycling_box: SLAB_TRY_RECYCLE() macro following Box pattern
- Integrated into remote drain (superslab_slab.c)
- Integrated into TLS SLL drain (tls_sll_drain_box.h) with touched slab tracking
- Observable: Debug tracing via HAKMEM_SLAB_RECYCLE_TRACE
- Updated Makefile: Added new box objects to 3 build targets

Known Issues:
- SuperSlab registry exhaustion still occurs (unregistration not working)
- shared_pool_release_slab() may not be removing from g_super_reg[]
- Needs investigation before Phase 9-2 can be completed

Expected Impact (when fixed):
- Stage 1 hit rate: 0% → 80%
- shared_fail events: 4 → 0
- Kernel overhead: 55% → 15%
- Throughput: 16.5M → 25-30M ops/s (+50-80%)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm (CI)
2025-11-30 07:16:50 +09:00
parent 4ad3223f5b
commit 87b7d30998
12 changed files with 957 additions and 64 deletions

View File

@ -17,6 +17,7 @@
#include <stdint.h>
#include <stdio.h> // For fprintf
#include "superslab/superslab_types.h" // For SuperSlabACEState
#include "box/ss_addr_map_box.h" // Phase 9-1: SuperSlab address map
// ============================================================================
// Phase 22-1: Per-Class Initialization State
@ -135,6 +136,15 @@ static inline void lazy_init_global(void) {
hak_super_registry_init();
hak_ss_lru_init();
hak_ss_prewarm_init();
// Phase 9-1: Initialize SuperSlab address map (hash table O(1) lookup)
ss_map_init(&g_ss_addr_map);
#if !HAKMEM_BUILD_RELEASE
if (getenv("HAKMEM_SS_MAP_TRACE")) {
fprintf(stderr, "[SS_MAP] Initialized hash table with %d buckets\n", SS_MAP_HASH_SIZE);
}
#endif
}
// Mark global resources as initialized