본문으로 건너뛰기

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() — 슬롯 없으면 RuntimeError
  • put_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 모드L2EvictionController1초마다 폴링, 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 기여 영역