49 lines
3.2 KiB
Markdown
49 lines
3.2 KiB
Markdown
|
|
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マガジン/mini‑mag/SLL)の保持分だけ、Systemより~0.5–0.65MBほど高めのRSSになるケースがある。
|
|||
|
|
- ただし、保持分はフラッシュ/回収ポリシー次第で下げられる余地がある。
|
|||
|
|
|
|||
|
|
Planned steps (stage A: conservative, opt‑in)
|
|||
|
|
1) Bench preset flush
|
|||
|
|
- 実装済: 環境変数 HAKMEM_TINY_FLUSH_ON_EXIT=1 で、プロセス終了時に全クラスのTLSマガジン/mini‑mag/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のauto‑tune
|
|||
|
|
- スイープ結果から、16/32Bは小さめcap(128/256)が有利、64Bはやや大きめ(512)が有利。
|
|||
|
|
- グローバルcapではなく、クラス別下限capを導入(tiny_effective_capのテーブル化)。
|
|||
|
|
5) SLL flushポリシーの導入
|
|||
|
|
- SLL長がcap/2を超えたら一部を即座にマガジンへ移し、フラッシュ時の回収を容易にする。
|
|||
|
|
|
|||
|
|
How to measure
|
|||
|
|
- Throughput: scripts/run_tiny_hot_sweep.sh(size/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_...`。
|