Files
hakmem/docs/design/MEM_EFFICIENCY_PLAN.md
Moe Charm (CI) 52386401b3 Debug Counters Implementation - Clean History
Major Features:
- Debug counter infrastructure for Refill Stage tracking
- Free Pipeline counters (ss_local, ss_remote, tls_sll)
- Diagnostic counters for early return analysis
- Unified larson.sh benchmark runner with profiles
- Phase 6-3 regression analysis documentation

Bug Fixes:
- Fix SuperSlab disabled by default (HAKMEM_TINY_USE_SUPERSLAB)
- Fix profile variable naming consistency
- Add .gitignore patterns for large files

Performance:
- Phase 6-3: 4.79 M ops/s (has OOM risk)
- With SuperSlab: 3.13 M ops/s (+19% improvement)

This is a clean repository without large log files.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 12:31:14 +09:00

3.2 KiB
Raw Blame History

Memory Efficiency Plan (Tiny focus)

Current observations (direct link, Tiny hotset)

  • RSS microbench (steady-state) via scripts/measure_rss_tiny.sh:
    • 64B, live=20k, iters=1000
      • HAKMEM (LD): peak≈3532 kB, end≈3532 kB
      • System : peak≈2972 kB, end≈2972 kB
    • 32B, live=30k, iters=1000
      • HAKMEM (LD): peak≈3532 kB, end≈3532 kB
      • System : peak≈3004 kB, end≈3004 kB
    • 16B, live=40k, iters=1000
      • HAKMEM (LD): peak≈3572 kB, end≈3572 kB
      • System : peak≈2928 kB, end≈2928 kB

Interpretation

  • TinyのキャッシュTLSマガジン/minimag/SLLの保持分だけ、Systemより~0.50.65MBほど高めのRSSになるケースがある。
  • ただし、保持分はフラッシュ/回収ポリシー次第で下げられる余地がある。

Planned steps (stage A: conservative, optin)

  1. Bench preset flush
    • 実装済: 環境変数 HAKMEM_TINY_FLUSH_ON_EXIT=1 で、プロセス終了時に全クラスのTLSマガジン/minimag/SLLをフラッシュし、続けて空スラブをトリムhak_tiny_trim
    • 目的: ベンチ終了時のRSS残量を低減測定容易に
    • 注意: 現行の scripts/measure_rss_tiny.sh はベンチ終了直前にRSSを出力するため、退出時フラッシュの効果は数値に反映されません。退出後に親側でRSSを採取する/usr/bin/time -v 等)か、ベンチ自身で flush+trim を呼んだ後にRSSを測るモードを後日追加予定。
  2. Idle flush hook安全側、オプション
    • 低頻度タイマまたは呼び出しN回毎に薄く走査して、高水位超過時に各TLSキャッシュを縮小capの逓減を強化
    • 初期はTiny専用、クラス単位でしきいを設ける。
  3. 空スラブ回収conservative
    • 既に空になったslabを検出して、free_slabsからdetach→release_slabへロック下
    • ミスコストを避けるため、検出頻度を抑え、capが低い時のみ有効化。

Planned steps (stage B: tuning) 4) MAG_CAPのautotune

  • スイープ結果から、16/32Bは小さめcap128/256が有利、64Bはやや大きめ512が有利。
  • グローバルcapではなく、クラス別下限capを導入tiny_effective_capのテーブル化
  1. SLL flushポリシーの導入
    • SLL長がcap/2を超えたら一部を即座にマガジンへ移し、フラッシュ時の回収を容易にする。

How to measure

  • Throughput: scripts/run_tiny_hot_sweep.shsize/batch/cycles
  • RSS (steady-state, during run): scripts/measure_rss_tiny.sh <live_count>
    • 64B, live=20k: bash scripts/measure_rss_tiny.sh 64 20000 1000
  • Max RSS (process-level): scripts/run_memory_efficiency.sh [cycles]
    • 直リンク tiny-hot を /usr/bin/time -v で包み、Maximum resident set size(kB) をCSV出力
    • HAKMEM_TINY_FLUSH_ON_EXIT=0/1 を切り替えて、退出時フラッシュの効果もA/B可能

Notes

  • LD_PRELOADの安定性はHarden中。RSS測定は直リンク/LDのどちらでも実施可能だが、LDではreallocの混在に注意現状は安全フォールバックで回避
  • 退出フラッシュを試すには: HAKMEM_TINY_FLUSH_ON_EXIT=1 ./bench_...