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

49 lines
3.2 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.

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のテーブル化
5) 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 <size> <live_count> <iters>
-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_...`