본문으로 건너뛰기

NAND Flash 기초

[!tldr] 업무 관점 takeaway NAND의 단 하나 특성 — "덮어쓰기 불가, 블록 단위로만 erase" — 이 LMCache의 모든 [[WAF]] 문제의 뿌리. KV Cache 워크로드처럼 수명이 다른 데이터가 같은 블록에 섞이면 [[Garbage-Collection|GC]]가 폭주한다. [[NVMe-FDP|FDP]]는 이 섞임을 host hint로 막아 NAND를 잘 쓰게 해주는 기술. 즉 FDP를 제대로 이해하려면 NAND erase 단위부터 시작.


물리 계층 구조

SSD
├── Channel 0
│ ├── Die 0
│ │ ├── Plane 0
│ │ │ ├── Block 0 [Page 0, Page 1, Page 2, ...]
│ │ │ ├── Block 1
│ │ │ └── ...
│ │ └── Plane 1
│ └── Die 1
├── Channel 1
└── ...

핵심 단위

단위설명일반 크기
Page쓰기 / 읽기 최소 단위4 KB ~ 16 KB
BlockErase 최소 단위 (여러 Page)수 MB
Plane / Die / Channel병렬성 확보 단위

Superblock — 병렬 쓰기 단위

여러 Channel × Die × Plane에 걸친 Block들의 묶음. "여러 채널/다이에 동시에 병렬로 쓰기" 위함 → 속도가 나온다.

Superblock (예: 4채널 × 4다이 = 16개 블록 묶음)
Ch0-Die0-Block5 Ch0-Die1-Block3 ...
Ch1-Die0-Block2 Ch1-Die1-Block9 ...
...

핵심 제약 — "덮어쓰기 불가"

매체덮어쓰기
HDD✅ 가능
NAND SSD불가능

새 데이터를 쓰려면 빈 페이지에만 쓸 수 있다.

→ "현재 어디까지 썼는지" 추적하는 Append Point (쓰기 포인터) 필요.

기존 SSD: Append Point 하나

Superblock 0 (현재 쓰는 중)
[A][B][C][D][_][_][_]

다음 쓸 위치

모든 host write가 이 하나의 append point로 향한다. 결과: 서로 다른 수명의 데이터가 같은 블록에 섞임.

→ 이게 [[WAF]] 증가의 직접 원인이다.


Garbage Collection (GC)

블록 안에 살아있는 페이지가 군데군데 남아있을 때:

  1. 살아있는 페이지를 다른 블록으로 복사
  2. 빈 블록을 erase
  3. 이제 그 블록을 새 쓰기에 사용 가능

복사 단계가 곧 [[WAF]] 증가.

자세히는 [[Garbage-Collection]].


TLC vs QLC ([[HC-SSD]] 관련)

셀당 비트명칭용량내구성Write LatencyWAF 민감도
1SLC작음매우 김매우 빠름낮음
2MLC
3TLC중간중간보통보통
4QLC짧음느림높음

[[HC-SSD]]는 보통 QLC. 같은 WAF라도 성능/수명 피해가 TLC보다 큼 → FDP 효과 더 큼.


의외의 연결

[!note] Erase block 크기 ↔ LMCache chunk 크기 NAND erase 단위는 수 MB. [[LMCache-Local-Disk-Backend|LMCache chunk]] (256 토큰)는 모델에 따라 수십~수백 MB. chunk 1개가 erase block 수십 개에 흩어진다. FDP RU를 chunk 경계와 정렬하면 erase 효율 ↑. ([[기여-포인트-맵|기여 포인트 [3][9]]])


관련 페이지

  • [[WAF]] — NAND 특성에서 직접 파생
  • [[Garbage-Collection]] — Erase before write 때문에 필수
  • [[NVMe-FDP]] — Append Point를 여러 개로 만들어 섞임을 막는 기술
  • [[HC-SSD]] — QLC NAND 기반 대용량
  • [[데이터-배치-기술-역사]] — NAND 제약을 푸는 시도들의 역사