본문으로 건너뛰기

FDP 기여 발굴 — ankit#1 base · MP gap · 정책 매핑

[!tldr] 업무 관점 takeaway "FDP 효과 입증 → 개선 → 상류 기여" 흐름에서 무엇을 PR로 만들 것인가를 발굴한 트랙. 핵심 사실 3가지: (1) origin/dev에 FDP 코드는 0줄 — daegyu의 ankit-sam/LMCache#1 8커밋이 첫 base인데 7주째 OPEN 정체. (2) 그 base의 placement 정책(_assign_fdp_placement_rank_based)은 이름만 거창한 placeholder(placement_ids[0] 하나 반환) — 실제 정책 결정이 곧 우리 기여 자리. (3) data/metadata RUH 분리(lifetime isolation)는 이미 hardcode → WAF 효과 입증의 최단 경로. 단, ankit#1 8커밋은 in-process plugin 전용이고 MP adapter 경로엔 0% 반영 → MP 통합이 별도 작업 단위. 근거 원본: raw/work/fdp/contribution/ (HANDOFF·items·ankit_base_commits·dev_baseline_status·mp_integration_gap·policy_proposals, 2026-06-25).


1. 작업 흐름 (사용자 합의)

히스토리 → 현재 status → 현재 아키텍처 기준 status → FDP PoC로 효과 입증 + 아이템 발굴 → 기여

단계내용상태
1히스토리 — ankit#1 8커밋 해부
2현재 status — origin/dev FDP 표면✅ (0줄)
3현재 아키텍처 기준 — MP 통합 gap
4FDP PoC로 효과 입증 + 아이템 발굴← 현재 위치
5기여 — 아이템을 PR-A~PR-E로 매핑대기

두 개의 별개 FDP 라인이 있다:

  • ankit#1 (ankit-sam/LMCache#1, daegyu base): in-process plugin, rank-based 단일 PID + fetch_fdp_status 자동 조회.
  • dongdongju PoC (DongDongJu/LMCache:fdp-waf-agentic-replay-poc, 나연/상윤 측정 중): N-RUH list + worker 분배 + data/metadata 완전 분리. 효과 입증용 harness 보유.

이 트랙(contribution/)은 단계 번호(01~05) 위에서 도는 메타 작업으로, dongdongju PoC 중심의 01_branch_audit/과 관점이 다르고 보완 관계다.


2. 현재 status — dev FDP baseline

grep -ni "fdp\|placement\|ruh"를 plugin / L2 adapter / core에 돌린 결과 전부 empty. dev에 FDP 코드는 한 줄도 없다. 단, FDP가 plug-in될 인프라는 이미 존재한다.

표면위치FDP 관점 의미
per_tp_device_pathsplugin rust_raw_block_backend.pyTP rank → device 분리. ankit#1이 이 위에 rank-based PID 정책을 얹음
io_uring_cmd 인프라rust/raw_block/src/lib.rs (#3274 머지 완료)NVMe passthrough write — FDP directive(dspec)가 들어갈 명령 경로
RawBlockCore 단일 device/FDraw_block/core.py모든 worker 공유. placement hint 통로 없음
RawBlockL2AdapterConfigraw_block_l2_adapter.pysingle device_path + I/O 옵션. per_tp_device_paths 명시 거부 (line 154-157)

3. ankit#1 8커밋 — "PoC → 운영 설정 핸들링"

remotes/ankit/pr-1 (author daegyu94). 상류 dev 머지 0건.

#커밋카테고리의미
18bb1f36asafetyplacement_id 없으면 FDP directive 끔 (dtype 0x2→0x0, dspec도 unset)
279183c87cleanupnvme identify 디버그 print 제거
39b401488docs/exampleoffload 예제에 --use_fdp/--per_tp_device_paths/--max-data-transfer-size 노출
424ae8ab8compatibilityFDP status header-first 조회 (nvme-cli 호환) — ankit#1만의 강점
52be75bb5정책placement 정책 정리 — rank 1개=PID 1개, data/metadata RUH 분리, fail-fast
610812502featuretransfer split auto-config (max_data_transfer_size=-1 → sysfs 자동)
78b7219e1testsuring_cmd 테스트 fixture 안정화
88288b6d1styleclippy/rustfmt 정리

메인 커밋 #5의 핵심 — 정책은 placeholder다

_get_placement_id_for_cuda_device(cuda index 기반) → _assign_fdp_placement_rank_based로 교체. 그러나 실제 동작은 placement_ids[0] 하나 고정 반환. 코드 코멘트도 "this policy simply uses the first placement ID per rank". 이름만 정책이고 내용은 비어 있다 → daegyu의 3축 정책(rank/domain/model)이 들어갈 자리가 바로 여기.

같은 커밋이 못박은 것:

  • lifetime isolation 이미 hardcode: data 쓰기는 단일 _data_placement_id, checkpoint metadata 쓰기는 FDP directive를 안 붙임(default RUH). "수명이 달라 WAF 우려"라는 정성적 근거만 있음 → 정량 입증이 아이템(I-E1).
  • fail-fast 강화: use_fdp인데 uring/uring_cmd 꺼져 있거나 status 빈 응답이면 즉시 RuntimeError.

ankit#1이 추가하는 표면 (다른 작업이 참조)

  • Rust/PyO3: fetch_fdp_status(max_ruhs) -> Vec<(PID, RUH_ID)>, batched_write(..., placement_ids=None), write_uring(..., placement_id=None), cdw13=(dspec<<16)·cdw12|=(dtype&0x0F).
  • Config 키(plugin extra dict 전용): rust_raw_block.use_fdp, .per_tp_device_paths, .max_data_transfer_size.

4. MP 통합 gap — ankit#1을 MP에서 돌리려면

ankit#1 8커밋은 전부 in-process plugin(RustRawBlockBackend) 대상. 우리 지향점인 MP mode(RawBlockL2Adapter)엔 어느 것도 반영 안 됨.

측면ankit#1 (in-process)MP adaptergap
진입 클래스RustRawBlockBackendRawBlockL2Adapterconfig 인터페이스 다름
device 모델rank마다 다른 device (per_tp_device_paths)단일 device 공유 + per-key 격리ankit#1 정책 그대로 못 들어감
rank 식별self.metadata.worker_idObjectKey.kv_rank 비트 패킹rank 전달 경로 다름
configextra["rust_raw_block.*"] dictRawBlockL2AdapterConfig dataclass + JSON키 별도 매핑 필요

[!note] MP에서는 FDP placement_id가 isolation의 유일 수단이다. MP adapter가 per_tp_device_paths를 거부하므로 물리 device 분리가 불가 → "rank는 device 분리로 우회됐다"는 단정은 topology dependent한 틀린 일반화. device 수 < rank 수(공유 device)거나 단일 device면 rank별 PID 분리가 의미를 갖는다.


5. 발굴 아이템 (seed) + 우선순위

items.md의 9개 아이템. PoC 환경 1차 확인 후 task 인덱스로 승격 (모두 검증/결정 필요 표시).

순서ID아이템이유
1I-E4dongdongju PoC를 MP setup에 실제로 돌려 trace다른 모든 작업의 전제
2I-E1data/metadata RUH 분리의 WAF 정량 효과 측정ankit#1 hardcode 정당화 / PR-C 데이터
3I-C3PlacementPolicy 추상화 vs caller stamp 결정I-C1 설계 결정 — daegyu와 합의 필요
4I-C1MP adapter에 FDP placement surface 추가실제 기여의 main 단위
5I-E2정책 ① rank isolation 효과 측정정책 정당화 데이터
6I-C4ankit#1 fetch_fdp_status 자동 조회를 PoC에 통합ankit#1 머지 후
7I-O1FDP 관측 지표(WAF, RU utilization, PID histogram)운영 도입 시점
후순위I-E3 / I-C2 / I-O2access pattern 자료 / fail-fast 검증 / CLI flag기반 작업 후

PR 분할안 (01_branch_audit/03_fdp_implementation_audit.md §5)

  • PR-A (대): config 5개 + _select_fdp_ruh/_write_directive_for_ruh + Rust dtype/dspec + directive 검증
  • PR-B: ankit#1 fetch_fdp_status 자동 조회 통합
  • PR-C: metadata RUH 분리 (WAF 효과 입증 후)
  • PR-D: file backend FDP (write hint or io_uring_cmd 공유)
  • PR-E (선택): FDP WAF stress harness

6. 미해결 — 사용자/daegyu 입력 필요

작업 진입 전 클리어해야 막다른 골목을 안 만난다:

  • daegyu와 머지 경로 정렬 — ankit#1을 본 레포로 가져갈 일정, 그 위에 stacked PR로 갈지.
  • PoC의 MP 동작 실증 (I-E4) — 누가 어떤 환경에서.
  • access pattern 근거 자료 위치 (I-E3) — "상윤/나연 정리 자료"가 어디 있는지.
  • PlacementPolicy 추상화 방향 (I-C3) — (A) core abstraction / (B) caller stamp / (C) hybrid.

상류 머지 경로 자체가 미정이다. daegyu의 본 레포 OPEN PR 5건은 모두 다른 raw-block 영역이고 FDP는 빠져 있으며, ankit#1만 7주째 OPEN. 작업 진입 전 daegyu와 정렬이 선행.