FTL WearLeveling GarbageCollection
FTL · Wear Leveling · Garbage Collection 상세 분석
Logical-to-Physical Mapping · Out-of-Place Update · WAF · Over-Provisioning · TRIM
NAND는 읽기/쓰기를 Page 단위로 수행하지만, 이미 쓴 위치를 곧바로 덮어쓸 수 없고 소거는 더 큰 Block 단위로만 가능합니다. 본 문서는 이 비대칭성을 감추기 위해 SSD가 사용하는 FTL의 주소 매핑, 가비지 컬렉션, 마모 평준화, 오버프로비저닝을 하나의 동작 체계로 연결해 분석합니다.
실제 SSD 품질은 단순히 NAND 셀 속도만으로 결정되지 않습니다. 같은 NAND를 써도 매핑 테이블을 얼마나 세밀하게 유지하는지, free block pool을 얼마나 두껍게 확보하는지, TRIM과 background GC를 얼마나 잘 엮는지에 따라 랜덤쓰기 지연, WAF, 수명, tail latency가 크게 달라집니다. 따라서 FTL은 NAND 제약을 숨기는 번역기이면서 동시에 성능과 내구성을 조정하는 정책 엔진으로 봐야 합니다.
1. FTL이 필요한 근본 이유
호스트와 운영체제는 SSD를 일반 블록 디바이스처럼 취급하며 LBA(Logical Block Address) 단위로 읽고 씁니다. 그러나 실제 NAND는 erase-before-write 제약 때문에 같은 LBA를 다시 써도 원래 물리 페이지를 덮어쓸 수 없습니다.
따라서 SSD는 '보이는 주소(LBA)'와 '실제 위치(PPA)'를 분리해 관리해야 합니다. 새 데이터는 항상 빈 페이지에 out-of-place로 기록하고, 기존 페이지는 invalid로 표시한 뒤 매핑 테이블만 새 물리 위치로 바꿉니다.
그림 1. in-place update 불가와 FTL의 Logical→Physical 매핑 필요성
Out-of-Place Update
이 구조 덕분에 호스트는 평범한 overwrite처럼 보이는 I/O를 계속 사용할 수 있지만, 내부적으로는 invalid page가 누적되고 free block pool을 유지해야 하는 부담이 생깁니다. FTL은 바로 이 부담을 감추는 핵심 펌웨어 계층입니다.
2. FTL 매핑 구조
가장 세밀한 방식은 Page Mapping입니다. 4KB 또는 16KB 페이지마다 개별 PPA를 붙이므로 랜덤쓰기와 overwrite가 많은 워크로드에 유리하지만, 매핑 테이블 크기가 커 DRAM 비용이 커집니다.
반대로 Block Mapping은 테이블이 작지만 갱신 단위가 거칠고, 작은 overwrite를 처리할 때 내부 copy가 많아집니다. 그래서 실제 SSD는 데이터 블록과 로그 블록을 조합한 Hybrid Mapping이나 page-level cache를 함께 사용하는 경우가 많습니다.
매핑 방식 비교
| 방식 | 매핑 단위 | 장점 | 한계 |
|---|---|---|---|
| Page Mapping | Page | 랜덤 쓰기와 overwrite에 강함 | 매핑 테이블이 커서 DRAM 부담이 큼 |
| Block Mapping | Block | 메타데이터가 작고 단순함 | 작은 overwrite에서 copy 비용이 큼 |
| Hybrid Mapping | Page + Block | 성능과 메타데이터의 균형이 좋음 | 구현 복잡도가 높음 |
그림 2. Page Mapping / Block Mapping / Hybrid Mapping 구조 비교
매핑 테이블과 DRAM/HMB
매핑 테이블은 빠른 조회를 위해 대개 컨트롤러 내 DRAM에 놓입니다. DRAM-less SSD는 Host Memory Buffer(HMB)나 더 작은 캐시 구조를 사용해 일부만 유지하며, 그 대가로 랜덤 접근 지연이 늘 수 있습니다.
또한 매핑 정보는 전원 차단 이후에도 복구되어야 하므로, SSD는 주기적으로 mapping checkpoint를 NAND 메타 영역에 기록하거나 저널 형태로 변경분을 남깁니다. 이 복구 경로가 느리면 부팅 직후 초기 스캔 시간이 길어지고, 너무 자주 기록하면 메타데이터 쓰기 자체가 WAF를 키우므로 구현 균형이 중요합니다.
현대 SSD 컨트롤러는 이 매핑 외에도 bad block management, ECC, read disturb management를 함께 수행해 NAND의 물리적 열화를 관리합니다.
3. Garbage Collection
out-of-place 쓰기가 계속되면 블록 곳곳에 valid 페이지와 invalid 페이지가 섞입니다. SSD는 invalid 비율이 높은 victim block을 고른 뒤 valid 페이지만 새 블록으로 옮기고, 원래 블록 전체를 소거해 free block으로 회수합니다.
이 migration은 호스트가 요청하지 않은 추가 쓰기이므로 Write Amplification의 직접 원인입니다. free block이 부족한 순간에 실행되는 foreground GC는 tail latency를 크게 흔들고, 충분한 여유 블록이 있으면 background GC로 더 부드럽게 처리할 수 있습니다.
그림 3. Invalid Page 누적 -> Victim Block 선택 -> Valid Page Migration -> Erase
GC 트리거와 TRIM
운영체제가 TRIM/Discard를 보내면 SSD는 더 이상 의미 없는 LBA를 미리 invalid로 표시할 수 있어 migration 양이 줄어듭니다. 따라서 파일 삭제나 세그먼트 정리를 정확히 통지하는 상위 소프트웨어는 WAF와 지연시간을 동시에 개선할 수 있습니다.
victim block 선택도 단순히 invalid 비율 하나로 끝나지 않습니다. 실제 컨트롤러는 reclaim 효율, erase count 편차, 채널/다이 부하, foreground 긴급도까지 함께 고려해 victim을 고르며, 이 선택이 공격적일수록 공간 회수는 빨라지지만 copy cost와 지연 흔들림도 커집니다.
그림 4. TRIM/Discard가 GC migration 양과 WAF를 줄이는 경로
4. Wear Leveling
NAND 블록은 제한된 P/E cycle만 견딜 수 있으므로, 특정 블록에 쓰기가 몰리면 그 블록이 먼저 닳아 전체 SSD 수명이 짧아집니다. Wear Leveling은 블록들의 erase count를 가능한 한 고르게 만드는 정책입니다.
동적 Wear Leveling은 새 쓰기를 상대적으로 덜 닳은 블록에 배치하고, 정적 Wear Leveling은 오랫동안 바뀌지 않는 cold data도 가끔 옮겨 특정 블록만 지나치게 '젊게' 남는 현상을 막습니다.
그림 5. 동적/정적 Wear Leveling과 Hot/Cold Data 분산 전략
5. 오버프로비저닝과 QoS
오버프로비저닝(OP)은 사용자에게 노출되지 않는 예비 용량으로, free block pool을 두텁게 유지해 GC와 Wear Leveling이 숨 쉴 공간을 제공합니다. OP가 작으면 migration 압박이 커지고 write cliff가 빨리 나타납니다.
반대로 enterprise SSD처럼 OP가 충분하면 idle 구간에 미리 정리할 수 있어 WAF가 낮아지고 성능 예측성이 좋아집니다. 결국 FTL의 품질은 매핑 알고리즘 자체뿐 아니라 free block budget과 background maintenance 전략까지 함께 봐야 합니다.
그림 6. Free Block Pool, OP, Background GC가 Tail Latency에 미치는 영향
6. 장단점
장점
-
out-of-place update와 L2P 매핑 덕분에 호스트는 일반 블록 디바이스처럼 SSD를 사용할 수 있습니다.
-
Wear Leveling은 erase count를 분산해 특정 블록의 조기 고장을 줄입니다.
-
오버프로비저닝과 background GC는 idle 구간에 정리를 밀어 넣어 WAF와 tail latency를 낮출 수 있습니다.
-
TRIM/Discard가 들어오면 불필요한 migration을 줄여 수명과 성능을 함께 개선할 수 있습니다.
한계
-
page mapping은 성능이 좋지만 메타데이터 비용이 커서 DRAM 의존도가 높습니다.
-
block mapping은 구현이 단순하지만 작은 overwrite가 많을수록 내부 copy가 늘어납니다.
-
free block pool이 부족하면 foreground GC가 발생해 지연 변동성이 커집니다.
-
정적 wear leveling은 수명을 늘리지만 cold data migration 때문에 추가 쓰기 비용이 생깁니다.
7. 관련 기술
-
NAND NVMe SSD Analysis: NAND의 Page/Block 비대칭, FTL, TRIM, 오버프로비저닝의 전체 흐름
-
NAND Flash Internals: 플로팅 게이트/charge trap, Vth, Program/Erase 물리
-
VFS FS PageCache BlockIO: OS 저장장치 경로와 TRIM 전달 경로
-
SSD Internal Parallelism Channel Die Plane: 채널/다이/플레인 병렬성
-
NVMe Architecture: NVMe 큐 구조와 Deallocate 계열 명령
-
ECC Error Correction: BCH, LDPC와 NAND 오류 정정
-
Flash memory controller: FTL, wear leveling, garbage collection 개요
-
Wear leveling: dynamic/static/global wear leveling 개념
-
TRIM (computing): TRIM/UNMAP/Deallocate와 write amplification
참고 문헌
-
Garth Goodson, Rahul Iyer, Design Tradeoffs in a Flash Translation Layer (PDF: https://web.archive.org/web/20150623162937/http://drona.csa.iisc.ernet.in/~gopi/west10/goodson.pdf)
-
Li-Pin Chang, On Efficient Wear Leveling for Large Scale Flash Memory Storage Systems (CiteSeerX: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.103.4903)
-
Feng Chen, Tian Luo, Xiaodong Zhang, CAFTL: a content-aware flash translation layer enhancing the lifespan of flash memory based solid state drives (FAST'11: https://dl.acm.org/doi/10.5555/1960475.1960481)
-
Kingston, Flash Memory Guide (PDF: http://media.kingston.com/pdfs/FlashMemGuide.pdf)
-
OCZ Technology, SSDs - Write Amplification, TRIM and GC (PDF: https://web.archive.org/web/20120526033947/http://www.oczenterprise.com/whitepapers/ssds-write-amplification-trim-and-gc.pdf)
8. 핵심 정리
FTL은 단순한 주소 변환 테이블이 아니라, NAND의 비대칭성과 수명 제약을 일반 블록 인터페이스 뒤에 숨기는 운영 체제와 같은 계층입니다. 매핑이 유연할수록 성능은 좋아지지만 메타데이터 비용이 늘고, GC/Wear Leveling이 공격적일수록 수명은 좋아지지만 내부 쓰기와 지연 변동성이 커질 수 있습니다.
따라서 좋은 SSD 설계는 L2P 매핑, GC, Wear Leveling, OP, DRAM/HMB, TRIM 처리까지를 하나의 폐루프로 최적화하는 문제로 이해해야 합니다.