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 (쓰기 증폭)
A survey of Flash Translation Layer (2021-02-11) (0) | 2021.02.11 |
---|---|
A survey of Flash Translation Layer (2021-02-09) (0) | 2021.02.09 |
A survey of Flash Translation Layer (2021-02-08) (0) | 2021.02.08 |
A survey of Flash Translation Layer (2021-02-07) (0) | 2021.02.07 |
Coding for SSD (2021-02-04) (0) | 2021.02.04 |