2025-12-04 14:22:48 +09:00
|
|
|
// Archived legacy slow allocation path for Tiny pool.
|
|
|
|
|
// Not compiled by default; kept for reference / A/B rollback.
|
|
|
|
|
// Source moved from core/hakmem_tiny_legacy_slow_box.inc after Box refactor cleanup (2025-12-04).
|
|
|
|
|
|
Refactor: Extract 3 more Box modules from hakmem_tiny.c (-70% total reduction)
Continue hakmem_tiny.c refactoring with 3 large module extractions.
## Changes
**hakmem_tiny.c**: 995 → 616 lines (-379 lines, -38% this phase)
**Total reduction**: 2081 → 616 lines (-1465 lines, -70% cumulative) 🏆
## Extracted Modules (3 new boxes)
6. **tls_state_box** (224 lines)
- TLS SLL enable flags and configuration
- TLS canaries and SLL array definitions
- Debug counters (path, ultra, allocation)
- Frontend/backend configuration
- TLS thread ID caching helpers
- Frontend hit/miss counters
- HotMag, QuickSlot, Ultra-front configuration
- Helper functions (is_hot_class, tiny_optional_push)
- Intelligence system helpers
7. **legacy_slow_box** (96 lines)
- tiny_slow_alloc_fast() function (cold/unused)
- Legacy slab-based allocation with refill
- TLS cache/fast cache refill from slabs
- Remote drain handling
- List management (move to full/free lists)
- Marked __attribute__((cold, noinline, unused))
8. **slab_lookup_box** (77 lines)
- registry_lookup() - O(1) hash-based lookup
- hak_tiny_owner_slab() - public API for slab discovery
- Linear probing search with atomic owner access
- O(N) fallback for non-registry mode
- Safety validation for membership checking
## Cumulative Progress (8 boxes total)
**Previously extracted** (Phase 1):
1. config_box (211 lines)
2. publish_box (419 lines)
3. globals_box (256 lines)
4. phase6_wrappers_box (122 lines)
5. ace_guard_box (100 lines)
**This phase** (Phase 2):
6. tls_state_box (224 lines)
7. legacy_slow_box (96 lines)
8. slab_lookup_box (77 lines)
**Total extracted**: 1,505 lines across 8 coherent modules
**Remaining core**: 616 lines (well-organized, focused)
## Benefits
- **Readability**: 2k monolith → focused 616-line core
- **Maintainability**: Each box has single responsibility
- **Organization**: TLS state, legacy code, lookup utilities separated
- **Build**: All modules compile successfully ✅
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 01:23:59 +09:00
|
|
|
static __attribute__((cold, noinline, unused)) void* tiny_slow_alloc_fast(int class_idx) {
|
|
|
|
|
int tls_enabled = g_tls_list_enable;
|
|
|
|
|
TinyTLSList* tls = &g_tls_lists[class_idx];
|
|
|
|
|
pthread_mutex_t* lock = &g_tiny_class_locks[class_idx].m;
|
|
|
|
|
pthread_mutex_lock(lock);
|
|
|
|
|
|
|
|
|
|
TinySlab* slab = g_tiny_pool.free_slabs[class_idx];
|
|
|
|
|
if (slab) {
|
|
|
|
|
g_tiny_pool.free_slabs[class_idx] = slab->next;
|
|
|
|
|
} else {
|
|
|
|
|
slab = allocate_new_slab(class_idx);
|
|
|
|
|
if (!slab) {
|
|
|
|
|
pthread_mutex_unlock(lock);
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
slab->next = NULL;
|
|
|
|
|
|
|
|
|
|
if (atomic_load_explicit(&slab->remote_head, memory_order_acquire)) {
|
|
|
|
|
tiny_remote_drain_locked(slab);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int block_idx = hak_tiny_find_free_block(slab);
|
|
|
|
|
if (block_idx < 0) {
|
|
|
|
|
slab->next = g_tiny_pool.free_slabs[class_idx];
|
|
|
|
|
g_tiny_pool.free_slabs[class_idx] = slab;
|
|
|
|
|
pthread_mutex_unlock(lock);
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
hak_tiny_set_used(slab, block_idx);
|
|
|
|
|
slab->free_count--;
|
|
|
|
|
size_t block_size = g_tiny_class_sizes[class_idx];
|
|
|
|
|
uint8_t* base = (uint8_t*)slab->base;
|
|
|
|
|
void* ret = (void*)(base + ((size_t)block_idx * block_size));
|
|
|
|
|
g_tiny_pool.alloc_count[class_idx]++;
|
|
|
|
|
|
|
|
|
|
uint16_t cap = g_fast_cap_defaults[class_idx];
|
|
|
|
|
uint16_t count = g_fast_count[class_idx];
|
|
|
|
|
uint16_t fast_need = (cap > count) ? (uint16_t)(cap - count) : 0;
|
|
|
|
|
if (fast_need > slab->free_count) fast_need = (uint16_t)slab->free_count;
|
|
|
|
|
|
|
|
|
|
uint32_t tls_need = 0;
|
|
|
|
|
if (tls_enabled && tls_list_needs_refill(tls)) {
|
|
|
|
|
uint32_t target = tls_list_refill_threshold(tls);
|
|
|
|
|
if (tls->count < target) {
|
|
|
|
|
tls_need = target - tls->count;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
uint32_t remaining = slab->free_count;
|
|
|
|
|
if (fast_need > remaining) fast_need = (uint16_t)remaining;
|
|
|
|
|
remaining -= fast_need;
|
|
|
|
|
if (tls_need > remaining) tls_need = remaining;
|
|
|
|
|
|
|
|
|
|
while (fast_need > 0) {
|
|
|
|
|
int extra_idx = hak_tiny_find_free_block(slab);
|
|
|
|
|
if (extra_idx < 0) break;
|
|
|
|
|
hak_tiny_set_used(slab, extra_idx);
|
|
|
|
|
slab->free_count--;
|
|
|
|
|
void* extra = (void*)(base + ((size_t)extra_idx * block_size));
|
|
|
|
|
int pushed = 0;
|
|
|
|
|
if (__builtin_expect(g_fastcache_enable && class_idx <= 3, 1)) {
|
2025-12-04 11:05:06 +09:00
|
|
|
pushed = fastcache_push(class_idx, HAK_BASE_FROM_RAW(extra));
|
Refactor: Extract 3 more Box modules from hakmem_tiny.c (-70% total reduction)
Continue hakmem_tiny.c refactoring with 3 large module extractions.
## Changes
**hakmem_tiny.c**: 995 → 616 lines (-379 lines, -38% this phase)
**Total reduction**: 2081 → 616 lines (-1465 lines, -70% cumulative) 🏆
## Extracted Modules (3 new boxes)
6. **tls_state_box** (224 lines)
- TLS SLL enable flags and configuration
- TLS canaries and SLL array definitions
- Debug counters (path, ultra, allocation)
- Frontend/backend configuration
- TLS thread ID caching helpers
- Frontend hit/miss counters
- HotMag, QuickSlot, Ultra-front configuration
- Helper functions (is_hot_class, tiny_optional_push)
- Intelligence system helpers
7. **legacy_slow_box** (96 lines)
- tiny_slow_alloc_fast() function (cold/unused)
- Legacy slab-based allocation with refill
- TLS cache/fast cache refill from slabs
- Remote drain handling
- List management (move to full/free lists)
- Marked __attribute__((cold, noinline, unused))
8. **slab_lookup_box** (77 lines)
- registry_lookup() - O(1) hash-based lookup
- hak_tiny_owner_slab() - public API for slab discovery
- Linear probing search with atomic owner access
- O(N) fallback for non-registry mode
- Safety validation for membership checking
## Cumulative Progress (8 boxes total)
**Previously extracted** (Phase 1):
1. config_box (211 lines)
2. publish_box (419 lines)
3. globals_box (256 lines)
4. phase6_wrappers_box (122 lines)
5. ace_guard_box (100 lines)
**This phase** (Phase 2):
6. tls_state_box (224 lines)
7. legacy_slow_box (96 lines)
8. slab_lookup_box (77 lines)
**Total extracted**: 1,505 lines across 8 coherent modules
**Remaining core**: 616 lines (well-organized, focused)
## Benefits
- **Readability**: 2k monolith → focused 616-line core
- **Maintainability**: Each box has single responsibility
- **Organization**: TLS state, legacy code, lookup utilities separated
- **Build**: All modules compile successfully ✅
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 01:23:59 +09:00
|
|
|
} else {
|
2025-12-04 11:05:06 +09:00
|
|
|
pushed = tiny_fast_push(class_idx, HAK_BASE_FROM_RAW(extra));
|
Refactor: Extract 3 more Box modules from hakmem_tiny.c (-70% total reduction)
Continue hakmem_tiny.c refactoring with 3 large module extractions.
## Changes
**hakmem_tiny.c**: 995 → 616 lines (-379 lines, -38% this phase)
**Total reduction**: 2081 → 616 lines (-1465 lines, -70% cumulative) 🏆
## Extracted Modules (3 new boxes)
6. **tls_state_box** (224 lines)
- TLS SLL enable flags and configuration
- TLS canaries and SLL array definitions
- Debug counters (path, ultra, allocation)
- Frontend/backend configuration
- TLS thread ID caching helpers
- Frontend hit/miss counters
- HotMag, QuickSlot, Ultra-front configuration
- Helper functions (is_hot_class, tiny_optional_push)
- Intelligence system helpers
7. **legacy_slow_box** (96 lines)
- tiny_slow_alloc_fast() function (cold/unused)
- Legacy slab-based allocation with refill
- TLS cache/fast cache refill from slabs
- Remote drain handling
- List management (move to full/free lists)
- Marked __attribute__((cold, noinline, unused))
8. **slab_lookup_box** (77 lines)
- registry_lookup() - O(1) hash-based lookup
- hak_tiny_owner_slab() - public API for slab discovery
- Linear probing search with atomic owner access
- O(N) fallback for non-registry mode
- Safety validation for membership checking
## Cumulative Progress (8 boxes total)
**Previously extracted** (Phase 1):
1. config_box (211 lines)
2. publish_box (419 lines)
3. globals_box (256 lines)
4. phase6_wrappers_box (122 lines)
5. ace_guard_box (100 lines)
**This phase** (Phase 2):
6. tls_state_box (224 lines)
7. legacy_slow_box (96 lines)
8. slab_lookup_box (77 lines)
**Total extracted**: 1,505 lines across 8 coherent modules
**Remaining core**: 616 lines (well-organized, focused)
## Benefits
- **Readability**: 2k monolith → focused 616-line core
- **Maintainability**: Each box has single responsibility
- **Organization**: TLS state, legacy code, lookup utilities separated
- **Build**: All modules compile successfully ✅
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 01:23:59 +09:00
|
|
|
}
|
|
|
|
|
if (!pushed) {
|
|
|
|
|
if (tls_enabled) {
|
|
|
|
|
tiny_tls_list_guard_push(class_idx, tls, extra);
|
|
|
|
|
tls_list_push(tls, extra, class_idx);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
fast_need--;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while (tls_enabled && tls_need > 0) {
|
|
|
|
|
int extra_idx = hak_tiny_find_free_block(slab);
|
|
|
|
|
if (extra_idx < 0) break;
|
|
|
|
|
hak_tiny_set_used(slab, extra_idx);
|
|
|
|
|
slab->free_count--;
|
|
|
|
|
void* extra = (void*)(base + ((size_t)extra_idx * block_size));
|
|
|
|
|
tiny_tls_list_guard_push(class_idx, tls, extra);
|
|
|
|
|
tls_list_push(tls, extra, class_idx);
|
|
|
|
|
tls_need--;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (slab->free_count == 0) {
|
|
|
|
|
move_to_full_list(class_idx, slab);
|
|
|
|
|
} else {
|
|
|
|
|
slab->next = g_tiny_pool.free_slabs[class_idx];
|
|
|
|
|
g_tiny_pool.free_slabs[class_idx] = slab;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pthread_mutex_unlock(lock);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
2025-12-04 14:22:48 +09:00
|
|
|
|