[운영체제] SSD(Solid State Drives)

.·2023년 6월 6일

HDD에 이어서 SSD에 대해 알아보겠습니다.

SSD(Solid State Drives)

1. Flash

SSD는 NAND Flash memory이기 때문에 Flash 메모리에 대해 먼저 알아보자.

1. 구성

플래시 메모리의 cell은 위와 같이 구성되어 있고, cell 하나에 1bit를 저장한다.

2. 특징

  • 쓰기전에 지워야 한다.
    • 프로그램하거나 쓰면 1->0
    • 지우면 0->1
  • 블록단위로 지울 수 있다.
    • Program unit:
      • NOR Flash: byte or word
      • NAND Flash: page
    • Eraseu unit: block

2. Nand Flash와 SSD

1. NAND Flash의 Logical View

블록의 집합으로 이루어져 있고, 각각의 블록은 다수의 페이지를 가진다.

2. NAND Flash Types

  • SLC NAND

    • Single Level Cell
    • 1bit/cell
  • MLC NAND

    • Multi Level Cell
    • 2bits/cell
  • TLC NAND

    • Triple Level Cell
    • 3bits/cell
  • 3D NAND

3. SSD

SSD는 크게 펌웨어 코드를 구동시키기 위한 작은 CPU와 SRAM을 포함한 SSD Controller, CPU를 돌리기 위한 DRAMNAND Flash로 구성되어 있다. 내부 구조는 다음과 같다. SSD와 HDD 성능 비교 SSD는 Host Interface로 NVMe를 사용하고 Performance 지표를 보면 Host Interface의 성능을 거의 다 사용하는 것을 볼 수 있다. 따라서 Interface가 Bottleneck이 될 수 있다.

4. NAND의 한계

  • In-place update가 불가능하다. 즉 overwrite할 수 없다.
    • sector를 다른 주소로 remapping하는게 요구된다.(address translation)
  • Bit errors
    • error correction codes(Eccs)가 요구된다.
  • Bad blocks
    • 공장에서부터 불량이거나 실행시간에 bad 블록이 생길 수 있다.
    • bad block을 remapping하는 것이 필요하다.
  • wrtie/erase 가능한 횟수에 제한이 있다.
    • 일반적으로 <100K for SLCs, 3K for MLCs, 1K for TLCs
    • wear-leveling을 하여 데이터 블록을 고르게 닳도록 하는게 필요하다.
      위 한계를 해결하기 위해 FTL 개념이 나온다.

3. Flash Translation Layer(FTL)

FTL은 NAND flash가 완벽하게 전통적인 디스크와 같은 전통적인 블록 장치들을 모방할수 있게 해주는 소프트웨어 계층이다. 그림을 보면 기존 파일 시스템에는 Erase 연산이 없지만 Flash Memory의 Device Driver에는 Erase연산을 포함한다. Read, Write 연산 또한 다르다. 따라서 파일 시스템과 Device Driver의 Mismatch가 발생하는 것을 FTL이 해결해준다. 즉, File System에서 HDD와 동일하게 동작하도록 emulate 해준다.

FTL의 기능에 대해 더 알아보자.

1. Address Mapping

flash page는 overwrite 될 수 없기 때문에 Address Mapping이 요구된다. 사진과 같이 Mapping Table에서 기존 데이터가 있는 한 위치에 새로운 값을 쓰면 현재 old data는 invalid되고 새로운 page에 값을 쓴 후 mapping한다.

2. Garbage Collection

Garbage Collection은 FTL의 성능을 결정하여 SSD의 성능을 결정한다.

  • Garbage collection(GC)
    • 결국 FTL은 쓰기 위한 블록이 부족해지게 된다.
    • GC가 free space를 다시 얻기 위해 수행되어야 한다.
    • 실제 GC의 과정은 mapping 방식에 따라 다르다.
  • Page-mapping FTL에서 GC
    • 삭제할 블록을 선택한다.
    • 모든 삭제할 블록의 valid page를 free block으로 복사한다.
    • 해당 블록을 지운다.
    • GC를 위해서 최소 하나의 free 블록은 존재해야한다.

4. OS와 SSD

NAND flash는 disk와 비교하여 다양한 특성을 가진다.

  • seek time이 없다.
  • 비대칭적인 read/write access times. read가 빠르다.
  • In-place-update가 안된다.
  • Sequential한 read/write와 random read에는 성능이 좋지만, random write에는 성능이 좋지 않다.
  • Wear-leveling이 필요하다. (특정 블록만 손상되어 용량이 줄지 않도록 leveling)

전통적인 OS는 HDD에 최적화 되어있다. 무엇이 바뀌어야 할까?

SSD에 대한 OS의 지원

  • 단편화 제거
  • 새로운 TRIM 명령어: 명시적으로 해당 page가 지워졌다는 것을 알림. 즉 delete된 page를 알려줘서 invalid시켜 GC의 후보로 넣으라는 명령어이다.
  • 간단한 I/O Scheduler: 스케줄링을 하지 않는게 가장 성능이 좋음
  • 파일 시스템을 SSD layout에 맞춤
  • Flash-aware file systems (e.g. F2Fs in Linux)
  • 더 큰 block size(4KB)
  • multi-stream inerface: 자주 업데이트 되는 page를 한 블록에 올려두는 것이 좋다. 모두 invalid page가 되면 해당 블록을 지우면 되기 때문에 GC할 때 page를 복사할 필요가 없게 된다.
    방법은 OS 또는 File System에서 활용할 수 있는 정보를 이용하여 multi stream으로 내려보낸다. (동영상과 같은 파일은 자주 업데이트가 되지 않을 것이다.) 0번 stream, 1번 stream과 같이 hot과 cold를 분류해서 보내준다. 받은 정보를 이용하여 SSD가 별도의 블록에 저장한다.

다음에는 파일 시스템에 대해 알아보겠습니다.
profile
공부하고 정리하는 블로그

0개의 댓글