65 lines
2.3 KiB
C
65 lines
2.3 KiB
C
// tiny_refill.h - Refill Boundary box (inline helpers)
|
||
#pragma once
|
||
#include <stdatomic.h>
|
||
#include "hakmem_tiny_superslab.h"
|
||
#include "hakmem_trace_master.h" // Phase 4c: Master trace control
|
||
#include "slab_handle.h"
|
||
#include "tiny_sticky.h"
|
||
#include "tiny_ready.h"
|
||
#include "box/mailbox_box.h"
|
||
#include "tiny_remote_bg.h" // Background remote-drain step (best-effort)
|
||
#include "tiny_ready_bg.h" // Ready aggregator (mailbox→ready hint)
|
||
#include "tiny_route.h" // Route Fingerprint (Box boundary tracing)
|
||
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
|
||
// External helpers from main TU
|
||
static inline uint32_t tiny_self_u32(void);
|
||
static inline void tiny_tls_bind_slab(TinyTLSSlab* tls, SuperSlab* ss, int slab_idx);
|
||
|
||
// Forward decls in main TU
|
||
static inline uintptr_t hot_slot_pop(int class_idx);
|
||
static inline uintptr_t bench_pub_pop(int class_idx);
|
||
static inline SuperSlab* slab_entry_ss(uintptr_t ent);
|
||
static inline int slab_entry_idx(uintptr_t ent);
|
||
|
||
// Mailbox/Ready consumption always allowed (ENV gate removed)
|
||
static inline int tiny_mail_ready_allowed(void) { return 1; }
|
||
|
||
// Registry scan window (ENV: HAKMEM_TINY_REG_SCAN_MAX, default 256)
|
||
static inline int tiny_reg_scan_max(void) {
|
||
static int v = -1;
|
||
if (__builtin_expect(v == -1, 0)) {
|
||
const char* s = getenv("HAKMEM_TINY_REG_SCAN_MAX");
|
||
int defv = 256; // conservative default
|
||
if (s && *s) {
|
||
int parsed = atoi(s);
|
||
v = (parsed > 0) ? parsed : defv;
|
||
} else {
|
||
v = defv;
|
||
}
|
||
}
|
||
return v;
|
||
}
|
||
|
||
// Opportunistic background remote-drain knobs (ENV removed; fixed defaults)
|
||
static inline int tiny_bg_remote_tryrate(void) { return 16; }
|
||
static inline int tiny_bg_remote_budget_default(void) { return 2; }
|
||
|
||
// Mid-size simple refill (ENV: HAKMEM_TINY_MID_REFILL_SIMPLE)
|
||
static inline int tiny_mid_refill_simple_enabled(void) {
|
||
static int v = -1;
|
||
if (__builtin_expect(v == -1, 0)) {
|
||
const char* s = getenv("HAKMEM_TINY_MID_REFILL_SIMPLE");
|
||
v = (s && *s && *s != '0') ? 1 : 0;
|
||
}
|
||
return v;
|
||
}
|
||
|
||
#include "box/tiny_adopt_refill_box.h" // adopt/refill 境界の集約(Step 5)
|
||
|
||
// Try a quick adopt from sticky/hot/bench/mailbox (single pass)
|
||
static inline SuperSlab* tiny_refill_try_fast(int class_idx, TinyTLSSlab* tls) {
|
||
return tiny_adopt_refill_box(class_idx, tls);
|
||
}
|