[공룡책] 대용량 저장장치 구조

이 글에서는 컴퓨터의 비휘발성 저장장치 시스템인 대용량 저장장치가 어떻게 구성되어 있는지 설명합니다. 최신 컴퓨터의 대용량 저장장치 시스템은 보조저장장치이며 일반적으로 HDD 및 NVM 장치를 사용하여 제공됩니다.

NVM

  • Nonvolatile Memory Devices, 비휘발성 메모리 장치
  • 기계식이 아니며 전기식이다.
  • SSD(solid-state disk)
  • 형태와 상관없이 같은 방식으로 작동하고 취급될 수 있다.

장단점

  • 부품이 없으므로 안정성이 높다.
  • 탐색시간이나 회전 지연시간이 없으므로 빠르고 전력 소비량이 적다.
  • 가격이 비싸고 용량이 적다는 단점이 있다.
  • 하지만 용량의 증가와 가격의 하락이 빠르게 이뤄지기 때문에 사용량이 증가하고 있다.

GC

SSD가 가득 찬 상황을 가정해 보겠습니다.

SSD의 모든페이지가 기록되어 있습니다. 그 중 유효하지 않은 데이터만 포함하는 블록이 있을 수 있습니다. 이 경우 쓰기는 지우기가 발생할 때까지 기다린 다음 수행될 수 있습니다.

사용가능한 블록이 없다면 어떻게 해야할까요? 유효하지 않은 데이터가 있으면 여전히 사용 가능한 공간이 있을 수 있습니다. 이 때 GC가 발생할 수 있습니다.

GC가 유효 데이터를 옮깁니다. 하지만 어디에 옮겨야 할지는 결정하지 못했습니다. 이 문제를 해결하기 위해 NVM은 over-provisioning을 사용합니다.

과잉공급(over-provisioning)

장치는 언제나 쓸 수 있도록 다수 페이지를 따로 준비합니다.

무효화된 블록은 장치가 꽉 찼을 경우 과잉공급공간에 배치됩니다.

그렇지 않은 경우에는 삭제되어 가용풀로 되돌아갑니다.

마모 평준화(wear leveling)

과잉공급공간은 마모 평준화에도 도움이 됩니다.

자주 지워지는 블록은 빨리 마모됩니다.

다양한 알고리즘을 사용해 삭제 횟수가 적은 블록에 데이터를 배치합니다.

Disk Scheduling

FCFS

SCAN

디스크암이 디스크의 한 끝에서 시작해 다른 끝으로 이동하여 가는길에 있는 요청을 모두 처리합니다.

헤드는 디스크 양쪽을 왕복합니다. 엘리베이터 알고리즘이라고도 부릅니다.

모든 실린더에 요청이 균일하게 도착한다면 헤드가 끝에 도달했을 때 반대편에 요청이 몰릴 것입니다.

따라서 반대쪽부터 서비스를 시작하는 왕복 방식을 채택했습니다.

C-SCAN

각 요청에 걸리는 시간을 균등하게 하기 위한 변형입니다.

SCAN의 왕복과 다르게 편도를 여러번 이동합니다.

총평

두 방식 모두 starvation의 가능성이 작습니다.

그래도 starvation이 발생할 수 있기 때문에 리눅스는 데드라인 스케줄러를 만들었습니다.

읽기와 쓰기별로 큐를 유지관리하며 읽기 연산에 높은 우선순위를 줍니다.

대기열은 LBA 순서로 정렬되어 기본적으로 C-SCAN을 구현합니다.

이러한 디스크 스케줄링 알고리즘은 HDD마냥 기계식 플래터기반 저장장치에 적용됩니다.

헤드 이동량을 최소화하는데 중점을 둡니다.

NVM Scheduling

NVM은 디스크 헤드가 없으며 일반적으로 FCFS 정책을 사용합니다.

HDD의 성능은 장치 수명동안 일관되지만 NVM은 얼마나 마모되었는지에 따라 달라집니다.

NVM의 수명과 성능을 향상시키기 위해서는

파일이 삭제될 때 파일시스템이 장치에 알리도록해 해당 파일이 저장된 블록을 지울 수 있도록 하는 것입니다.

하나의 연산은 페이지 쓰기, 페이지 읽기(GC에 의해), 페이지 쓰기(GC에서 수집된 유효 데이터)가 발생합니다.

프로그램이 아닌 NVM장치에 의한 I/O요청 생성을 쓰기 증폭(write amplication) 이라고 하며 성능에 큰 영향을 줄 수 있습니다.

References


Written by@Cha-Ji
Android developer

InstagramGitHub