FDP 기여를 위한 발굴 아이템 (seed)
이 디렉토리의 최종 산출물. 근거는 ankit_base_commits.md / dev_baseline_status.md / mp_integration_gap.md / policy_proposals.md.
모든 아이템은 검증 필요 / 결정 필요 표시를 둠. PoC 환경에서 1차 확인 후 task 인덱스(
tasks/)로 승격.
1. 작업 흐름 (사용자 합의 재확인)
- 히스토리 파악 — ankit#1 8커밋 해부 ✅ (
ankit_base_commits.md) - 현재 status 파악 — origin/dev FDP 표면 ✅ (
dev_baseline_status.md) - 현재 아키텍처 기준 status — MP gap ✅ (
mp_integration_gap.md) - FDP PoC로 효과 입증 + 아이템 발굴 — ← 지금 이 문서
- 기여 — 발굴된 아이템을 PR-A~PR-E 분할안에 매핑
01_branch_audit/03_fdp_implementation_audit.md §5의 PR 분할안:
- PR-A (대): 5개 config +
_select_fdp_ruh/_write_directive_for_ruh+ Rustdtype/dspec+validate_nvme_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
2. 발굴 아이템 — 효과 입증 트랙
I-E1. data/metadata RUH 분리의 WAF 정량 효과 측정 [효과 입증]
근거: ankit#1 2be75bb5에서 이미 hardcode — "due to their distinct lifetimes" 라는 정성적 진술만 있음.
해야 할 일: benchmarks/fdp_waf_stress/ mode separated vs mixed 측정으로 WAF 차이 정량화.
기여 단위: PR-C 보강 데이터 (이미 03_audit에서 식별된 단위).
검증 필요: WAF 측정 자체보다, dongdongju PoC와 ankit#1의 "분리 모드" 정의가 같은지 — PoC는 fdp_metadata_mode="per_ruh" (별도 RUH list), ankit#1은 "default RUH 사용" (FDP directive 안 붙임). 두 방식의 의미적 차이 확인.
선행: 단계 4 측정 환경 가용성.
I-E2. 정책 ① rank isolation 효과 측정 (MP setup) [효과 입증]
근거: MP에서 per_tp_device_paths 거부 → FDP placement_id가 isolation 유일 수단 (policy_proposals.md §1).
baseline: policy_proposals.md §5 매트릭스 B1 vs R.
측정 지표: per-rank read/write throughput, RU 점유 분포, p99 latency.
검증 필요: rank 수 > RUH 수일 때 fallback 정책 (round-robin? hash? rank>>group?).
기여 단위: PR-A의 하위 (정책 abstraction의 첫 구현체).
I-E3. 정책 ②③ access pattern 근거 자료 정리 [선행]
근거: daegyu 진술 — "상윤/나연님이 정리하신 자료 보고 근거를 만들려고".
해야 할 일: 사용자가 보유한 model별·tenant별 KV cache access pattern 자료를 정리해 PoC 실험 가설로 변환.
산출: 이 contribution/ 디렉토리에 access_pattern_evidence.md 신설 (현 plan 범위 밖, 후속).
검증 필요: 자료가 어디에 있는지 (사용자 확인 필요).
I-E4. dongdongju PoC를 MP setup에 실제로 돌려보기 [검증]
근거: 사용자 진술 — "아마도 fdp poc 코드는 mp mode에서 동작하는 거로 되어있긴할거야".
해야 할 일: PoC의 RawBlockCore FDP 코드가 RawBlockL2Adapter를 통해 호출되는 경로 실증 (trace).
검증 필요: PoC의 _select_fdp_ruh 3단 fallback이 MP의 ThreadPoolExecutor store 경로에서 어떻게 호출되는지 — obj.metadata.fdp_placement_rank stamping 주체가 누구인지 (lmcache/v1/multiprocess/server.py:34).
선행: 단계 3 build/test 환경.
3. 발굴 아이템 — 코드/구조 보강 트랙
I-C1. MP adapter 경로에 FDP placement_id surface 추가 [신규 PR 후보]
근거: ankit#1의 in-process plugin 변경분이 MP adapter에는 0% 반영됨 (dev_baseline_status.md §1). 해야 할 일:
RawBlockL2AdapterConfig에use_fdp+fdp_data_ruh_ids+fdp_metadata_mode등 추가 (mp_integration_gap.md §5).RawBlockCore.put_many()시그니처 또는RawBlockKeySpec에 placement hint 통로 추가.- ankit#1의
_fetch_fdp_status/_get_data_placement_id/_build_data_placement_ids재사용. 검증 필요: 시그니처 확장이 다른 caller (dax_backend 등)에 영향 주는지. 기여 단위: 새 PR (03_audit PR-A 분할안과 별개, MP 확장 단위).
I-C2. ankit#1의 fail-fast가 MP에서 같이 작동하는지 확인 [검증]
근거: ankit#1 _configure_fdp_placements에서 status 빈 응답 → RuntimeError.
해야 할 일: MP adapter __init__에서 같은 fail-fast 흐름 가능한지 (worker process 시작 시점 실패 처리).
검증 필요: MP에서 worker_id 가져오는 시점이 RawBlockCore init보다 늦으면 어떻게 처리?
기여 단위: I-C1과 묶임.
I-C3. PlacementPolicy 추상화 vs caller stamp 결정 [설계]
근거: 03_audit (a) gap — "PoC는 harness가 storage_class별 RUH list를 stamp, ankit#1은 plugin 안에서 결정. upstream 시 어느 쪽?" 옵션:
- (A)
PlacementPolicyinterface를 core에 두고 plugin이 주입 — 정책 ②③ 확장 용이 - (B) 정책 결정은 caller (L1/scheduler)가 하고 ObjectKey metadata로 stamp — core 단순 forward
- (C) 두 layer 모두 (default policy + override hint) 검증 필요: dongdongju PoC가 (B)를 채택한 이유 — harness 확장성 / core 단순화. 기여 단위: PR-A의 설계 결정. 이 결정은 effort estimate 이전에 daegyu와 합의 필요.
I-C4. ankit#1의 fetch_fdp_status 자동 조회를 dongdongju PoC에 합류 [상위 머지]
근거: dongdongju PoC가 RUH descriptor 자동 조회 미포함, ankit#1만의 강점 (03_audit §3 PR-B 후보). 해야 할 일: ankit#1 머지 후, dongdongju 측 코드가 fetch_fdp_status 사용하도록 통합. 기여 단위: PR-B (이미 식별됨).
4. 발굴 아이템 — 운영/관측 트랙
I-O1. FDP 관측 지표 추가 [신규]
근거: ankit#1에 FDP 관련 metric 없음, dongdongju harness만 보유 (offline). 해야 할 일 (03_audit (f) gap 참조):
- WAF (write amplification factor) — vendor counter 의존
- RU utilization per PID
- placement_id distribution histogram
- failed FDP directive count
기여 단위: B1 텔레메트리 (
tasks/index.mdv2 B1)와 합류 가능. 또는 별도 PR. 검증 필요: vendor counter 접근 방법 (smartctl? nvme-cli? sysfs?).
I-O2. CLI flag 노출 [운영 편의]
근거: 03_audit (g) gap — YAML/JSON config로만 가능.
해야 할 일: lmcache storage configure --use-fdp --data-ruhs 0,1,2,3 --metadata-ruhs 4 같은 CLI 노출.
기여 단위: 03_audit PR-A 후속 / 작은 PR.
5. 우선순위 (initial guess — daegyu와 합의 후 확정)
| 순서 | 아이템 | 이유 |
|---|---|---|
| 1 | I-E4 (PoC를 MP에 실제로 돌리기) | 다른 모든 작업의 전제 |
| 2 | I-E1 (data/metadata RUH 분리 WAF 측정) | ankit#1 hardcode를 정당화 / PR-C 데이터 |
| 3 | I-C3 (PlacementPolicy 추상 vs caller stamp 결정) | I-C1의 설계 결정. daegyu와 합의 필요 |
| 4 | I-C1 (MP adapter FDP surface) | 실제 기여의 main 단위 |
| 5 | I-E2 (rank isolation 측정) | 정책 정당화 데이터 |
| 6 | I-C4 (fetch_fdp_status 통합) | ankit#1 머지 후 |
| 7 | I-O1 (관측 지표) | 운영 도입 시점에 |
| 후순위 | I-E3 (access pattern 자료), I-C2 (fail-fast 검증), I-O2 (CLI) | 기반 작업 후 |
6. 미해결 사용자 입력 필요 항목
- daegyu와 머지 경로 정렬 (ankit#1을 본 레포로 가져갈 일정 / 우리가 그 위에 stacked PR로 갈지)
- dongdongju PoC가 MP mode 기준으로 동작하는지 실증 (I-E4)
- access pattern 근거 자료 위치 / 요약 (I-E3)
-
PlacementPolicy추상화 방향 결정 (I-C3)