MP 모드 vs In-process 모드
변경 검증 가이드 (다음 fetch 후):
git log eaa2bfee..HEAD -- docs/source/mp/ docs/source/developer_guide/extending_lmcache/ docs/source/getting_started/quickstart.rstgit log eaa2bfee..HEAD -- lmcache/v1/storage_backend/plugins/rust_raw_block_backend.py lmcache/v1/distributed/l2_adapters/raw_block_l2_adapter.py위에 커밋이 잡히면 (1) 권장 모드 / standalone service 정의가 바뀌었는지, (2) StoragePluginInterface ↔ L2AdapterInterface 구분이 흐려졌거나 한쪽으로 통합됐는지 확인. 후자면 "인터페이스 차이" 표 + "FDP/HC-SSD 작업 시 권장 경로" 섹션 다시 써야 함.
두 모드의 정의
| 모드 | 구성 | LMCache 위치 |
|---|---|---|
| In-process (legacy) | LMCache 가 vLLM 프로세스 안에 임베드 | vLLM 프로세스 내부 |
| MP (multiprocess) | LMCache 가 별도 독립 서비스, vLLM 이 ZMQ 로 접속 | 분리된 프로세스/컨테이너 |
근거: docs/source/mp/index.rst:1-7
LMCache multiprocess (MP) mode runs LMCache as a standalone service that vLLM instances connect to over ZMQ.
"vLLM 임베드" 의 정확한 의미
raw_block_line.md:33 의 "In-process 모드 (legacy, vLLM 임베드)" 는
❌ "vLLM 은 항상 임베드 방식이다" ✅ "legacy In-process 모드일 때의 형태가 vLLM 프로세스 안에 LMCache 를 임베드해서 쓰는 방식"
vLLM 자체는 두 모드 모두 지원함. legacy 인지 MP 인지에 따라 LMCache 가 vLLM 과 같은 프로세스에 들어가느냐 / 별도로 도느냐가 갈림.
인터페이스 차이
| 모드 | 사용하는 인터페이스 | 클래스 |
|---|---|---|
| In-process | StoragePluginInterface | RustRawBlockBackend |
| MP | L2AdapterInterface | RawBlockL2Adapter |
근거: docs/source/developer_guide/extending_lmcache/storage_plugins.rst:60-62
The storage plugin system described above applies to non-MP mode (single-process). For MP mode (multiprocess), LMCache provides the
pluginL2 adapter type ...
비동기 메커니즘 차이
자세히는 async_mechanism.md 참고.
| 항목 | non-MP | MP |
|---|---|---|
| 비동기 알림 | asyncio Future (진동벨) | eventfd (커널 도어벨) |
| 신호가 프로세스 경계 넘는가? | ❌ | ✅ |
| asyncio loop | 외부(vLLM)에서 주입받음 | 사용 안 함 |
FDP/HC-SSD 작업 시 권장 경로
MP 모드 → L2AdapterInterface 구현 → plugin 어댑터 타입으로 등록
이유:
- MP 가 권장 모드 (docs/source/getting_started/quickstart.rst:23, docs/source/mp/index.rst:43-44)
- LMCache 코어 수정 없이 plugin 으로 배포 가능
- FDP 같은 새 기능을 자유롭게 실험 가능