Files
hakmem/core/hakmem_policy.h
Moe Charm (CI) d355041638 Port: Tune Superslab Min-Keep and Shared Pool Soft Caps (04a60c316)
- Policy: Set tiny_min_keep for C2-C6 to reduce mmap/munmap churn
- Policy: Loosen tiny_cap (soft cap) for C4-C6 to allow more active slots
- Added tiny_min_keep field to FrozenPolicy struct

Larson: 52.13M ops/s (stable)

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 15:06:36 +09:00

52 lines
1.9 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.

#ifndef HAKMEM_POLICY_H
#define HAKMEM_POLICY_H
#include <stddef.h>
#include <stdint.h>
#include <stdatomic.h>
#ifndef MAX_SITES
#define MAX_SITES 256
#endif
// FrozenPolicy: read-only snapshot used by the hot path.
// SACS-3: Only L1 (ACE layer) fields are consulted on the hot path.
typedef struct FrozenPolicy {
// Tiny (L0) reserved for future CAP tuning (not used by hot path yet)
uint16_t tiny_cap[8]; // classes 0..7
uint16_t tiny_min_keep[8]; // min slabs to keep (reduce mmap/munmap churn)
// L1 ACE MidPool (232KiB) and LargePool (64KiB1MiB)
uint16_t mid_cap[5]; // 2/4/8/16/32 KiB
uint16_t large_cap[5]; // 64/128/256/512 KiB/1 MiB
uint32_t mid_dyn1_bytes; // Optional dynamic Mid class #1 (0=disabled)
uint16_t mid_cap_dyn1; // CAP for dynamic Mid class #1 (pages). 0=ignore
uint32_t mid_dyn2_bytes; // Optional dynamic Mid class #2 (0=disabled)
uint16_t mid_cap_dyn2; // CAP for dynamic Mid class #2 (pages). 0=ignore
// Optional: site/class routing within L1 (lightweight hints)
uint8_t shard_map[MAX_SITES][10]; // (site,class)→shard id (0..N-1)
uint8_t policy_map[MAX_SITES][10]; // (site,class)→policy (KEEP/WARM/COLD) hint
// Limits
// Max widening factor for class promotion (round-up policy)
float w_max_mid; // MidPool (232KiB)
float w_max_large; // LargePool (64KiB1MiB)
float w_max; // legacy (kept for compatibility)
size_t thp_threshold; // L2 THP threshold (usually 2MiB)
// Meta
uint64_t generation;
} FrozenPolicy;
// Initialize default frozen policy.
void hkm_policy_init(void);
// Publish a new policy snapshot (RCU-like). Takes ownership of new_pol.
void hkm_policy_publish(FrozenPolicy* new_pol);
// Get the current policy snapshot (never NULL after init).
const FrozenPolicy* hkm_policy_get(void);
#endif // HAKMEM_POLICY_H