본문으로 건너뛰기

Task 제안 v1 — 원래 구상한 5-task 로드맵

작성: 2026-05-21 / 성격: 단기→중기→장기 연결형 (관측·정책 레이어 중심) 상태: 보류 (FDP 항목은 한대규가 진행 중이라 제외 검토됨)

L2 스토리지 tier의 관측성과 정책 primitive를 강화하는 5개 업스트림 기여 task. 모두 Samsung NVMe FDP/HC-SSD 포지셔닝에 도움이 되면서 upstream 수용 가능한 범위로 선정.

#Task추정의존성
1L2 staged latency histogram subscriber3주
2lmcache storage describe CLI 명령2.5주
3fs_connector O_DIRECT 메타데이터 경로 지원2.5주
4L2 adapter 레이턴시/용량 health check5주Task 1
5Device-aware prefetch/store policy7주Task 1

연결 구도

Task 1 (레이턴시 텔레메트리 생산)
├──> Task 4 (health check — 레이턴시 소비)
└──> Task 5 (device-aware policy — 레이턴시 소비)

Task 2, 3 (독립, Task 1과 병렬 가능)

Task 1이 단계별 타이밍 데이터를 만들고 → Task 4·5가 그걸 소비. Task 4·5는 Task 1 없이는 설계 불가.

Task 1 상세 — L2 staged latency histogram

목표: L2 store/load 경로의 단계별 레이턴시 히스토그램 추가 → Task 4·5에 데이터 공급.

실현가능성 (2026-05-18 검증):

  • EventBus + subscriber 인프라 완비 (lmcache/v1/mp_observability/)
  • L2_STORE_SUBMITTED/COMPLETED, L2_LOAD_TASK_SUBMITTED/COMPLETED 이벤트 타입 이미 정의 (event.py)
  • l2_throughput.py 가 거의 복붙 가능한 템플릿 (pending dict + correlation key + OTel histogram)
  • 테스트 패턴: tests/v1/mp_observability/subscribers/metrics/test_l2_throughput.py

설계 결정 — stage model: 원래 4단계 균일안(queue_wait/adapter_internal/disk_io/completion)은 어댑터마다 안 맞음:

  • raw_block (ThreadPool+io_uring): 4단계 깔끔히 분리됨
  • fs (asyncio): 2-3단계만 의미 있음
  • dax (memcpy): 단계 없음 (너무 짧음)
  • s3 (HTTP): "disk_io" 라벨이 틀림 (네트워크임)

채택 모델 (adapter-aware 2+N):

  • 공통 (전 어댑터): *_DISPATCHED 이벤트 1개 추가로 2단계
    • SUBMITTED → DISPATCHED = queue_wait_ms
    • DISPATCHED → COMPLETED = processing_ms
  • raw_block 전용: *_IO_SUBMITTED/COMPLETED 추가 → 실제 disk-I/O 레이턴시

PR 분할:

PR범위규모추정
#1*_DISPATCHED 이벤트 + 각 어댑터 worker 진입점 1줄 publish + l2_latency.py subscriber + 테스트~400줄1~1.5주
#2raw_block 전용 *_IO_SUBMITTED/COMPLETED (subscriber는 optional 처리)~200줄1주
#3(선택) docs/design/v1/mp_observability/ 이벤트 계약 + 버킷 튜닝~150줄0.5주

PR #1 전 확인할 리스크:

  • EventBus.publish() 비용 (sync vs background drain) — event_bus.py 확인
  • fs 어댑터 asyncio "dispatched" 타임스탬프 진입점 — 어댑터 작성자 의견 필요
  • pending-dict 메모리 누수 가드 — l2_throughput.py 패턴 복사

Task 2~5 요약

  • Task 2 lmcache storage describe: 어댑터 타입/디바이스 경로/용량/레이턴시 분포를 CLI로 노출. (참고: #3102 maobaolong이 hit_rate 추가 중, #3320 sammshen이 용량/사용량 메트릭 추가 중 — 둘 다 보완 관계, 레이턴시·디바이스 메타데이터는 빈 자리)
  • Task 3 fs_connector O_DIRECT 메타데이터: 현재 데이터 I/O만 O_DIRECT, 메타데이터 경로는 일반 path. Samsung SSD 성능 검증과 직결. (참고: #3191 zhengfeihe는 non_cuda_equivalents 핀 포인터 정렬 → fs_connector 메타데이터 경로와 무관, 중복 아님)
  • Task 4 L2 health check: Task 1 레이턴시 데이터 소비 → p99 임계값 초과 감지/alert.
  • Task 5 device-aware policy: 레이턴시 기반으로 어느 어댑터에 prefetch/store할지 결정. (참고: 로드맵에 "Advanced L2 store/prefetch policies", "Dynamic prefetch admission controller" 명시 — upstream도 원하나 아직 오픈 PR 없음. 단 #3269 abinggo가 admission 관련 작업 중 → 착수 전 재확인)

Task 1 vs 인접 PR 구분 (2026-05-21 검증)

  • #3320(sammshen): L2 용량/사용량 메트릭 — 레이턴시 아님 → Task 1과 구분
  • #3272(zhengfeihe): raw_block 오프라인 프로파일링/latency 분포 — Task 1은 라이브 mp_observability OTel 히스토그램 → 레이어 다름, 구분됨
  • 결론: Task 1(라이브 단계별 L2 레이턴시)은 여전히 빈 자리

v1의 한계 (v2/v3 도출 배경)

  • 단기→중기→장기 강결합 → Task 1이 막히면 4·5 전체 정체
  • FDP 정책 항목은 한대규가 이미 진행 → 제외
  • "당장 손에 잡히는 결과물"이 부족 (전부 신규 기능 설계)