2025-12-04 18:01:25 +09:00
|
|
|
|
// tiny_route_box.c - Implementation of Tiny Front Routing Policy Box
|
|
|
|
|
|
|
|
|
|
|
|
#include "tiny_route_box.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
#include <string.h>
|
2025-12-05 23:41:01 +09:00
|
|
|
|
#include <stdio.h>
|
2025-12-04 18:01:25 +09:00
|
|
|
|
|
|
|
|
|
|
// Default: conservative profile (all classes TINY_FIRST).
|
|
|
|
|
|
// This keeps Tiny in the fast path but always allows Pool fallback.
|
|
|
|
|
|
uint8_t g_tiny_route[8] = {
|
|
|
|
|
|
ROUTE_TINY_FIRST, ROUTE_TINY_FIRST, ROUTE_TINY_FIRST, ROUTE_TINY_FIRST,
|
|
|
|
|
|
ROUTE_TINY_FIRST, ROUTE_TINY_FIRST, ROUTE_TINY_FIRST, ROUTE_TINY_FIRST
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
void tiny_route_init(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
const char* profile = getenv("HAKMEM_TINY_PROFILE");
|
|
|
|
|
|
if (!profile || !*profile) {
|
|
|
|
|
|
profile = "conservative";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (strcmp(profile, "hot") == 0) {
|
|
|
|
|
|
// Hot profile:
|
|
|
|
|
|
// - C0-C3: TINY_ONLY (小さいクラスは Tiny 専用で aggressive)
|
|
|
|
|
|
// - C4-C6: TINY_FIRST (中間サイズは fallback あり)
|
|
|
|
|
|
// - C7 : POOL_ONLY (1KB headerless は Pool に任せる)
|
|
|
|
|
|
g_tiny_route[0] = g_tiny_route[1] = g_tiny_route[2] = g_tiny_route[3] = ROUTE_TINY_ONLY;
|
|
|
|
|
|
g_tiny_route[4] = g_tiny_route[5] = g_tiny_route[6] = ROUTE_TINY_FIRST;
|
|
|
|
|
|
g_tiny_route[7] = ROUTE_POOL_ONLY;
|
|
|
|
|
|
} else if (strcmp(profile, "full") == 0) {
|
|
|
|
|
|
// Full Tiny profile:
|
|
|
|
|
|
// - 全クラス TINY_ONLY(microbench 用、Pool に逃がさない)
|
|
|
|
|
|
memset(g_tiny_route, ROUTE_TINY_ONLY, sizeof(g_tiny_route));
|
|
|
|
|
|
} else if (strcmp(profile, "off") == 0) {
|
|
|
|
|
|
// Tiny off profile:
|
|
|
|
|
|
// - 全クラス POOL_ONLY(Tiny front 完全無効化)
|
|
|
|
|
|
memset(g_tiny_route, ROUTE_POOL_ONLY, sizeof(g_tiny_route));
|
|
|
|
|
|
} else {
|
|
|
|
|
|
// "conservative" および未知の値:
|
|
|
|
|
|
// - 全クラス TINY_FIRST(Tiny を使うが必ず Pool fallbackあり)
|
|
|
|
|
|
memset(g_tiny_route, ROUTE_TINY_FIRST, sizeof(g_tiny_route));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-05 23:41:01 +09:00
|
|
|
|
#if HAKMEM_BUILD_RELEASE
|
|
|
|
|
|
static int rel_logged = 0;
|
|
|
|
|
|
if (!rel_logged) {
|
|
|
|
|
|
const char* mode =
|
|
|
|
|
|
(g_tiny_route[7] == ROUTE_TINY_ONLY) ? "TINY_ONLY" :
|
|
|
|
|
|
(g_tiny_route[7] == ROUTE_TINY_FIRST) ? "TINY_FIRST" :
|
|
|
|
|
|
(g_tiny_route[7] == ROUTE_POOL_ONLY) ? "POOL_ONLY" : "UNKNOWN";
|
|
|
|
|
|
fprintf(stderr, "[REL_C7_ROUTE] profile=%s route=%s\n", profile, mode);
|
|
|
|
|
|
rel_logged = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
}
|