Files
hakmem/docs/specs/ENV_VARS.md
Moe Charm (CI) a9ddb52ad4 ENV cleanup: Remove BG/HotMag vars & guard fprintf (Larson 52.3M ops/s)
Phase 1 完了:環境変数整理 + fprintf デバッグガード

ENV変数削除(BG/HotMag系):
- core/hakmem_tiny_init.inc: HotMag ENV 削除 (~131 lines)
- core/hakmem_tiny_bg_spill.c: BG spill ENV 削除
- core/tiny_refill.h: BG remote 固定値化
- core/hakmem_tiny_slow.inc: BG refs 削除

fprintf Debug Guards (#if !HAKMEM_BUILD_RELEASE):
- core/hakmem_shared_pool.c: Lock stats (~18 fprintf)
- core/page_arena.c: Init/Shutdown/Stats (~27 fprintf)
- core/hakmem.c: SIGSEGV init message

ドキュメント整理:
- 328 markdown files 削除(旧レポート・重複docs)

性能確認:
- Larson: 52.35M ops/s (前回52.8M、安定動作)
- ENV整理による機能影響なし
- Debug出力は一部残存(次phase で対応)

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 14:45:26 +09:00

328 lines
21 KiB
Markdown
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.

HAKMEM Environment Variables (Tiny focus)
Core toggles
- HAKMEM_WRAP_TINY=1
- Tiny allocatorを有効化直リンク
- HAKMEM_TINY_USE_SUPERSLAB=0/1
- SuperSlab経路のON/OFF既定ON
SFC (Super Front Cache) stats / A/B
- HAKMEM_SFC_ENABLE=0/1
- Box 5NEW: Super Front Cache を有効化既定OFF; A/B用
- HAKMEM_SFC_CAPACITY=16..256 / HAKMEM_SFC_REFILL_COUNT=8..256
- SFCの容量とリフィル個数例: 256/128
- HAKMEM_SFC_STATS_DUMP=1
- プロセス終了時に SFC 統計をstderrへダンプalloc_hits/misses, refill_calls など)。
- 使い方: make CFLAGS+=" -DHAKMEM_DEBUG_COUNTERS=1" larson_hakmem; HAKMEM_SFC_ENABLE=1 HAKMEM_SFC_STATS_DUMP=1 ./larson_hakmem …
Larson defaults (publish→mail→adopt)
- 忘れがちな必須変数をスクリプトで一括設定するため、`scripts/run_larson_defaults.sh` を用意しています。
- 既定で以下を export しますA/B は環境変数で上書き可能):
- `HAKMEM_TINY_USE_SUPERSLAB=1` / `HAKMEM_TINY_MUST_ADOPT=1` / `HAKMEM_TINY_SS_ADOPT=1`
- `HAKMEM_TINY_FAST_CAP=64`
- `HAKMEM_TINY_FAST_SPARE_PERIOD=8` ← fast-tier から Superslab へ戻して publish 起点を作る
- `HAKMEM_TINY_TLS_LIST=1`
- `HAKMEM_TINY_MAILBOX_SLOWDISC=1`
- `HAKMEM_TINY_MAILBOX_SLOWDISC_PERIOD=256`
Front Gate (A/B for boxified fast path)
- `HAKMEM_TINY_FRONT_GATE_BOX=1` — Use Front Gate Box implementation (SFC→SLL) for fast-path pop/push/cascade. Default 0. Safe to toggle during builds via `make EXTRA_CFLAGS+=" -DHAKMEM_TINY_FRONT_GATE_BOX=1"`.
- Debug visibility任意: `HAKMEM_TINY_RF_TRACE=1`
- Force-notify任意, デバッグ補助): `HAKMEM_TINY_RF_FORCE_NOTIFY=1`
- モード別tput/pfで Superslab サイズと cache/precharge も設定:
- tput: `HAKMEM_TINY_SS_FORCE_LG=21`, `HAKMEM_TINY_SS_CACHE=0`, `HAKMEM_TINY_SS_PRECHARGE=0`
- pf: `HAKMEM_TINY_SS_FORCE_LG=20`, `HAKMEM_TINY_SS_CACHE=4`, `HAKMEM_TINY_SS_PRECHARGE=1`
Ultra Tiny (SLL-only, experimental)
- HAKMEM_TINY_ULTRA=0/1
- Ultra TinyモードのON/OFFSLL中心の最小ホットパス
- HAKMEM_TINY_ULTRA_VALIDATE=0/1
- UltraのSLLヘッド検証安全性重視時に1、性能計測は0推奨
- HAKMEM_TINY_ULTRA_BATCH_C{0..7}=N
- クラス別リフィル・バッチ上書き(例: class=3(64B) → C3
- HAKMEM_TINY_ULTRA_SLL_CAP_C{0..7}=N
- クラス別SLL上限上書き
SuperSlab adopt/publish実験
- HAKMEM_TINY_SS_ADOPT=0/1
- SuperSlab の publish/adopt + remote drain + owner移譲を有効化既定OFF
- 4T Larson など cross-thread free が多いワークロードで再利用密度を高めるための実験用スイッチ。
- ON 時は一部の単体性能1Tが低下する可能性があるため A/B 前提で使用してください。
- 備考: 環境変数を未設定の場合でも、実行中に cross-thread free が検出されると自動で ON になるauto-on
- HAKMEM_TINY_SS_ADOPT_COOLDOWN=4
- adopt 再試行までのクールダウンスレッド毎。0=無効。
- HAKMEM_TINY_SS_ADOPT_BUDGET=8
- superslab_refill() 内で adopt を試行する最大回数0-32
- HAKMEM_TINY_SS_ADOPT_BUDGET_C{0..7}
- クラス別の adopt 予算個別上書き0-32。指定時は `HAKMEM_TINY_SS_ADOPT_BUDGET` より優先。
- HAKMEM_TINY_SS_REQTRACE=1
- 収穫ゲートguardや ENOMEM フォールバック、slab/SS 採用のリクエストトレースを標準エラーに出力(軽量)。
- HAKMEM_TINY_RF_FORCE_NOTIFY=0/1デバッグ補助
- remote queue がすでに非空old!=0でも、`slab_listed==0` の場合に publish を強制通知。
- 初回の空→非空通知を見逃した可能性をあぶり出す用途に有効A/B 推奨)。
Ready ListRefill最適化の箱
- 2025-12 cleanup: Ready系ENVは廃止。Ready ringは常時有効、幅/予算は固定width=TINY_READY_RING, budget=1
Background Remote Drain束ね箱・軽量ステップ
- 2025-12 cleanup: BG Remote系ENVHAKMEM_TINY_BG_REMOTE*は廃止。BGリモート/aggregatorは固定OFF。
Ready AggregatorBG, 非破壊peek
- 2025-12 cleanup: Ready Aggregator系ENVも廃止固定OFF
Registry 窓探索コストのA/B
- HAKMEM_TINY_REG_SCAN_MAX=N
- Registry の“小窓”で走査する最大エントリ数既定256
- 値を小さくすると superslab_refill() と mmap直前ゲートでの探索コストが減る一方、adopt 命中率が低下し OOM/新規mmap が増える可能性あり。
- TinyHotなど命中率が高い場合は 64/128 などをA/B推奨。
Mid 向け簡素化リフィル1281024B向けの分岐削減
- HAKMEM_TINY_MID_REFILL_SIMPLE=0/1
- クラス>=4128B以上で、sticky/hot/mailbox/registry/adopt の多段探索をスキップし、
1) 既存TLSのSuperSlabに未使用Slabがあれば直接初期化→bind、
2) なければ新規SuperSlabを確保して先頭Slabをbind、の順に簡素化します。
- 目的: superslab_refill() 内の分岐と走査を削減tput重視A/B用
- 注意: adopt機会が減るため、PFやメモリ効率は変動します。常用前にA/B必須。
Mid 向けリフィル・バッチSLL補強
- HAKMEM_TINY_REFILL_COUNT_MID=N
- クラス>=4128B以上の SLL リフィル時に carve する個数の上書き(既定: max_take または余力)。
- 例: 32/64/96 でA/B。SLLが枯渇しにくくなり、refill頻度が下がる可能性あり。
Alloc側 remote ヘッド読みの緩和A/B
- HAKMEM_TINY_ALLOC_REMOTE_RELAX=0/1
- hak_tiny_alloc_superslab() で `remote_heads[slab_idx]` 非ゼロチェックを relaxed 読みで実施(既定は acquire
- 所有権獲得→drain の順序は保持されるため安全。分岐率の低下・ロード圧の軽減を狙うA/B用。
Front命中率の底上げ採用境界でのスプライス
- HAKMEM_TINY_DRAIN_TO_SLL=N0=無効)
- 採用境界drain→owner→bind直後に、freelist から最大 N 個を TLS の SLL へ移すclass 全般)。
- 目的: 次回 tiny_alloc_fast_pop のミス率を低下させるcrossthread供給をFrontへ寄せる
- 境界厳守: 本スプライスは採用境界の中だけで実施。publish 側で drain/owner を触らない。
Front リフィル量A/B
- HAKMEM_TINY_REFILL_COUNT=N全クラス共通
- HAKMEM_TINY_REFILL_COUNT_HOT=Nclass<=3
- HAKMEM_TINY_REFILL_COUNT_MID=Nclass>=4
- HAKMEM_TINY_REFILL_COUNT_C{0..7}=Nクラス個別
- tiny_alloc_fast のリフィル数を制御既定16。大きくするとミス頻度が下がる一方、1回のリフィルコストは増える。
重要: publish/adopt の前提SuperSlab ON
- HAKMEM_TINY_USE_SUPERSLAB=1
- publish→mailbox→adopt のパイプラインは SuperSlab 経路が ON のときのみ動作します。
- ベンチでは既定ONを推奨A/BでOFFにしてメモリ効率重視の比較も可能
- OFF の場合、[Publish Pipeline]/[Publish Hits] は 0 のままとなります。
SuperSlab cache / prechargePhase 6.24+
- HAKMEM_TINY_SS_CACHE=N
- クラス共通の SuperSlab キャッシュ上限per-class の保持枚数。0=無制限、未指定=無効。
- キャッシュ有効時は `superslab_free()` が空の SuperSlab を即 munmap せず、キャッシュに積んで再利用する。
- HAKMEM_TINY_SS_CACHE_C{0..7}=N
- クラス別のキャッシュ上限(個別指定)。指定があるクラスは `HAKMEM_TINY_SS_CACHE` より優先。
- HAKMEM_TINY_SS_PRECHARGE=N
- Tiny クラスごとに N 枚の SuperSlab を事前確保し、キャッシュにプールする。0=無効。
- 事前確保した SuperSlab は `MAP_POPULATE` 相当で先読みされ、初回アクセス時の PF を抑制。
- 指定すると自動的にキャッシュも有効化されるprecharge 分を保持するため)。
- HAKMEM_TINY_SS_PRECHARGE_C{0..7}=N
- クラス別の precharge 枚数(個別上書き)。例: 8B クラスのみ 4 枚プリチャージ → `HAKMEM_TINY_SS_PRECHARGE_C0=4`
- HAKMEM_TINY_SS_POPULATE_ONCE=1
- 次回 `mmap` で取得する SuperSlab を 1 回だけ `MAP_POPULATE` で fault-inA/B 用のワンショットプリタッチ)。
Harvest / Guardmmap前の収穫ゲート
- HAKMEM_TINY_GUARD=0/1
- 新規 mmap 直前に trim/adopt を優先して実施するゲートを有効化既定ON
- HAKMEM_TINY_SS_CAP=N
- Tiny 各クラスにおける SuperSlab 上限0=無制限)。
- HAKMEM_TINY_SS_CAP_C{0..7}=N
- クラス別上限の個別指定0=無制限)。
- HAKMEM_TINY_GLOBAL_WATERMARK_MB=MB
- 総確保バイト数がしきい値MBを超えた場合にハーベストを強制0=無効)。
Countersダンプ
- HAKMEM_TINY_COUNTERS_DUMP=1
- 拡張カウンタを標準エラーにダンプ(クラス別)。
- SS adopt/publish に加えて、Slab adopt/publish/requeue/miss を出力。
- [Publish Pipeline]: notify_calls / same_empty_pubs / remote_transitions / mailbox_reg_calls / mailbox_slow_disc
- [Free Pipeline]: ss_local / ss_remote / tls_sll / magazine
Safety (free の検証)
- HAKMEM_SAFE_FREE=1
- free 境界で追加の検証を有効化SuperSlab 範囲・クラス不一致・危険な二重 free の検出)。
- デバッグ時の既定推奨。perf 計測時は 0 を推奨。
- HAKMEM_SAFE_FREE_STRICT=1
- 無効 freeクラス不一致/未割当/二重freeが検出されたら FailFastリング出力→SIGUSR2
- 既定は 0ログのみ
Frontend (mimalloc-inspired, experimental)
- HAKMEM_TINY_FRONTEND=0/1
- フロントエンドFastCacheを有効化ホットパス最小化、miss時のみバックエンド
- HAKMEM_INT_ENGINE=0/1
- 遅延インテリジェンスイベント収集BG適応を有効化
- HAKMEM_INT_ADAPT_REFILL=0/1
- INTで refill 上限(`HAKMEM_TINY_REFILL_MAX(_HOT)`をウィンドウ毎に±16で調整既定ON
- HAKMEM_INT_ADAPT_CAPS=0/1
- INTでクラス別 MAG/SLL 上限を軽く調整±16/±32。熱いクラスは上限を少し広げ、低頻度なら縮小既定ON
- HAKMEM_INT_EVENT_TS=0/1
- イベントにtimestamp(ns)を含める既定OFF。OFFならclock_gettimeコールを避けるホットパス軽量化
- HAKMEM_INT_SAMPLE=N
- イベントを 1/2^N の確率でサンプリング(既定: N未設定=全記録)。例: N=5 → 1/32。INTが有効なときのホットパス負荷を制御
- HAKMEM_TINY_FASTCACHE=0/1
- 低レベルFastCacheスイッチ通常は不要。A/B実験用
- HAKMEM_TINY_QUICK=0/1
- TinyQuickSlot64B/クラスの超小スタック)を最前段に有効化。
- 仕様: items[6] + top を1ラインに集約。ヒット時は1ラインアクセスのみで返却。
- miss時: SLL→Quick or Magazine→Quick の順に少量補充してから返却(既存構造を保持)。
- 推奨: 小サイズ≤256BA/B用。安定後に既定ONを検討。
FLINT naming別名・概念用
- FLINT = FRONTHAKMEM_TINY_FRONTEND + INTHAKMEM_INT_ENGINE
- 一括ONの別名環境変数実装は今後の予定:
- HAKMEM_FLINT=1 → FRONT+INTを有効化予定
- HAKMEM_FLINT_FRONT=1 → FRONTのみ= HAKMEM_TINY_FRONTEND
- HAKMEM_FLINT_BG=1 → INTのみ= HAKMEM_INT_ENGINE
Other useful
New (debug isolation)
- HAKMEM_TINY_DISABLE_READY=0/1
- Ready/Mailboxのコンシューマ経路を完全停止既定0=ON。TSan/ASanの隔離実験でSS+freelistのみを通す用途。
- HAKMEM_DEBUG_SEGV=0/1
- 早期SIGSEGVハンドラを登録し、stderrへバックトレースを1回だけ出力環境により未出力のことあり
- HAKMEM_FORCE_LIBC_ALLOC_INIT=0/1
- プロセス起動hak_init()完了までの期間だけ、malloc/free を libc へ強制ルーティング(初期化中の dlsym→malloc 再帰や
TLS 未初期化アクセスを回避。init 完了後は自動で通常経路に戻るenv が設定されていても、init 後は無効化される動作)。
- HAKMEM_TINY_MAG_CAP=N
- TLSマガジンの上限通常パスのチューニングに使用
- HAKMEM_TINY_MAG_CAP_C{0..7}=N
- クラス別のTLSマガジン上限通常パス。指定時はクラスごとの既定値を上書き例: 64B=class3 に 512 を指定)
- HAKMEM_TINY_TLS_SLL=0/1
- 通常パスのSLLをON/OFF
- HAKMEM_SLL_MULTIPLIER=N
- 小サイズクラス(0..3, 8/16/32/64B)のSLL上限を MAG_CAP×N まで拡張上限TINY_TLS_MAG_CAP。既定2。1..16の間で調整
- HAKMEM_TINY_SLL_CAP_C{0..7}=N
- 通常パスのクラス別SLL上限絶対値。指定時は倍率計算をバイパス
- HAKMEM_TINY_REFILL_MAX=N
- マガジン低水位時の一括補充上限既定64。大きくすると補充回数が減るが瞬間メモリ圧は増える
- HAKMEM_TINY_REFILL_MAX_HOT=N
- 8/16/32/64Bクラスclass<=3向けの上位上限既定192。小サイズ帯のピーク探索用
- HAKMEM_TINY_REFILL_MAX_C{0..7}=N
- クラス別の補充上限個別上書き。設定があるクラスのみ有効0=未設定)
- HAKMEM_TINY_REFILL_MAX_HOT_C{0..7}=N
- ホットクラス0..3)用の個別上書き。設定がある場合は `REFILL_MAX_HOT` より優先
- (削除済み) HAKMEM_TINY_BG_REMOTE*
- 2025-12 cleanup: BG Remote系ENVは廃止BGリモートは固定OFF
- HAKMEM_TINY_PREFETCH=0/1
- SLLポップ時にhead/nextの軽量プリフェッチを有効化微調整用、既定OFF
- HAKMEM_TINY_REFILL_COUNT=NULTRA_SIMPLE用
- ULTRA_SIMPLE の SLL リフィル個数(既定 32、8256
- HAKMEM_TINY_FLUSH_ON_EXIT=0/1
- 退出時にTinyマガジンをフラッシュトリムRSS計測用
- HAKMEM_TINY_RSS_BUDGET_KB=N
- INTエンジン起動時にTinyのRSS予算kBを設定。超過時にクラス別のMAG/SLL上限を段階的に縮小メモリ優先
- HAKMEM_TINY_INT_TIGHT=0/1
- INTの調整を縮小側にバイアス閾値を上げ、MAG/SLLの最小値を床に近づける
- HAKMEM_TINY_DIET_STEP=N新, 既定16
- 予算超過時の一回あたり縮小量MAG: step, SLL: step×2
- HAKMEM_TINY_CAP_FLOOR_C{0..7}=N
- クラス別MAGの下限例: C0=64, C3=128。INTの縮小時にこれ未満まで下げない。
- HAKMEM_DEBUG_COUNTERS=0/1
- パス/Ultraのデバッグカウンタをビルドに含める既定0=除去。ONで `HAKMEM_TINY_PATH_DEBUG=1` 時に atexit ダンプ。
- HAKMEM_ENABLE_STATS
- 定義時のみホットパスで `stats_record_alloc/free` を実行。未定義時は完全に呼ばれない(ベンチ最小化)。
- HAKMEM_TINY_TRACE_RING=1
- Tiny Debug Ring を有効化。`SIGUSR2` またはクラッシュ時に直近4096件の alloc/free/publish/remote イベントを stderr ダンプ。
- HAKMEM_TINY_DEBUG_FAST0=1
- fast-tier/hot/TLS リストを強制バイパスし Slow/SS 経路のみで動作させるデバッグモードFrontGate の境界切り分け用)。
- HAKMEM_TINY_DEBUG_REMOTE_GUARD=1
- SuperSlab remote queue への push 前後でポインタ境界を検証。異常時は Debug Ring に `remote_invalid` を記録して Fail-Fast。
- HAKMEM_TINY_STAT_SAMPLINGビルド定義, 任意)/ HAKMEM_TINY_STAT_RATE_LG環境, 任意)
- 統計が有効な場合でも、alloc側の統計更新を低頻度化例: RATE_LG=14 → 16384回に1回
- 既定はOFFサンプリング無し毎回更新。ベンチ用にONで命令数を削減可能。
- HAKMEM_TINY_HOTMAG=0/1
- 小クラス用の小型TLSマガジン128要素, classes 0..3を有効化。既定0A/B用
- alloc: HotMag→SLL→Magazine の順でヒットを狙う。free: SLL優先、溢れ時にHotMag→Magazine。
USDT/tracepointsperfのユーザ空間静的トレース
- ビルド時に `CFLAGS+=-DHAKMEM_USDT=1` を付与すると、主要分岐にUSDTDTrace互換プローブが埋め込まれます。
- 依存: `<sys/sdt.h>`Debian/Ubuntu: `sudo apt-get install systemtap-sdt-dev`)。
- プローブ名provider=hakmem例:
- `sll_pop`, `mag_pop`, `front_pop`allocホットパス
- `bump_hit`TLSバンプシャドウ命中
- `slow_alloc`(スローパス突入)
- 使い方(例):
- 一覧: `perf list 'sdt:hakmem:*'`
- 集計: `perf stat -e sdt:hakmem:front_pop,cycles ./bench_tiny_hot_hakmem 32 100 40000`
- 記録: `perf record -e sdt:hakmem:sll_pop -e sdt:hakmem:mag_pop ./bench_tiny_hot_hakmem 32 100 50000`
- 権限/環境の注意:
- `unknown tracepoint` → perfがUSDTsdt:)非対応、または古いツール。`sudo apt-get install linux-tools-$(uname -r)` を推奨。
- `can't access trace events` → tracefs権限不足。
- `sudo mount -t tracefs -o mode=755 nodev /sys/kernel/tracing`
- `sudo sysctl kernel.perf_event_paranoid=1`
- WSLなど一部カーネルでは UPROBE/USDT が無効な場合がありますPMUのみにフォールバック
ビルドプリセットTinyHot最短フロント
- コンパイル時フラグ: `-DHAKMEM_TINY_MINIMAL_FRONT=1`
- 入口から UltraFront/Quick/Frontend/HotMag/SuperSlab try/BumpShadow を物理的に除去
- 残る経路: `SLL → TLS Magazine → SuperSlab →(以降のスローパス)`
- Makefileターゲット: `make bench_tiny_front`
- ベンチと相性の悪い分岐を取り除き、命令列を短縮PGOと併用推奨
- 付与フラグ: `-DHAKMEM_TINY_MAG_OWNER=0`マガジン項目のowner書き込みを省略し、alloc/freeの書込み負荷を削減
- 実行時スイッチ軽量A/B: `HAKMEM_TINY_MINIMAL_HOT=1`
- 入口で SuperSlab TLSバンプ→SuperSlab直経路を優先ビルド除去ではなく分岐
- TinyHotでは概ね不利命令・分岐増なため、既定OFF。ベンチA/B用途のみ。
Scripts
- scripts/run_tiny_hot_triad.sh <cycles>
- scripts/run_tiny_benchfast_triad.sh <cycles> — bench-only fast path triad
- scripts/run_tiny_sllonly_triad.sh <cycles> — SLL-only + warmup + PGO triad
- scripts/run_tiny_sllonly_r12w192_triad.sh <cycles> — SLL-only tuned32B: REFILL=12, WARMUP32=192
- scripts/run_ultra_debug_sweep.sh <cycles> <batch>
- scripts/sweep_ultra_params.sh <cycles> <bench_batch>
- scripts/run_comprehensive_pair.sh
- scripts/run_random_mixed_matrix.sh <cycles>
Bench-only build flags (compile-time)
- HAKMEM_TINY_BENCH_FASTPATH=1 — 入口を SLL→Mag→tiny refill に固定(最短パス)
- HAKMEM_TINY_BENCH_SLL_ONLY=1 — Mag を物理的に除去SLL-only、freeもSLLに直push
- HAKMEM_TINY_BENCH_TINY_CLASSES=3 — 対象クラス0..N, 3→≤64B
- HAKMEM_TINY_BENCH_WARMUP8/16/32/64 — 初回ウォームアップ個数(例: 32=160〜192
- HAKMEM_TINY_BENCH_REFILL/REFILL8/16/32/64 — リフィル個数(例: REFILL32=12
Makefile helpers
- bench_fastpath / pgo-benchfast-* — bench_fastpathのPGO
- bench_sll_only / pgo-benchsll-* — SLL-onlyのPGO
- pgo-benchsll-r12w192-* — 32Bに合わせたREFILL/WARMUPのPGO
PerfMain presetメインライン向け、安全寄り, optin
- 推奨環境変数(例):
- `HAKMEM_TINY_TLS_SLL=1`
- `HAKMEM_TINY_REFILL_MAX=96`
- `HAKMEM_TINY_REFILL_MAX_HOT=192`
- `HAKMEM_TINY_SPILL_HYST=16`
- 実行例:
- TinyHot triad: `HAKMEM_TINY_TLS_SLL=1 HAKMEM_TINY_REFILL_MAX=96 HAKMEM_TINY_REFILL_MAX_HOT=192 HAKMEM_TINY_SPILL_HYST=16 bash scripts/run_tiny_hot_triad.sh 60000`
- RandomMixed: `HAKMEM_TINY_TLS_SLL=1 HAKMEM_TINY_REFILL_MAX=96 HAKMEM_TINY_REFILL_MAX_HOT=192 HAKMEM_TINY_SPILL_HYST=16 bash scripts/run_random_mixed_matrix.sh 100000`
LD safety (for apps/LD_PRELOAD runs)
- HAKMEM_LD_SAFE=0/1/2
- 0: full (開発用のみ推奨)
- 1: Tinyのみ非Tinyはlibcへ委譲
- 2: パススルー(推奨デフォルト)
- HAKMEM_TINY_SPECIALIZE_8_16=0/1
- 8/16B向けに“mag-popのみ”の特化経路を有効化既定OFF。A/B用。
- HAKMEM_TINY_SPECIALIZE_32_64=0/1
- 32/64B向けに“mag-popのみ”の特化経路を有効化既定OFF。A/B用。
- HAKMEM_TINY_SPECIALIZE_MASK=<int>(新)
- クラス別に特化を有効化するビットマスクbit0=8B, bit1=16B, …, bit7=64B
- 例: 0x02 → 16Bのみ特化、0x0C → 32/64B特化。
- HAKMEM_TINY_BENCH_MODE=1
- ベンチ専用の簡素化採用パスを有効化。per-class 単一点の公開スロットを使用し、superslab_refill のスキャンと多段リング走査を回避。
- OOMガードharvest/trimは保持。A/B用途に限定してください。
Runner build knobsscripts/run_larson_claude.sh
- HAKMEM_BUILD_3LAYER=1
- `make larson_hakmem_3layer` を用いて 3-layer Tiny をビルドして実行LTO=OFF/O1
- HAKMEM_BUILD_ROUTE=1
- `make larson_hakmem_route` を用いて 3-layer + Route 指紋ビルド時ONでビルドして実行。
- 実行時は `HAKMEM_TINY_TRACE_RING=1 HAKMEM_ROUTE=1` を併用してリングにルートを出力。