데이터 배치 기술의 역사 — OCSSD / Streams / ZNS / FDP
[!tldr] 업무 관점 takeaway [[NVMe-FDP|FDP]]는 갑자기 나온 게 아니라 세 가지 실패에서 배운 결과물이다. (1) OCSSD = 너무 복잡, (2) Streams = WAF 보장 없음, (3) ZNS = 호환성 깨짐. FDP는 셋의 교훈을 합쳐 "hint만 추가, 안 쓰면 평소대로, WAF 보장" 3가지를 동시에 달성. 우리가 LMCache에 FDP를 도입할 때도 이 세 원칙(단순함 / 점진성 / 측정 가능성)을 그대로 따라야 한다.
시간선
~1991 ── NAND SSD 등장 → Solution #1: Overprovisioning (여유공간)
~2007 ── Solution #2: TRIM / Deallocate (LBA 힌트)
2013 ── Multi-Stream / NVMe Streams (data 그룹 힌트)
2016+ ── OCSSD (host 완전 제어)
2020+ ── ZNS (Zone 순차 쓰기)
2022 ── FDP (NVMe TP4146) ← 현재
Host 통제 수준 스펙트럼:
낮음 ─────────────────────────────────── 높음
CNS Streams / FDP ZNS OCSSD
(기존) (힌트 방식) (zone) (완전제어)
실패 사례 1 — OCSSD (Open Channel SSD)
- 아이디어: Host가 NAND 물리 구조까지 직접 제어
- 결과: WAF=1 이론상 가능 (최고)
- 왜 죽었나: TLC 보편화 + wear leveling + error correction까지 Host가 관리 → 너무 복잡, 표준화 실패, 결국 폐기
교훈: 미디어 관리는 SSD에게 맡겨라.
실패 사례 2 — NVMe Streams (Multi-Stream)
- 아이디어: Write에 "힌트 태그" 붙이기 (FDP의 직접 전신)
- 결과: 인터페이스 단순, 하위 호환
- 왜 죽었나: "WAF 보장이 없음". 힌트를 줘도 SSD가 어떻게 처리할지 보장 못함 → 업계 신뢰 못 얻음 → Linux 커널에서 결국 지원 제거
교훈: 실사용 사례 + 측정 가능한 효과가 있어야 채택된다.
실패 사례 3 — ZNS (Zoned Namespace)
- 아이디어: SSD를 Zone으로 나누고 순차 쓰기만 허용
- 결과: WAF=1 보장, 표준화 완료
- 왜 트랙션이 낮나: "순차 쓰기만 가능" → 기존 앱 스택 대규모 재설계 필요. Random write 패턴과 안 맞음. SMR HDD에는 채택됐지만 NVMe에선 인기 낮음.
교훈: Host 앱 스택을 대규모로 바꾸게 하지 마라.
FDP — 세 교훈을 동시에 푸는 설계
| 항목 | Streams | FDP | ZNS | OCSSD |
|---|---|---|---|---|
| 쓰기 순서 제약 | 무관 | 무관 | 순차만 | 완전제어 |
| WAF 보장 | 없음 | ~1 가능 | 1 보장 | 1 보장 |
| 하위 호환 | 호환 | 호환 | 비호환 | 비호환 |
| Host 관리 부담 | 낮음 | 낮음 | 높음 | 매우 높음 |
| 상태 | 폐기 | 현재 | 표준화 | 폐기 |
FDP의 설계 원칙:
- 미디어 관리는 SSD에게 (OCSSD 교훈)
- 앱 스택 대규모 변경 불요 (ZNS 교훈)
- 실사용 케이스로 효과 증명 (Streams 교훈) — [[CacheLib-FDP-사례|CacheLib]]
우리 LMCache 도입 전략에 주는 교훈
원칙 1 — 단순성
LMCache에 FDP Backend 추가는 기존 Backend와 호환되게.
안 쓰면 평소대로 동작.
원칙 2 — 점진성
처음부터 Storage Stack 전체를 갈아엎지 말고
Local Disk Backend의 RUH 매핑 한 단계부터.
원칙 3 — 측정 가능성
[[WAF]] / [[TTFT-ITL|TTFT]] / p99 latency 모두 baseline 대비 정량 비교.
[[단기-Task-목록|Task 1 latency histogram]]이 이걸 가능하게 만든다.
의외의 연결
[!note] FDP는 "Host hint + SSD 자율성"의 균형점 너무 적게 통제(CNS) = SSD 마음대로. 너무 많이 통제(OCSSD) = host 폭망. FDP는 "lifetime 같은 데이터 라벨만 host가 알려주고, 나머지는 SSD가 알아서". LMCache 워크로드의 KV Cache lifetime은 정확히 그 라벨 하나만 있으면 되는 데이터다.
관련 페이지
- [[NVMe-FDP]] — 본 페이지의 결론
- [[NAND-Flash-기초]] — 모든 시도가 풀려고 한 NAND 제약
- [[WAF]] — 모든 시도의 KPI
- [[CacheLib-FDP-사례]] — FDP가 살아남은 결정적 사례
- [[Mission]] — 우리 도입 전략의 상위 목표