16. ssd

  • Haram Lee
  • 2026-05-25
  • studies / 26-1 / operating-systems

Persistence: Solid-state Drives (SSDs)

Reading

  • 이 단원은 Flash-based SSDs를 다룬다.
  • 15단원에서 HDD를 배웠다면, 16단원에서는 SSD를 배운다.
  • HDD는 mechanical movement 때문에 느리다.
  • SSD는 flash memory 기반이라 mechanical movement가 없다.
  • 그래서 random access가 HDD보다 훨씬 빠르다.
  • 하지만 SSD는 NAND flash의 특성 때문에 단순히 “빠른 disk”로만 볼 수 없다.
  • 핵심은 다음과 같다.
    • flash memory는 어떻게 동작하는가?
    • NAND flash에는 어떤 제약이 있는가?
    • SSD는 block device처럼 보이기 위해 내부에서 무엇을 하는가?
    • FTL은 왜 필요한가?
    • garbage collection과 wear leveling은 왜 필요한가?

Memory Types

  • 저장장치와 memory에는 여러 종류가 있다.
  • 대표적으로 다음이 있다.
    • ROM
    • EPROM
    • EEPROM
    • DRAM
    • FLASH
  • ROM은 high-density, reliable, low-cost 특성이 있다.
    • 하지만 일반적으로 수정이 어렵다.
  • EPROM은 non-volatile이고 ultraviolet light로 erase할 수 있다.
  • EEPROM은 electrically byte-erasable이지만 density가 낮고 cost가 높다.
  • DRAM은 high-speed이지만 volatile이다.
    • 전원이 꺼지면 data가 사라진다.
  • FLASH는 non-volatile이면서 high-density, low-cost, low-power 특성을 가진다.
  • SSD는 이 flash memory, 특히 NAND flash를 기반으로 만든 persistent storage다.

Flash Memory Characteristics

  • flash memory의 가장 중요한 특징은 erase-before-write다.
  • flash cell은 bit를 저장한다.
  • write 또는 program은 보통 1 → 0 방향으로만 가능하다.
  • erase는 0 → 1로 되돌리는 작업이다.
  • 문제는 erase가 작은 단위로 되지 않는다는 것이다.
  • flash에서는 write unit과 erase unit이 다르다.
  • NAND flash에서는 보통 다음과 같다.
    • program unit: page
    • erase unit: block
  • 즉 page 단위로 write할 수 있지만, erase는 block 단위로 해야 한다.
  • 이 때문에 이미 쓰인 page를 바로 overwrite할 수 없다.
  • 기존 data를 수정하려면 새 page에 쓰고, old page는 invalid로 표시한 뒤, 나중에 block 단위로 erase해야 한다.
  • 이 특성이 SSD 내부 설계를 복잡하게 만든다.

Logical View of NAND Flash

  • NAND flash는 block들의 집합으로 볼 수 있다.
  • 각 block은 여러 page로 구성된다.
  • 각 page는 data area와 spare area를 가진다.
  • data area에는 실제 data가 저장된다.
  • spare area에는 metadata가 저장될 수 있다.
    • ECC 정보
    • logical address 정보
    • valid/invalid 표시 등
  • page size와 block size는 flash technology에 따라 다르며, 시간이 지나면서 점점 커지는 경향이 있다.
  • NAND flash의 기본 단위 관계는 다음과 같다.
    • 여러 page가 모여 block을 이룬다.
    • 여러 block이 모여 NAND array를 이룬다.
  • read와 program은 page 단위로 이루어진다.
  • erase는 block 단위로 이루어진다.

NAND Flash Types

  • NAND flash는 cell 하나에 몇 bit를 저장하느냐에 따라 나뉜다.
  • 대표적인 종류는 다음과 같다.
    • SLC
    • MLC
    • TLC
    • QLC

SLC NAND

  • SLC는 Single Level Cell이다.
  • cell 하나에 1 bit를 저장한다.
  • 속도와 내구성이 좋다.
  • 하지만 bit density가 낮아서 cost가 높다.
  • enterprise storage나 high-end 환경에서 유리하다.

MLC NAND

  • MLC는 Multi-Level Cell이다.
  • 이름은 multi-level이지만 보통 cell 하나에 2 bits를 저장한다.
  • SLC보다 density가 높고 cost가 낮다.
  • 하지만 속도와 endurance는 SLC보다 낮다.

TLC NAND

  • TLC는 Triple-Level Cell이다.
  • cell 하나에 3 bits를 저장한다.
  • 소비자용 SSD에서 많이 사용된다.
  • MLC보다 더 싸고 density가 높지만, endurance와 write performance는 더 낮을 수 있다.

QLC NAND

  • QLC는 Quad-Level Cell이다.
  • cell 하나에 4 bits를 저장한다.
  • density가 가장 높고 cost가 낮다.
  • 하지만 cell 상태를 더 세밀하게 구분해야 하므로 reliability와 endurance 문제가 더 커진다.
  • write 성능도 낮아질 수 있다.
  • 즉 SLC에서 QLC로 갈수록 capacity와 cost는 좋아지지만, reliability와 endurance는 어려워진다.

NAND Applications

  • NAND flash는 다양한 저장장치에 쓰인다.
  • 대표적인 application은 다음과 같다.
    • USB flash drive
    • flash card
      • CompactFlash
      • MMC
      • SD card
      • Memory Stick
    • smartphone storage
      • eMMC
      • UFS
    • SSD
    • embedded device
      • MP3 player
      • digital TV
      • set-top box
      • car navigation
  • 즉 NAND flash는 PC뿐 아니라 mobile과 embedded system에서도 널리 쓰인다.
  • SSD는 NAND flash를 disk처럼 사용할 수 있게 만든 대표적인 storage device다.

Anatomy of an SSD

  • SSD는 크게 세 부분으로 구성된다.
    • Host Interface
    • Storage Controller
    • NAND Array
  • Host Interface는 host computer와 SSD를 연결한다.
    • SATA
    • PCIe
    • UFS
    • eMMC 등
  • Storage Controller는 SSD의 핵심이다.
    • FTL을 실행한다.
    • address mapping을 관리한다.
    • garbage collection을 수행한다.
    • wear leveling을 수행한다.
    • ECC를 처리한다.
  • NAND Array는 실제 data가 저장되는 flash memory chip들의 집합이다.
  • host는 SSD를 block device처럼 본다.
  • 하지만 내부에서는 controller가 NAND flash의 제약을 숨기기 위해 많은 작업을 수행한다.

SSD Internals

  • SSD 내부에는 여러 NAND chip과 channel이 있다.
  • controller는 여러 channel을 병렬로 사용해 성능을 높인다.
  • SSD는 DRAM buffer를 가질 수 있다.
    • mapping table cache
    • write buffer
    • metadata cache 등에 사용된다.
  • SSD controller는 host에서 들어온 logical block request를 NAND physical page operation으로 바꾼다.
  • 이때 단순히 LBA를 같은 위치에 쓰는 것이 아니다.
  • flash는 overwrite가 안 되므로, write는 보통 새로운 free page에 기록된다.
  • 기존 page는 invalid 처리된다.
  • 나중에 garbage collection이 invalid page를 정리한다.
  • 따라서 SSD 내부는 host가 보는 logical block array와 실제 NAND physical layout이 다르다.

HDDs vs. SSDs

  • HDD와 SSD는 같은 block device처럼 보이지만 내부 구조가 매우 다르다.
  • HDD는 mechanical device다.
    • platter가 회전한다.
    • arm이 움직인다.
    • head가 sector를 읽고 쓴다.
  • SSD는 semiconductor device다.
    • moving part가 없다.
    • NAND flash page를 read/program한다.
  • SSD의 장점은 다음과 같다.
    • random read/write가 HDD보다 훨씬 빠르다.
    • seek time이 거의 없다.
    • latency가 낮다.
    • 충격에 강하다.
    • power consumption이 낮을 수 있다.
  • HDD의 장점은 다음과 같다.
    • GB당 가격이 낮다.
    • 큰 capacity를 싸게 제공할 수 있다.
  • 강의 예시에서는 SSD가 sequential read/write와 random IOPS에서 HDD보다 훨씬 높은 성능을 보인다.
  • 특히 random read/write에서 차이가 매우 크다.
  • HDD는 seek과 rotational delay 때문에 random I/O가 느리다.
  • SSD는 mechanical delay가 없어서 random I/O에 강하다.

NAND Constraints

  • SSD가 단순히 빠른 disk가 아닌 이유는 NAND flash의 제약 때문이다.
  • NAND flash의 주요 제약은 다음과 같다.
    • No in-place update
    • Bit errors
    • Bad blocks
    • Limited program/erase cycles

No In-place Update

  • NAND flash는 page를 overwrite할 수 없다.
  • 이미 program된 page를 다시 쓰려면 먼저 erase해야 한다.
  • 그런데 erase는 page 단위가 아니라 block 단위로 이루어진다.
  • 따라서 특정 logical page 하나를 수정하기 위해 그 page만 바로 덮어쓸 수 없다.
  • SSD는 새 data를 다른 free physical page에 쓰고, mapping table을 갱신한다.
  • old physical page는 invalid로 표시한다.
  • 이것이 address remapping이 필요한 이유다.

Bit Errors

  • NAND flash는 bit error가 발생할 수 있다.
  • 특히 cell당 bit 수가 많아질수록 error 가능성이 커진다.
  • 따라서 SSD는 ECC, 즉 Error Correction Code를 사용한다.
  • ECC는 flash page의 spare area 등에 저장될 수 있다.
  • read할 때 error를 감지하고 수정한다.
  • SSD reliability는 ECC 성능과도 밀접하게 관련된다.

Bad Blocks

  • NAND flash에는 bad block이 존재할 수 있다.
  • bad block은 factory-marked bad block일 수도 있고, 사용 중에 새로 생길 수도 있다.
  • SSD는 bad block을 피해서 data를 저장해야 한다.
  • 이를 위해 bad block remapping을 수행한다.
  • host는 이런 내부 bad block을 직접 보지 않는다.
  • controller가 이를 숨겨 block device abstraction을 유지한다.

Limited Program/Erase Cycles

  • NAND flash cell은 무한히 erase/program할 수 없다.
  • program/erase cycle이 제한되어 있다.
  • 예를 들어 대략적으로 다음처럼 볼 수 있다.
    • SLC: 100K 미만
    • MLC: 3K 미만
    • TLC: 1K 미만
  • 즉 같은 block만 계속 쓰면 그 block이 빨리 닳는다.
  • SSD는 전체 block이 고르게 사용되도록 wear leveling을 해야 한다.
  • wear leveling은 SSD 수명과 reliability에 매우 중요하다.

Flash Translation Layer

  • FTL은 Flash Translation Layer의 줄임말이다.
  • FTL은 NAND flash가 traditional block device처럼 보이게 만드는 software layer다.
  • host file system은 SSD에게 sector read/write를 요청한다.
  • 하지만 NAND flash는 sector overwrite가 불가능하고 erase-before-write 제약이 있다.
  • FTL은 이 mismatch를 해결한다.
  • FTL의 역할은 다음과 같다.
    • logical block address를 physical flash page로 mapping한다.
    • write request를 새 physical page에 기록한다.
    • old page를 invalid 처리한다.
    • garbage collection을 수행한다.
    • wear leveling을 수행한다.
    • bad block을 관리한다.
  • 즉 FTL은 file system과 flash memory 사이의 translation layer다.
  • host는 SSD를 일반 disk처럼 다루지만, SSD 내부에서는 FTL이 복잡한 flash 관리 작업을 수행한다.

Address Mapping

  • address mapping은 FTL의 핵심 기능이다.
  • host는 logical block address, 즉 LBA를 사용한다.
  • NAND flash 내부에서는 physical page number, 즉 PPN을 사용한다.
  • FTL은 LBA와 PPN 사이의 mapping table을 유지한다.
  • write가 발생하면 다음처럼 동작한다.
    • host가 LBA X에 write를 요청한다.
    • FTL은 free physical page를 고른다.
    • 새 data를 그 physical page에 program한다.
    • mapping table에서 LBA X가 새 PPN을 가리키게 한다.
    • old PPN은 invalid 처리한다.
  • read가 발생하면 다음처럼 동작한다.
    • host가 LBA X를 read 요청한다.
    • FTL이 mapping table에서 X의 PPN을 찾는다.
    • 해당 physical page를 read한다.
  • 즉 logical address와 physical address는 계속 달라질 수 있다.

Example: Page Mapping

  • page mapping FTL은 logical page마다 physical page를 직접 mapping한다.
  • 예를 들어 page size가 4KB이고, block 하나에 page가 4개 있다고 하자.
  • host가 logical page 5를 read하면 FTL은 page map table에서 logical page 5의 physical page를 찾는다.
  • write request가 오면 overwrite하지 않고 새로운 page에 쓴다.
  • 예를 들어 logical page 5를 다시 write하면 다음처럼 된다.
    • 기존 physical page 5는 invalid 처리된다.
    • 새 physical page 8에 updated page를 쓴다.
    • page map table에서 logical page 5의 mapping을 8로 바꾼다.
  • 이 방식은 random write에 유연하다.
  • 하지만 logical page 수만큼 mapping table이 필요하므로 metadata overhead가 크다.
  • mapping table을 전부 DRAM에 올리려면 SSD 내부 DRAM이 많이 필요할 수 있다.

Invalidate Old Page

  • SSD에서 overwrite는 실제로 old page를 지우는 것이 아니다.
  • old page는 invalid로 표시된다.
  • 새 data는 free page에 기록된다.
  • mapping table만 새 page를 가리키도록 바뀐다.
  • invalid page는 당장 erase되지 않는다.
  • erase는 block 단위로만 가능하기 때문이다.
  • invalid page가 많아지면 나중에 garbage collection으로 정리한다.
  • 즉 SSD write는 append-like 방식으로 생각할 수 있다.
  • 계속 새 위치에 쓰고, old version은 나중에 청소한다.

Garbage Collection

  • garbage collection, GC는 invalid page가 쌓였을 때 free block을 확보하는 과정이다.
  • FTL은 계속 새 page에 write하므로 언젠가 free block이 부족해진다.
  • 이때 GC가 필요하다.
  • page-mapping FTL에서 GC는 보통 다음 순서로 동작한다.
    • victim block을 선택한다.
    • victim block 안의 valid page들을 free block으로 copy한다.
    • mapping table을 갱신한다.
    • victim block을 erase한다.
    • erased block을 free block으로 만든다.
  • 중요한 점은 valid page copy가 추가 write를 발생시킨다는 것이다.
  • 이 추가 write는 write amplification의 원인이 된다.
  • GC를 위해 최소 하나 이상의 free block이 reserve되어 있어야 한다.

Example: GC in Page Mapping

  • 어떤 block 안에 valid page와 invalid page가 섞여 있다고 하자.
  • block을 erase하려면 block 안의 모든 page가 사라진다.
  • 따라서 valid page는 먼저 다른 free block으로 copy해야 한다.
  • 그 후 victim block 전체를 erase한다.
  • erase가 끝난 block은 다시 free block이 된다.
  • 이 과정에서 host가 요청하지 않은 internal write가 발생한다.
  • 따라서 write workload가 많고 invalid page가 많을수록 GC overhead가 커질 수 있다.
  • SSD 성능이 steady-state에서 떨어지는 이유 중 하나가 GC다.

Write Amplification

  • write amplification은 host가 요청한 write보다 SSD 내부에서 실제로 더 많은 write가 발생하는 현상이다.
  • 예를 들어 host가 4KB write 하나를 요청했는데, GC 때문에 valid page 여러 개를 copy해야 할 수 있다.
  • 그러면 실제 NAND program 양은 host write보다 커진다.
  • write amplification이 크면 문제가 생긴다.
    • 성능이 낮아진다.
    • NAND 수명이 줄어든다.
    • GC overhead가 증가한다.
  • 좋은 FTL은 write amplification을 줄이도록 설계된다.
  • 이를 위해 over-provisioning, 좋은 victim selection, wear leveling, TRIM 등이 사용될 수 있다.

Wear Leveling

  • wear leveling은 NAND block의 erase 횟수를 고르게 분산시키는 기법이다.
  • NAND flash는 erase 횟수가 제한되어 있다.
  • 특정 block만 계속 erase하면 그 block이 먼저 고장난다.
  • wear leveling은 모든 block이 비슷한 횟수로 사용되도록 한다.
  • wear leveling은 크게 두 종류로 볼 수 있다.
    • dynamic wear leveling
    • static wear leveling
  • dynamic wear leveling은 새 write를 erase 횟수가 적은 free block에 배치한다.
  • static wear leveling은 거의 변하지 않는 cold data도 가끔 옮겨서 특정 block만 너무 적게 쓰이고 다른 block만 너무 많이 쓰이는 상황을 줄인다.
  • wear leveling은 SSD 수명을 늘리기 위한 핵심 기법이다.

Over-provisioning

  • SSD는 host에게 보이는 capacity보다 실제 NAND capacity를 더 많이 가질 수 있다.
  • 이 여분 공간을 over-provisioning이라고 한다.
  • over-provisioning은 다음에 도움이 된다.
    • garbage collection
    • wear leveling
    • bad block replacement
    • write amplification 감소
  • free block이 충분하면 GC가 더 효율적으로 동작할 수 있다.
  • 반대로 SSD가 거의 가득 차면 GC가 어려워지고 write amplification이 커질 수 있다.
  • 그래서 SSD는 여유 공간이 있을수록 성능 유지가 더 쉽다.

SSD Performance Characteristics

  • SSD는 HDD보다 random access가 훨씬 빠르다.
  • mechanical seek이 없기 때문이다.
  • 하지만 SSD도 read와 write 특성이 다르다.
  • read는 비교적 간단하다.
    • mapping table을 보고 physical page를 읽으면 된다.
  • write는 복잡하다.
    • overwrite가 안 된다.
    • 새 page에 써야 한다.
    • old page를 invalid 처리해야 한다.
    • 나중에 GC가 필요하다.
  • 그래서 SSD는 read 성능이 write 성능보다 안정적인 경우가 많다.
  • random write는 GC와 write amplification 때문에 성능 변동이 클 수 있다.
  • SSD 성능은 다음 요소에 영향을 받는다.
    • FTL mapping policy
    • GC policy
    • wear leveling policy
    • 내부 병렬성
    • DRAM cache
    • over-provisioning
    • workload pattern

SSD vs HDD: 핵심 차이

  • HDD는 physical geometry와 mechanical movement가 중요하다.
  • SSD는 NAND flash constraint와 internal management가 중요하다.
  • HDD 최적화의 핵심은 seek과 rotational delay를 줄이는 것이다.
  • SSD 최적화의 핵심은 write amplification과 GC overhead를 줄이는 것이다.
  • HDD에서는 sequential access가 random access보다 압도적으로 유리하다.
  • SSD에서도 sequential write가 유리할 수 있지만, HDD만큼 mechanical difference가 크지는 않다.
  • SSD는 random read에 강하다.
  • 하지만 random write는 내부적으로 invalid page를 많이 만들고 GC 부담을 키울 수 있다.
  • 따라서 SSD는 빠르지만 내부적으로 매우 복잡한 translation system을 가진 storage라고 볼 수 있다.

Why FTL Is Needed

  • host file system은 block device abstraction을 기대한다.
  • 즉 host는 다음처럼 생각한다.
    • sector 0을 read/write할 수 있다.
    • sector 1을 read/write할 수 있다.
    • 같은 sector에 여러 번 write할 수 있다.
  • 하지만 NAND flash는 다음과 같은 특성을 가진다.
    • page 단위 program
    • block 단위 erase
    • no in-place update
    • bad block 존재
    • limited erase cycles
  • 이 둘 사이에는 mismatch가 있다.
  • FTL은 이 mismatch를 숨긴다.
  • FTL이 없으면 file system이 직접 NAND flash의 모든 제약을 이해해야 한다.
  • SSD는 FTL 덕분에 기존 OS와 file system에서 disk처럼 사용할 수 있다.

SSD 내부 병렬성

  • SSD는 여러 NAND chip, die, plane, channel을 병렬로 사용할 수 있다.
  • controller는 여러 request를 동시에 여러 channel에 분산시킬 수 있다.
  • 이 내부 병렬성이 SSD throughput을 높인다.
  • host interface가 SATA에서 PCIe/NVMe로 발전한 이유도 SSD 내부 병렬성과 낮은 latency를 더 잘 활용하기 위해서다.
  • HDD는 mechanical arm 때문에 병렬성이 제한적이다.
  • SSD는 moving part가 없고 여러 NAND unit을 병렬로 다룰 수 있어 높은 IOPS를 낼 수 있다.

Reliability Issues

  • SSD reliability는 단순히 “고장 안 남”이 아니라 여러 내부 기법에 의존한다.
  • 주요 reliability issue는 다음과 같다.
    • bit error
    • bad block
    • wear-out
    • power loss during write
  • SSD controller는 ECC로 bit error를 수정한다.
  • bad block table로 bad block을 피한다.
  • wear leveling으로 block wear를 고르게 만든다.
  • mapping table과 metadata를 안전하게 유지해야 한다.
  • power loss 중 mapping update가 깨지면 data loss가 생길 수 있다.
  • 따라서 enterprise SSD는 power-loss protection capacitor 등을 갖기도 한다.

TRIM

  • SSD에서는 host가 더 이상 사용하지 않는 logical block을 SSD에게 알려주는 것이 중요하다.
  • file을 삭제해도 일반적으로 SSD는 그 LBA가 더 이상 필요 없다는 사실을 바로 모를 수 있다.
  • TRIM command는 OS가 SSD에게 “이 logical block들은 더 이상 유효하지 않다”고 알려주는 기능이다.
  • SSD는 해당 mapping을 invalid 처리하여 GC를 더 효율적으로 할 수 있다.
  • TRIM은 write amplification을 줄이고 성능 유지에 도움이 된다.
  • 강의 슬라이드의 핵심 범위는 FTL과 GC이지만, TRIM은 SSD 최적화 맥락에서 함께 기억하면 좋다.

Summary

  • 이 단원은 flash-based SSD의 구조와 동작 원리를 다룬다.
  • SSD는 NAND flash를 기반으로 한 persistent storage다.
  • NAND flash는 non-volatile이고 빠르지만 여러 제약이 있다.
  • 가장 중요한 제약은 다음이다.
    • erase-before-write
    • no in-place update
    • page 단위 program
    • block 단위 erase
    • bit errors
    • bad blocks
    • limited program/erase cycles
  • SSD는 host에게 block device처럼 보인다.
  • 하지만 내부에서는 FTL이 logical address를 physical flash page로 mapping한다.
  • write는 overwrite가 아니라 새 free page에 기록하는 방식으로 처리된다.
  • old page는 invalid 처리된다.
  • invalid page가 많아지면 garbage collection이 수행된다.
  • GC는 valid page를 다른 block으로 copy하고 victim block을 erase한다.
  • 이 과정에서 write amplification이 발생할 수 있다.
  • wear leveling은 erase 횟수를 고르게 분산시켜 SSD 수명을 늘린다.
  • SSD는 HDD보다 random access가 훨씬 빠르지만, write path는 FTL, GC, wear leveling 때문에 복잡하다.
  • 결국 16단원의 핵심은 SSD는 HDD보다 빠른 flash-based block device이지만, NAND flash의 erase-before-write 제약을 숨기기 위해 FTL, mapping, GC, wear leveling 같은 복잡한 내부 mechanism이 필요하다는 것이다.
Discussion