AngelPlayer`s Diary

SSD는 Flash Memory를 기반으로한 저장 매체

SSD는 모든 컴포넌트가 전기 장치, HDD처럼 기계 장치를 가지고 있지 않음

 

비트들은 Floating-Gate-Transistor로 구성된 셀에 저장

Floating-Gate-Transistor에 전압이 가해지면서 셀의 비트가 쓰여지거나 읽혀지게 됨

 

 

트랜지스터 - NOR, NAND 두 가지가 있으며, 대부분 SSD가 NAND를 채택

 

NAND 플래시 메모리 모듈의 속성

- 수명이 제한적 (Wearing-off) : 트랜지스터는 셀에 전자를 저장하면서 쓰기 작업을 진행하며, 매 P/E(Program & Erase)  사이클마다 일부 전자가 오류로 인해 트랜지스터에 갇힘 -> 일정 수준을 넘어가면 해당 셀은 사용 불가

수명 제한은 메모리의 타입(SLC, MLC, TLC)에 따라 차이가 있음

 

 

 

SSD의 메모리 셀 타입

- SLC (Single level cell) : SLC 트랜지스터는 단 하나의 비트만 저장, 상대적으로 긴 수명

- MLC (Multiple level cell) : MLC 트랜지스터는 2비트를 저장 가능, 상대적으로 레이턴시(응답속도)가 높고 짧은 수명

- TLC (Triple-level cell) : TLC 트랜지스터는 3비트를 저장 가능, 상대적으로 레이턴시(응답속도)가 높고 짧은 수명

 

 

 

SSD에 사용자의 요청은 호스트 인터페이스를 통해 유입되며, ATA(SATA)와 PCI Express(PCIe) 두 가지 타입 + (SAS  (Serial Attached SCSI) - 엔터프라이즈용)

SSD 내장 메모리(RAM)은 매핑 정보 저장 & 캐시 용도로 사용

 

 

삼성 840 Pro SSD (512GB)

SATA 3.0 인터페이스
SSD 컨트롤러 (삼성 MDX S4LN021X01-8030)
RAM 모듈 (256 MB DDR2 삼성 K4P4G324EB-FGC2)
8 MLC NAND-플래시 모듈, 각 모듈은 64 GB (삼성 K9PHGY8U7A-CCK0) -> 8 * 64 == 512

 

 

 

호스트 인터페이스는 성능을 결정하는 중요 요소

SATA 3.0 인터페이스는 6 Gbit/s 정도의 데이터 전송량을 낼 수 있으며, 초당 550MB 정도의 성능

PCIe 3.0 인터페이스에서는 레인(lane)당 8 GT/s(Gigatransfers/second) ->1GB/s 정도 성능

-> 이론상 4개의 레인을 가진 SSD는 SATA 인터페이스보다 8배 빠른 전송 속도를 낼 수 있음 

 

 

 

프리 컨디셔닝 (Pre-Conditioning) - 쓰기 부하를 발생

SSD는 지속적인 랜덤 쓰기가 발생하는 테스트 환경에서 성능 저하를 보여줌

스루풋 감소, 레이턴시 증가

SSD가 보여줄 수 있는 최악의 상황을 만들어 내기 위해서 프리 컨디셔닝을 사용

 

 

시스템마다 워크로드가 다르므로, 실제 대상 서비스의 워크로드에 따라서 최상의 SSD는 달라질 수 있음

-> 인 하우스 벤치마킹도구로 테스트

 

 

 

성능 벤치마크 파라미터 개요

- 워크로드 타입 : (ex. 랜덤 쓰기만 테스트) 

- 읽기와 쓰기를 적정 퍼센트로 배분하여 동시에 읽기, 쓰기 부하 발생 (ex. 30%읽기, 70%쓰기)

- Queue Length : SSD 드라이버로 읽고 쓰기 명령을 전송하는 동시 쓰레드 개수

- 접근(읽고 쓰기)하는 데이터 청크 크기 (4kb, 8kb, etc..)

- 스루풋(Throughput) : 전송속도 (KB/s or MB/s 주로 사용)

- IOPS : 초당 읽고 쓰기 회수, 각 읽고 쓰기 오퍼레이션은 동일한 데이터 청크 크기를 사용

- 레이턴시(Latency) : 입출력 명령이 전달된 후 응답 받기까지의 시간 (μs or ms 사용)

 

 

4KB 청크에 대해서 초당 1000IOPS를 처리함

스루풋으로 계산시 -> 1000 * 4096 = 4MB/s

-> 청크 Size * IOPS == Throughput

 

 

스루풋이 높다고 무조건 빠른 시스템은 아님 (커넥션의 레이턴시 등)

 

 

 

 

 

 

 

- 참고 자료 - 

 

개발자를 위한 SSD (Coding for SSD)

tech.kakao.com/2016/07/14/coding-for-ssd-part-2/

 

Write amplification (쓰기 증폭)

en.wikipedia.org/wiki/Write_amplification

공유하기

facebook twitter kakaoTalk kakaostory naver band