// tiny_mmap_gate.h - Mmap Gate (must-adopt-before-mmap) #pragma once #include "hakmem_tiny_superslab.h" #include "tiny_refill.h" #include "hakmem_super_registry.h" #include "tiny_route.h" // Box: adopt gate (header-only) #include "box/adopt_gate_box.h" // Returns adopted SuperSlab* or NULL static inline SuperSlab* tiny_must_adopt_gate(int class_idx, TinyTLSSlab* tls) { // Env: enable gate static int en = -1; if (__builtin_expect(en == -1, 0)) { const char* s = getenv("HAKMEM_TINY_MUST_ADOPT"); en = (s && atoi(s) != 0) ? 1 : 0; } if (!en) return NULL; // Adaptive: require remote activity and apply cooldown on failures extern _Atomic int g_ss_remote_seen; if (atomic_load_explicit(&g_ss_remote_seen, memory_order_relaxed) == 0) { return NULL; // No remote traffic observed yet → skip heavy adopt path } // Cooldown (TLS per-class) static __thread int s_cooldown[TINY_NUM_CLASSES] = {0}; static int s_cd_def = -1; if (__builtin_expect(s_cd_def == -1, 0)) { const char* cd = getenv("HAKMEM_TINY_SS_ADOPT_COOLDOWN"); int v = cd ? atoi(cd) : 32; // default: 32 missesの間は休む if (v < 0) v = 0; if (v > 1024) v = 1024; s_cd_def = v; } if (s_cooldown[class_idx] > 0) { s_cooldown[class_idx]--; return NULL; } // Delegate to Box SuperSlab* ss = adopt_gate_try(class_idx, tls); if (!ss && s_cd_def > 0) { s_cooldown[class_idx] = s_cd_def; // backoff on miss } return ss; }