Enable C7 ULTRA segment path by default

This commit is contained in:
Moe Charm (CI)
2025-12-10 22:25:24 +09:00
parent bbb55b018a
commit 9460785bd6
3 changed files with 28 additions and 7 deletions

View File

@ -239,9 +239,8 @@ Do / Dont壊れやすいパターンの禁止
- 標準プロファイルMIXED_TINYV3_C7_SAFE / C6_HEAVY_LEGACY_POOLV1は C6 を mid/pool の通常クラスとして扱う。C6_HOT や smallheap(v3/v4)/ULTRA はすべて研究用の opt-in に限定。
- C6 を触るときは ENV_PROFILE_PRESETS.md の研究プリセットC6_SMALL_HEAP_V3_EXPERIMENT / C6_SMALL_HEAP_V4_EXPERIMENT など)から開始し、標準プリセットに混ぜ込まないこと。
- C7 ULTRA は研究箱ENV で必ず ON/OFF
- `HAKMEM_TINY_C7_ULTRA_ENABLED` で明示 opt-in。デフォルト OFF
- UF-3 以降は 2MiB セグメント64KiB ページ, mask 判定)上で carve/push。セグメント外の ptr は必ず既存 v3 free にフォールバックすること。
- C7 ULTRA は UF-3 セグメント版が標準ENV で OFF に戻せる
- `HAKMEM_TINY_C7_ULTRA_ENABLED` デフォルト ON。2MiB セグメント64KiB ページ, mask 判定)上で carve/push。セグメント外の ptr は必ず既存 v3 free にフォールバックする
- ON/OFF の前後で必ず健康診断ランを 1 回ずつ取り、差分が出たらまず ULTRA 側を疑う。
- 一般ルール(壊れたらまず健康診断ラン)

View File

@ -1,6 +1,6 @@
## HAKMEM 状況メモ (2025-12-10 更新 / Mixed 基準ライン再固定)
### Phase BASELINE-LOCK: Mixed 161024B 現行ベースラインC7-only v3 / front v3+LUT+fast classify v3
### Phase BASELINE-LOCK: Mixed 161024B 現行ベースラインC7-only v3 / front v3+LUT+fast classify v3 / C7 ULTRA ON
- ベンチ: `./bench_random_mixed_hakmem 1000000 400 1`1 thread, ws=400, iters=1M, seed=1
- ENVプリセット `HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE` で自動注入されるものを前提):
- `HAKMEM_TINY_HEAP_PROFILE=C7_SAFE`
@ -12,13 +12,14 @@
- `HAKMEM_SMALL_SEGMENT_V4_ENABLED=0`
- `HAKMEM_POOL_V2_ENABLED=0`
- `HAKMEM_TINY_FRONT_V3_ENABLED=1` / `HAKMEM_TINY_FRONT_V3_LUT_ENABLED=1`
- `HAKMEM_TINY_C7_ULTRA_ENABLED` デフォルト ONUF-3 セグメント版)
- サイズ範囲: `HAKMEM_BENCH_MIN_SIZE=16 HAKMEM_BENCH_MAX_SIZE=1024`
- 結果(現 HEAD, Release, 同一マシンで 2 回計測):
- v3 本命構成(上記): **33.733.9M ops/s**
- v3 本命構成(ULTRA ON: **44.144.6M ops/s**
- v4 強制C7+C6 v4 + fast classify v4, v3 OFF, segment OFF: **32.032.5M ops/s**
- C7-only v4C6 v1, v3 OFF, fast classify v4 ON: **≈33.0M ops/s**
- 決定: Mixed の本命構成は引き続き **C7-only v3**。v4 系は研究箱のまま OFF。健康診断の目安は `3334M ops/s / segvなし`
- 備考: このセクション以降の古い数値44M など)は過去フェーズの記録であり、現 HEAD とは一致しない。A/B は必ずこの Phase BASELINE-LOCK を基準に実施する。
- 決定: Mixed の本命構成は **C7-only v3 + C7 ULTRA (UF-3セグメント)**。v4 系は研究箱のまま OFF。健康診断の目安は `44±1M ops/s / segvなし`
- 備考: 古い 3334M レンジの記録は ULTRA OFF 時の値。A/B はこのセクションの値を新基準として使用する。
### Phase UF-0〜UF-2: C7 ULTRA Fast Path段階的に箱化中
- UF-0: `docs/analysis/TINY_C7_ULTRA_DESIGN.md` に設計をまとめ、ULTRA は C7 専用セグメントを使う別箱Hot: TinyC7UltraBox, Cold: C7UltraSegmentBoxと定義。UF-1 ではまだページ供給を持たず v3 に委譲する stub で進める方針を確定。

View File

@ -12,6 +12,7 @@ typedef struct TinyFrontV3Snapshot {
uint8_t header_mode; // tiny_header_mode() の値をキャッシュ
bool header_v3_enabled; // ENV: HAKMEM_TINY_HEADER_V3_ENABLED
bool header_v3_skip_c7; // ENV: HAKMEM_TINY_HEADER_V3_SKIP_C7
bool c7_ultra_enabled; // ENV: HAKMEM_TINY_C7_ULTRA_ENABLED
} TinyFrontV3Snapshot;
// Size→class/route entry for Tiny front v3 LUT (route_kind は tiny_route_kind_t を想定)
@ -117,6 +118,20 @@ static inline bool tiny_header_v3_skip_c7(void) {
return g != 0;
}
// C7 ULTRA stub gate (default OFF)
static inline bool tiny_c7_ultra_enabled_env(void) {
static int g = -1;
if (__builtin_expect(g == -1, 0)) {
const char* e = getenv("HAKMEM_TINY_C7_ULTRA_ENABLED");
if (e && *e) {
g = (*e != '0') ? 1 : 0;
} else {
g = 1; // default ON (UF-3 セグメント版を標準ホットパスとして扱う)
}
}
return g != 0;
}
// Snapshot initializer (implemented in hakmem_tiny.c)
void tiny_front_v3_snapshot_init(void);
@ -131,3 +146,9 @@ static inline const TinyFrontV3Snapshot* tiny_front_v3_snapshot_get(void) {
}
return &g_tiny_front_v3_snapshot;
}
// Cached getter for C7 ULTRA gate (snapshot 経由で ENV を 1 回だけ読む)
static inline bool tiny_front_v3_c7_ultra_enabled(void) {
const TinyFrontV3Snapshot* snap = tiny_front_v3_snapshot_get();
return snap->c7_ultra_enabled;
}