Phase 21-1-C: Ring cache Refill/Cascade + Metrics - SLL → Ring cascade
**実装内容**:
- Alloc miss → refill: ring_refill_from_sll() (32 blocks from TLS SLL)
- Free full → fallback: 既に Phase 21-1-B で実装済み(Ring full → TLS SLL)
- Metrics 追加: hit/miss/push/full/refill カウンタ(Phase 19-1 スタイル)
- Stats 出力: ring_cache_print_stats() を bench_random_mixed.c から呼び出し
**修正内容**:
- tiny_alloc_fast.inc.h: Ring miss 時に ring_refill_from_sll() 呼び出し、retry
- tiny_ring_cache.h: Metrics カウンタ追加(pop/push で更新)
- tiny_ring_cache.c: tls_sll_box.h をインクルード、refill カウンタ追加
- bench_random_mixed.c: ring_cache_print_stats() 呼び出し
**ENV 変数**:
- HAKMEM_TINY_HOT_RING_ENABLE=1: Ring 有効化
- HAKMEM_TINY_HOT_RING_CASCADE=1: Refill 有効化(SLL → Ring)
- HAKMEM_TINY_HOT_RING_C2=128: C2 サイズ(default: 128)
- HAKMEM_TINY_HOT_RING_C3=128: C3 サイズ(default: 128)
**動作確認**:
- Ring ON + CASCADE ON: 836K ops/s (10K iterations) ✅
- クラッシュなし、正常動作
**次のステップ**: Phase 21-1-D (A/B テスト)
This commit is contained in:
@ -616,7 +616,18 @@ static inline void* tiny_alloc_fast(size_t size) {
|
||||
// Ring hit - return USER pointer (BASE + 1)
|
||||
HAK_RET_ALLOC(class_idx, base);
|
||||
}
|
||||
// Ring miss - fall through to existing path (TLS SLL/UltraHot/HeapV2)
|
||||
|
||||
// Phase 21-1-C: Ring miss - try refill from TLS SLL (cascade)
|
||||
// ENV-gated: HAKMEM_TINY_HOT_RING_CASCADE=1
|
||||
if (ring_cascade_enabled()) {
|
||||
int refilled = ring_refill_from_sll(class_idx, 32); // Refill 32 blocks
|
||||
if (refilled > 0) {
|
||||
// Retry after refill
|
||||
base = ring_cache_pop(class_idx);
|
||||
if (base) HAK_RET_ALLOC(class_idx, base);
|
||||
}
|
||||
}
|
||||
// Still miss → fall through to existing path (TLS SLL/UltraHot/HeapV2)
|
||||
}
|
||||
|
||||
// Phase 14-C: TinyUltraHot Borrowing Design (正史から借りる設計)
|
||||
|
||||
Reference in New Issue
Block a user