FDP PoC 검증 + raw_block / file backend 개선 — 작업 디렉터리
전체 계획서: PLAN.md
진행 상태/작업일지: status.md
단계별 산출물 트리
work/fdp/
├── PLAN.md # 전체 계획 (단계 0~5)
├── status.md # plan 수행 상태, 문제/해결/변경점 누적 기록
├── README.md # (이 파일)
├── 01_branch_audit/ # 단계 1 — Codex 로컬 (완료)
│ ├── dev_base_commit.txt # PoC가 분기한 dev 시점
│ ├── branch_diffstat.txt # diff --stat 95 files
│ ├── 01_codebase_map.md # 95 파일 분류 + 호출 그래프
│ ├── 02_ankit_sam_pr1_diff.md # ankit-sam#1 ↔ PoC 비교 (4지선다 결론: c+d 혼합)
│ ├── 03_fdp_implementation_audit.md # 7카테고리 audit (a~g) + 빈자리
│ └── placement_policy_notes.md # placement_id 결정 코드 path
├── 02_smrc_env/ # 단계 2 — Codex smrc audit
│ └── raw/ # nvme-cli/toolchain raw 출력
├── 03_build_test/ # 단계 3 — smrc build/test 스크립트 준비
│ ├── README.md
│ ├── build_and_test.sh
│ ├── sanity_write_chunk.py
│ └── sanity_smoke.md
├── 04_measure/ # 단계 4 — 1차 PoC harness 측정 스크립트 준비
│ ├── runbook.md
│ ├── run_R0_precondition.sh
│ ├── run_poc_harness.sh
│ └── parse_results.py
└── 05_design/ # 단계 5 — Codex 로컬 (단계 4 후)
단계 1 핵심 결론 (요약)
-
PoC 구조: 39 커밋 / 95 파일 / 15,678 lines 추가. 3 묶음으로 구성:
- raw_block MP L2 adapter 인프라 (30 커밋, dev 머지본과 기능 동등)
- FDP / io_uring_cmd 코어 (3 커밋, 핵심)
- agentic replay + FDP WAF stress harness (6 커밋)
-
ankit-sam/LMCache#1 포함 여부: (c) + (d) 혼합 —
- io_uring_cmd 인프라(NVMe helper 7개 함수)는 byte-identical으로 흡수 (squash 형태)
- FDP 사용자 API와 정책은 두 라인이 독립
- ankit#1: rank-based 단일 ID +
fetch_fdp_statusRUH 자동 조회 + metadata는 default RUH - PoC: N-RUH list + worker 단위 분배 + data/metadata RUH 완전 분리
- ankit#1: rank-based 단일 ID +
-
FDP 7카테고리 빈자리:
- (c) file backend FDP: 완전 미구현 (단계 5 새 영역)
- (d)
fetch_fdp_statusRUH descriptor 자동 조회: PoC 미포함, ankit#1만 보유 - (g) CLI flag: 미노출, JSON config로만
다음 단계
Codex가 접근 가능한 smrc 세션에서는 직접 02_smrc_env/precheck.sh를 실행한다. 현재 세션에 NVMe namespace가 보이지 않는 경우에만 raw 출력을 이 디렉터리에 붙여넣고 이어간다.
target device는 S77UNG0TC00101 기준 /dev/nvme0n1 + /dev/ng0n1이다.
단계 3부터 바로 진행할 수 있으면 03_build_test/README.md의 env를 맞춘 뒤:
bash build_and_test.sh
1차 WAF 측정은 04_measure/runbook.md에 따라 R0/R1/R2/R3 순서로 실행한다. run_R0_precondition.sh는 blkdiscard와 sequential fill을 수행하므로 대상 NVMe namespace가 지워져도 되는지 확인한 뒤 실행해야 한다.