본문으로 건너뛰기

데이터 배치 기술의 역사 — 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 — 세 교훈을 동시에 푸는 설계

항목StreamsFDPZNSOCSSD
쓰기 순서 제약무관무관순차만완전제어
WAF 보장없음~1 가능1 보장1 보장
하위 호환호환호환비호환비호환
Host 관리 부담낮음낮음높음매우 높음
상태폐기현재표준화폐기

FDP의 설계 원칙:

  1. 미디어 관리는 SSD에게 (OCSSD 교훈)
  2. 앱 스택 대규모 변경 불요 (ZNS 교훈)
  3. 실사용 케이스로 효과 증명 (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]] — 우리 도입 전략의 상위 목표