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

21 KiB
Raw Blame History

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_popallocホットパス
      • bump_hitTLSバンプシャドウ命中
      • 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
  • scripts/run_tiny_benchfast_triad.sh — bench-only fast path triad
  • scripts/run_tiny_sllonly_triad.sh — SLL-only + warmup + PGO triad
  • scripts/run_tiny_sllonly_r12w192_triad.sh — SLL-only tuned32B: REFILL=12, WARMUP32=192
  • scripts/run_ultra_debug_sweep.sh
  • scripts/sweep_ultra_params.sh <bench_batch>
  • scripts/run_comprehensive_pair.sh
  • scripts/run_random_mixed_matrix.sh

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=(新)
    • クラス別に特化を有効化するビットマスク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 を併用してリングにルートを出力。