Implement C6 ULTRA intrusive LIFO freelist with ENV gating: - Single-linked LIFO using next pointer at USER+1 offset - tiny_next_store/tiny_next_load for pointer access (single source of truth) - Segment learning via ss_fast_lookup (per-class seg_base/seg_end) - ENV gate: HAKMEM_TINY_C6_ULTRA_INTRUSIVE_FL (default OFF) - Counters: c6_ifl_push/pop/fallback in FREE_PATH_STATS Files: - core/box/tiny_ultra_tls_box.h: Added c6_head field for intrusive LIFO - core/box/tiny_ultra_tls_box.c: Pop/push with intrusive branching (case 6) - core/box/tiny_c6_ultra_intrusive_env_box.h: ENV gate (new) - core/box/tiny_c6_intrusive_freelist_box.h: L1 pure LIFO (new) - core/tiny_debug_ring.h: C6_IFL events - core/box/free_path_stats_box.h/c: c6_ifl_* counters A/B Test Results (1M iterations, ws=200, 257-512B): - ENV_OFF (array): 56.6 Mop/s avg - ENV_ON (intrusive): 57.6 Mop/s avg (+1.8%, within noise) - Counters verified: c6_ifl_push=265890, c6_ifl_pop=265815, fallback=0 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
55 lines
1.8 KiB
C
55 lines
1.8 KiB
C
#ifndef TINY_DEBUG_RING_H
|
|
#define TINY_DEBUG_RING_H
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include "hakmem_build_flags.h"
|
|
|
|
// Tiny Debug Ring Trace (Phase 8 tooling)
|
|
// Trace control:
|
|
// - HAKMEM_TINY_TRACE_RING=1
|
|
// - or HAKMEM_TRACE=ring
|
|
// Records recent alloc/free events and dumps them on SIGSEGV.
|
|
|
|
enum {
|
|
TINY_RING_EVENT_ALLOC_ENTER = 1,
|
|
TINY_RING_EVENT_ALLOC_SUCCESS,
|
|
TINY_RING_EVENT_ALLOC_NULL,
|
|
TINY_RING_EVENT_ALLOC_REFILL_START,
|
|
TINY_RING_EVENT_ALLOC_REFILL_NULL,
|
|
TINY_RING_EVENT_ALLOC_BIND,
|
|
TINY_RING_EVENT_FREE_ENTER,
|
|
TINY_RING_EVENT_FREE_FAST,
|
|
TINY_RING_EVENT_FREE_REMOTE,
|
|
TINY_RING_EVENT_FREE_LOCAL,
|
|
TINY_RING_EVENT_FREE_RETURN_MAG,
|
|
TINY_RING_EVENT_SUPERSLAB_ADOPT,
|
|
TINY_RING_EVENT_SUPERSLAB_ALLOC,
|
|
TINY_RING_EVENT_SUPERSLAB_PUBLISH,
|
|
TINY_RING_EVENT_SUPERSLAB_ADOPT_FAIL,
|
|
TINY_RING_EVENT_REMOTE_PUSH,
|
|
TINY_RING_EVENT_REMOTE_INVALID,
|
|
TINY_RING_EVENT_REMOTE_DRAIN,
|
|
TINY_RING_EVENT_OWNER_ACQUIRE,
|
|
TINY_RING_EVENT_OWNER_RELEASE,
|
|
TINY_RING_EVENT_FRONT_BYPASS,
|
|
TINY_RING_EVENT_MAILBOX_PUBLISH,
|
|
TINY_RING_EVENT_MAILBOX_FETCH,
|
|
TINY_RING_EVENT_MAILBOX_FETCH_NULL,
|
|
TINY_RING_EVENT_ROUTE,
|
|
// TLS SLL anomalies (investigation aid, gated by HAKMEM_TINY_SLL_RING)
|
|
TINY_RING_EVENT_TLS_SLL_REJECT = 0x7F10,
|
|
TINY_RING_EVENT_TLS_SLL_SENTINEL = 0x7F11,
|
|
TINY_RING_EVENT_TLS_SLL_HDR_CORRUPT = 0x7F12,
|
|
// C6 Intrusive Freelist (Phase TLS-UNIFY-3)
|
|
TINY_RING_EVENT_C6_IFL_PUSH = 0x7F20,
|
|
TINY_RING_EVENT_C6_IFL_POP = 0x7F21,
|
|
TINY_RING_EVENT_C6_IFL_EMPTY = 0x7F22 // pop miss (empty)
|
|
};
|
|
|
|
// Function declarations (implementation in tiny_debug_ring.c)
|
|
void tiny_debug_ring_init(void);
|
|
void tiny_debug_ring_record(uint16_t event, uint16_t class_idx, void* ptr, uintptr_t aux);
|
|
|
|
#endif // TINY_DEBUG_RING_H
|