0. 학습의도
HDD와 SSD의 순차 I/O 시간은 거의 비슷하다는 말 자체가 이해가 되지 않았다. 전기적 접근이 이루어지는 SSD가 HDD보다 당연히 모든 면에서 월등해야 하는 것 아닌가?? 해당 물음에 답하기 위해 먼저 HDD와 SSD의 작동원리에 대하여 살펴보았다.
1. HDD에 대하여
(1) 구성요소
Platter(플레터)
- 데이터를 저장하는 원형 자기(magnetic) 디스크
실제 데이터를 뜻하는 자성물질들로 외부가 코팅되어 있음.
- 데이터를 저장하는 원형 자기(magnetic) 디스크
Spindle(스핀들)
- 모든 플레터를 관통 및 고정하고 회전시키는 축
- 플레터를 회전시켜서 arm이 사용자가 원했던 데이터가 있는 섹터를 읽을 수 있도록 하는 역할
Track(트랙)
- 플래터 위에 동심원 모양으로 배열된 데이터의 저장 단위
- 하나의 플래터에 수천 ~ 수만 개의 트랙이 존재
Sector
- 트랙을 여러개의 부채꼴로 나눈 가장 작은 데이터 저장 단위
- 보통 1섹터 = 512 byte ~ 4096 byte 저장
- 실제 읽기와 쓰기 작업은 이 섹터 단위로 이루어진다.
- 바깥 동심원의 트랙이 섹터가 상대적으로 더 많고, 안쪽 동심원의 트랙이 섹터가 상대적으로 적다.
Read-Write Head
- 플레터 표면에 데이터를 읽거나 쓰는 자기 센서
- Read 시: 자기장으로, 섹터내의 자성물질들을 감지
- write 시: 자기장으로 자성물질들을 변화시켜서 기록
- 플래터와 직접 접촉하지 않고 공기압으로 뜬 채로 자성만으로 read or write
(2) 데이터를 읽는 과정 (공통)
순차 I/O, 랜덤 I/O 상관없이 공통적으로 거치는 과정에 초점을 맞추어 설명
I/O 요청 도착
- OS 또는 DBMS가 파일 혹은 블록을 읽기 위해 디스크에 read system call 호출
- 디스크 스케줄러(I/O 큐)에 요청 등록
LBA ➜ 물리주소 변환
- LBA(Logical Block Adress)를 플래터 번호, 트랙 번호, 섹터 번호로 매핑
- 디스크의 펌웨어 혹은 컨트롤러가 이 매핑 과정을 수행한다.
헤드 이동
- read/write header를 원하는 트랙 위치로 옮긴다.
- 이때 걸리는 시간을 Seek Time 이라고 한다.
(거리가 가까운 트랙이면 ms의 시간, 멀 경우 초단위로 걸릴 수 있음 /가장 오래 걸림)
플래터 회전
- 디스크가 회전하면서, 원하는 섹터가 헤드 아래 올 때까지 기다림
- 이떄 걸리는 시간을 Rotational Latency 회전 시간이라고 함.
(회전 속도가 7200RPM이면 8.3ms, 평균적으로 4.15ms)
데이터 읽기
- Read-Write Header가 섹터에서 데이터를 읽기 혹은 데이터 조작 과정을 완료하고, 반환해야할 데이터를 디스크 캐시에 저장한다.
- 이때 걸리는 시간을 Transfer Time이라고 한다.
데이터 전송
- 디스크 캐시에서 SATA 혹은 SAS 인터페이스를 통해 메모리를 전송
OS/ 응용 계층에 전달
- 커널의 페이지 캐시 등을 거쳐, 사용자 프로세스에 데이터가 전달됨.
(3) 소결
평균 ns 레벨의 속도를 보여주는 메인보드의 연산 작용 및 메모리 read/write와 달리 기계식 디스크인 HDD를 사용하면, 물리적인 움직임에 따라서 ms ~ s 단위의 시간이 든다. 따라서 디스크 I/O 자체가 병목이 된다.
2. SSD에 대하여
(1) 나온 이유
A. HDD의 최대 병목은 물리적인 지연이라 극복 불가
- HDD의 최대 병목인 SEEK TIME (헤드 이동 시간), Rotational Latency(회전 지연)으로 인해 데이터 하나 읽는데 평균 10ms ~15ms가 걸린다.
- 데이터 하나 읽기가 이 정도인데, 수만 건의 랜덤 read가 발생하는 DB나 OS, 웹서버에서는 사용자에게 데이터가 제공되기 까지 수초가 걸릴 수도 있다.
- 해당 시간 지연은 디스크가 어느 트랙, 어느 섹터에 데이터를 저장했는가에 따라 생기는 물리적인 것이라 극복 불가!
B. 병렬성에 대한 수요 증가
- 소프트웨어 발전으로 여러 데이터를 한 번에 읽어오는 병렬 접근에 대한 수요가 커짐
(2) 구성 요소
NAND Flash Memory
- 비휘발성 저장소 (전원 꺼져도 데이터 유지)
- 하드웨어적 구성요소 = 셀: 전자를 저장하는 트랜지스터 구조
- 논리적 구성요소
- Channel: 컨트롤러와 Package 사이를 잇는 통신선
- Package: 데이터를 나누는 가장 큰 단위
- Die: 패키지 내의 데이터 영역을 나누는 단위
- Plaine: Die 내부를 나누는 단위
- Block: 여러 페이지들의 집합 (보통 128 ~ 512 Page로 이루어져 있다. HDD의 Track에 해당)
- Page: 가장 작은 읽기/쓰기 단위 (보통 4KB, HDD의 섹터에 해당)
├── Channel (채널) ← 병렬 데이터 통신 라인 │ ├── Package (NAND 패키지) │ │ ├── Die (다이) ← 실제 실리콘 칩. 독립 동작 가능 │ │ │ ├── Plane (평면) ← 병렬 액세스 가능한 하위 단위 │ │ │ │ ├── Block ← 지우기 단위 (128~512 Page) │ │ │ │ │ └── Page ← 읽기/쓰기 단위 (보통 4KB)
Controller
- SSD의 두뇌, 모든 동작을 지휘
- 역할:
- 논리 주소(LBA) ➜ 물리 주소 매핑(FTL 처리)
- 쓰기 균형화 (Wear Leveling)
- 가비지 컬렉션 (GC)
- ECC (오류 정정)
- 캐시 관리
- 인터페이스 (SATA 등)의 신호 처리
FTL (Flash Translation Layer)
- 논리주소와 물리적인 플래시 메모리 주소가 연결되어 있는 추상계층
(함수와 <논리주소, 물리주소>가 연결된 MAP으로 세부 구성됨) - 위치: 보통 컨트롤러 내부에 포함되며 DRAM에 자신의 테이블을 유지하고 있다.
- 역할
- OS가 넘겨준 LBA 주소를 NAND의 Page/Block 주소로 변환
- 페이지 매핑, 블록 매핑, 하이브리드 매핑 등 알고리즘이 내부에 존재하며 이것을 이용
- 논리주소와 물리적인 플래시 메모리 주소가 연결되어 있는 추상계층
(3) 데이터를 읽는 과정
I/O 요청이 도착
- OS 또느 DBMS에서 read System call을 발생시켜서 SSD 드라이버로 전달
- SATA 등의 인터페이스를 통해 컨트롤러에 요청
논리 주소 ➜ 물리 주소 변환 (FTL 매핑)
- 요청한 LBA 주소를 실제 플래시 메모리의 페이지 위치로 변환
- 이 매핑 작업은 SSD 내부의 FTL(Flash Translation Layer)가 처리 한다.
- 페이지 매핑, 블록매핑, 하이브리드 매핑 중 하나의 방법 채택
- 매핑 후 그 결과를 DRAM 캐시의 FTL 테이블에 저장
NAND 메모리 접근
- 매핑된 Page 단위 위치로 접근
- 전기식 접근임으로 병렬 읽기가 가능해짐 (HDD는 물리적인 접근이라 한 번에 하나의 데이터만 가능함)
데이터 읽기
- 한 페이지(보통 4KB ~ 16KB)를 읽어서 SSD DRAM 캐시 또는 버퍼에 적재
데이터 전송
- SSD 캐시에서 데이터 읽기를 요청했던 메인보드(혹은 서버)의 OS 메모리로 데이터 전송
OS/ 응용 계층에 전달
- 메인보드 혹은 서버의 OS가 커널 레벨에 적재된 데이터를 사용자 공간으로 전달
모르는 단어 정리
SATA
,SAS
: 저장장치와 메인보드(컴퓨터 혹은 서버)가 어떻게 데이터를 주고받을지에 대한 전송 규격
SATA는 일반 소비자용, SAS는 데이터 센터, 고성능 서버 등 기업용DAS
,SAN
: 둘 다 저장소(Storage)의 아키텍처임- DAS: 저장 장치가 직접 서버나 컴퓨터에 물리적으로 연결되어 있는 저장소 아키텍처
- SAN: 전용 스토리지 네트워크를 통해 여러 서버가 공유 스토리지를 사용할 수 있게 만드는 아키텍처
0