Files
hakmem/core/tiny_refill.h
2025-11-30 11:06:44 +09:00

65 lines
2.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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);
}