Issue #3394 — non-MP raw-block eviction 복구
[!tldr] 업무 관점 takeaway #3119 MP 리팩터링으로 사라진 non-MP raw-block 자체 eviction을 daegyu94가 복구 예정. 현재 non-MP에서 슬롯이 꽉 차면 새 데이터를 조용히 드롭. S2(checkpoint overflow)와 직교 — #3394가 머지돼도 MP 대형 디바이스(3.84TB+) S2는 별도 fix 필요. 후속 PR 아직 없음, 모니터링 중.
기본 정보
| 항목 | 내용 |
|---|---|
| 이슈 번호 | #3394 |
| 종류 | Issue (PR 아님) |
| 제목 | "Question: was non-MP raw-block eviction intentionally removed?" |
| 작성자 | daegyu94 |
| 날짜 | 2026-05-26 |
| 상태 | Open (후속 PR 없음) |
배경 — 무엇이 사라졌나
commit 31b5535a (DongDongJu #3119 MP 리팩터링) 이전:
RustRawBlockBackend에_evict_one()메서드 존재- 슬롯이 꽉 차면 FIFO 순으로 피해자 선택 → 해제 후 재시도
이후 (현재):
RawBlockCore._allocate_slot_locked()— 슬롯 없으면RuntimeErrorput_many에서logger.warning + continue→ 새 데이터 조용히 드롭- 테스트
test_rust_raw_block_backend_rejects_when_full이 통과 = "꽉 차면 거부"가 expected behavior로 코드화
# core.py:1001-1010
def _allocate_slot_locked(self) -> int:
if self._free_slots:
return self._slot_to_offset(self._free_slots.pop())
if self._next_slot < self._max_slots:
...
raise RuntimeError("No free slots available") # ← eviction 없음
이슈 대화 (전문)
daegyu94 (2026-05-26): @DongDongJu Could you take a look when you have time?
DongDongJu (2026-05-26): Hello @daegyu94, It was my fault. It is regression from my previous work changing cache eviction algorithm from backend to global one. If you dont mind, Could you revive in in-process mode side?
daegyu94 (2026-05-27): I'll revive it on the in-process mode side.
모드별 eviction 현황
| 모드 | L2 raw block eviction | 비고 |
|---|---|---|
| MP 모드 | ✅ L2EvictionController | 1초마다 폴링, trigger_watermark=0.8 |
| Non-MP 모드 | ❌ 없음 (regression) | #3394로 복구 예정 |
**L1(CPU 메모리)**은 non-MP에서도 LRU 있음 (LRUCachePolicy, local_cpu_backend.py). 단, L1 evict → 데이터가 L2로 내려가므로 L2 디바이스가 더 빨리 찬다.
제안된 구현 방향
daegyu94가 이슈에서 제안:
cache_policy/*프레임워크 (LocalCPUBackend/LocalDiskBackend패턴) 재사용
구현 예상 경로:
lmcache/v1/storage_backend/cache_policy/lru.py— 기존LRUCachePolicy재사용core.py:_allocate_slot_locked()실패 시_evict_one_locked()호출- non-MP/MP 분기 처리 필요 (MP에서는 SM이 eviction 관장 → core 내부 eviction 비활성화)
S2(checkpoint overflow)와의 관계
#3394 머지 → non-MP에서 디바이스가 100% 차는 시나리오 감소
그러나 S2는 여전히 별도 fix 필요:
- Non-MP: eviction이 생겨도 eviction 직전(고점)에 checkpoint가 발생하면 S2 트리거 가능
- MP 모드:
trigger_watermark=0.8에서 eviction 발동, 3.84TB+(Qwen3-480B TP=8 기준) 디바이스는 80% 시점에 이미 321K 엔트리 초과 → S2 발생 가능
S2 fix(단계 1: meta_total_bytes 128MB → 512MB)는 #3394와 직교, 병렬 진행 가능.
현재 상태 및 모니터링 포인트
- 후속 PR 아직 없음 (daegyu94 구현 예고만)
- PR 올라오면: 우리 S2 fix와 충돌 여부 확인 + 리뷰 참여 기회
- S1(non-MP eviction) 착수 금지 — daegyu94가 선점
관련 페이지
- [[raw_block-개선-Task]] — S1 착수 금지 맥락
- [[raw_block-LRU-eviction-PR]] — daegyu94가 이 이슈를 실제 구현한 PR (Python LRU 트래커 + evict 재시도)
- [[S2-checkpoint-overflow]] — eviction과 S2의 관계
- [[Samsung-LMCache-팀]] — daegyu94 기여 영역