LMCache Async Loading
[!tldr] 업무 관점 takeaway Scheduler 단의 lookup과 Worker 단의 prefetch/retrieval을 분리해 GPU 연산과 NVMe read를 overlap시킨다. NVMe read 레이턴시가 빠를수록 overlap window가 짧아져 처리량 ↑ — 즉 FDP가 read p99를 안정화하면 그 효과가 단순 합산이 아니라 곱셈으로 처리량에 반영된다. 우리가 새 FDP Backend를 만들 땐
batched_async_contains인터페이스를 반드시 구현해야 이 기능을 살릴 수 있다.
핵심 컴포넌트 4가지
- LMCacheAsyncLookupServer: ZMQ로 요청을 받고 응답
- StorageManager: 백엔드들을 순서대로 조율하는 비동기 루프
- AsyncSerializer: WeightedSemaphore로 동시 청크 처리량 제한 (deadlock 방지)
- EventManager: 비동기 로딩 완료 이벤트 추적
ZMQ(ZeroMQ): 빠른 메시지 전송 라이브러리. Scheduler ↔ Worker 비동기 통신용.
원리
1. Scheduler가 토큰 청크 해시 + offset으로 lookup 요청
2. Worker 서버가 백엔드들을 순서대로 체크
batched_async_contains() ← 여러 청크를 한 번에 확인
3. 캐시 히트면 non-blocking get 즉시 실행
4. EventManager가 완료 추적 → MemoryObj 안전 전달
5. AsyncSerializer가 weighted semaphore로 동시 처리량 조절
Backend 우선순위 (가장 빠른 티어부터)
LocalCPUBackend ← 1티어
LocalDiskBackend ← 2티어 (NVMe) ← FDP 적용 대상
FSConnector ← 3티어 (원격)
[[LMCache-Local-Disk-Backend]]가 NVMe 티어의 실체.
우리에게 중요한 두 개념
① batched_async_contains — 멀티 파일 동시 read
여러 청크의 존재 여부를 한 번에 묶어서 확인 + 데이터 read. NVMe 입장에서는 QD(Queue Depth)가 급상승.
[!note] FDP/HC-SSD 관점
- 동시 read가 많을수록 [[NVMe-FDP|FDP RU]] 간 read interleave 발생
- HC-SSD(QLC)는 read 동시성 패널티가 더 큼 → 측정 필요
- 새 Backend가 이 인터페이스를 구현 안 하면 async loading 비활성 → 반드시 구현해야 함
② I/O-Compute Overlap
기존 (동기): [KV read 대기] → [GPU 연산] → [KV read 대기] → [GPU 연산]
async loading: [KV read] [KV read] [KV read]
↕ ↕ ↕ (overlap)
[GPU 연산] [GPU 연산] [GPU 연산]
→ NVMe read latency가 곧 overlap gap. FDP로 read p99 안정화 = overlap 효율 ↑.
한계
- 특정 vLLM PR(#23620) 머지 이후 버전에서만 동작
batched_async_contains구현된 백엔드만 지원: LocalCpuBackend, LocalDiskBackend, S3Connector, FSConnector, RedisConnector
Future Work (LMCache 자체 로드맵)
- 모든 백엔드가 async loading을 지원하도록 기본
batched_async_contains구현 추가 - 비동기 lookup 수 / 점유 MemoryObj 수 메트릭 추가 — 이게 [[단기-Task-목록|Task 1: L2 latency histogram]]과 연결
- vLLM prefix cache hit 정보를 lookup이 활용하도록 개선
FDP Backend 설계 체크리스트
-
batched_async_contains구현 (async loading 지원) - AdapterDescriptor에 latency_class / capacity_tier 메타데이터 (→ [[단기-Task-목록|Task 5: Device-aware policy]])
- FDP placement hint를 PUT 시 전달 (RUH ID)
- [[O_DIRECT]] alignment 준수
- [[io_uring]] / io_uring_cmd 경로로 NVMe 직결 검토
관련 페이지
- [[LMCache-Local-Disk-Backend]] — 이 레이어가 호출하는 백엔드
- [[LMCache-아키텍처]] — Async Offloading 컴포넌트의 전체 위치
- [[io_uring]] — 진짜 async I/O 후보
- [[NVMe-FDP]] — placement hint 대상
- [[단기-Task-목록]] — Task 1 (histogram), Task 5 (policy)가 이 페이지의 영역
- [[LMCache-동시성-비동기-기초]] — Future(진동벨)/eventfd(도어벨) 완료 알림 메커니즘