Add OBSERVE stats and auto tiny policy profile

This commit is contained in:
Moe Charm (CI)
2025-12-06 01:44:05 +09:00
parent 03538055ae
commit 18faa6a1c4
8 changed files with 182 additions and 144 deletions

View File

@ -5,10 +5,12 @@
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include "tiny_policy_learner_box.h"
TinyClassPolicy g_tiny_class_policy[TINY_NUM_CLASSES];
static _Atomic int g_tiny_class_policy_init_done = 0;
static _Atomic int g_tiny_class_policy_logged = 0;
static _Atomic int g_tiny_class_policy_profile_auto = 0;
static inline TinyClassPolicy tiny_class_policy_default_entry(void) {
TinyClassPolicy p = {0};
@ -51,23 +53,50 @@ static void tiny_class_policy_set_tinyplus_all(void) {
tiny_class_policy_set_legacy();
}
static void tiny_class_policy_set_auto(void) {
// auto プロファイルは legacy をベースにして、後段の learner に委譲
tiny_class_policy_set_legacy();
atomic_store_explicit(&g_tiny_class_policy_profile_auto, 1, memory_order_release);
}
static const char* tiny_class_policy_set_profile(const char* profile) {
if (profile == NULL || *profile == '\0' || strcasecmp(profile, "legacy") == 0) {
tiny_class_policy_set_legacy();
atomic_store_explicit(&g_tiny_class_policy_profile_auto, 0, memory_order_release);
return "legacy";
} else if (strcasecmp(profile, "c5_7_only") == 0) {
tiny_class_policy_set_c5_7_only();
atomic_store_explicit(&g_tiny_class_policy_profile_auto, 0, memory_order_release);
return "c5_7_only";
} else if (strcasecmp(profile, "tinyplus_all") == 0) {
tiny_class_policy_set_tinyplus_all();
atomic_store_explicit(&g_tiny_class_policy_profile_auto, 0, memory_order_release);
return "tinyplus_all";
} else if (strcasecmp(profile, "auto") == 0) {
tiny_class_policy_set_auto();
return "auto";
} else {
// 不明な値は安全側で legacy にフォールバック。
tiny_class_policy_set_legacy();
atomic_store_explicit(&g_tiny_class_policy_profile_auto, 0, memory_order_release);
return "legacy";
}
}
void tiny_class_policy_dump(const char* tag) {
const char* header = tag ? tag : "[POLICY_DUMP]";
fprintf(stderr, "%s\n", header);
for (int cls = 0; cls < TINY_NUM_CLASSES; cls++) {
TinyClassPolicy* p = &g_tiny_class_policy[cls];
fprintf(stderr,
" C%d: page=%u warm=%u cap=%u\n",
cls,
p->page_box_enabled,
p->warm_enabled,
p->warm_cap);
}
}
void tiny_class_policy_init_once(void) {
if (atomic_load_explicit(&g_tiny_class_policy_init_done, memory_order_acquire)) {
return;
@ -79,16 +108,16 @@ void tiny_class_policy_init_once(void) {
// 1-shot ダンプでポリシーの内容を可視化(デバッグ用)
if (atomic_exchange_explicit(&g_tiny_class_policy_logged, 1, memory_order_acq_rel) == 0) {
fprintf(stderr, "[POLICY_INIT] profile=%s\n", active_profile);
for (int cls = 0; cls < TINY_NUM_CLASSES; cls++) {
TinyClassPolicy* p = &g_tiny_class_policy[cls];
fprintf(stderr,
" C%d: page=%u warm=%u cap=%u\n",
cls,
p->page_box_enabled,
p->warm_enabled,
p->warm_cap);
}
tiny_class_policy_dump(NULL);
}
atomic_store_explicit(&g_tiny_class_policy_init_done, 1, memory_order_release);
}
void tiny_class_policy_refresh_auto(void) {
tiny_class_policy_init_once();
if (!atomic_load_explicit(&g_tiny_class_policy_profile_auto, memory_order_acquire)) {
return;
}
tiny_policy_learner_tick();
}