Files
hakmem/core/pool_tls_bind.c

12 lines
313 B
C
Raw Normal View History

Pool TLS: BIND_BOX simplification - TID cache only (SEGV fixed) Problem: Range-based ownership check caused SEGV in MT benchmarks Root cause: Arena range tracking complexity + initialization race condition Solution: Simplified to TID-cache-only approach - Removed arena range tracking (arena_base, arena_end) - Fast same-thread check via TID comparison only - gettid() cached in TLS to avoid repeated syscalls Changes: 1. core/pool_tls_bind.h - Simplified to TID cache struct - PoolTLSBind: only stores tid (no arena range) - pool_get_my_tid(): inline TID cache accessor - pool_tls_is_mine_tid(owner_tid): simple TID comparison 2. core/pool_tls_bind.c - Minimal TLS storage only - All logic moved to inline functions in header - Only defines: __thread PoolTLSBind g_pool_tls_bind = {0}; 3. core/pool_tls.c - Use TID comparison in pool_free() - Changed: pool_tls_is_mine(ptr) → pool_tls_is_mine_tid(owner_tid) - Registry lookup still needed for owner_tid (accepted overhead) - Fixed gettid_cached() duplicate definition (#ifdef guard) 4. core/pool_tls_arena.c - Removed arena range hooks - Removed: pool_tls_bind_update_range() call (disabled) - Removed: pool_arena_get_my_range() implementation 5. core/pool_tls_arena.h - Removed getter API - Removed: pool_arena_get_my_range() declaration Results: - MT stability: ✅ 2T/4T benchmarks SEGV-free - Throughput: 2T=0.93M ops/s, 4T=1.64M ops/s - Code simplicity: 90% reduction in BIND_BOX complexity Trade-off: - Registry lookup still required (TID-only doesn't eliminate it) - But: simplified code, no initialization complexity, MT-safe Next: Profile with perf to find remaining Mid-Large bottlenecks 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-14 15:00:13 +09:00
#include "pool_tls_bind.h"
/**
* POOL_TLS_BIND_BOX - TID Cache Implementation
*
* This file provides the TLS storage for thread ID caching.
* All logic is inlined in pool_tls_bind.h for performance.
*/
// TLS storage (per-thread, automatically zero-initialized)
__thread PoolTLSBind g_pool_tls_bind = {0};