SSD는 NAND Flash와 컨트롤러, 펌웨어, 전원 관리 회로로 이루어지고 여기에 DRAM 캐시가 붙기도 한다. 운영체제는 논리 블록 주소만 보지만 실제 데이터는 NAND의 특정 페이지에 흩어져 저장된다. 그 사이를 이어 주는 것이 Flash Translation Layer(FTL)다. FTL은 논리 주소를 물리 위치에 연결하고, 어디에 얼마나 썼는지를 관리해 수명을 나눠 쓴다.
구성 요소
- NAND Flash
- 데이터를 저장하는 매체
- 컨트롤러
- FTL, 가비지 컬렉션, Wear Leveling, ECC
- 펌웨어
- 쓰기 위치와 수명 관리 정책
- DRAM 캐시
- 주소 매핑과 캐시. 일부 DRAM-less NVMe 모델은 HMB를 지원
- SLC Cache
- 일부 영역을 1비트 모드로 돌려 짧은 쓰기를 가속
컨트롤러·NAND·캐시와 호스트 인터페이스의 SSD 구성.
NAND는 같은 자리에 다시 덮어쓸 수 없다. 페이지 단위로 기록하고 그보다 큰 블록 단위로 지우기 때문에, 이미 쓴 블록을 고치려면 유효한 데이터를 다른 곳으로 옮겨야 한다. 이 과정에서 실제 기록량이 사용자가 쓴 양보다 늘어나는 쓰기 증폭이 생긴다. 가비지 컬렉션이 그 뒤처리를 맡고, Wear Leveling은 쓰기를 여러 블록에 고르게 분산한다. 셀이 늙으면서 생기는 비트 오류는 오류 정정 코드로 보정한다.
DRAM은 주소 매핑 정보와 캐시를 담는 데 쓰인다. HMB를 지원하는 DRAM-less NVMe SSD는 호스트 드라이버와 협력해 시스템 메모리 일부를 주소 매핑 등에 활용할 수 있다. DRAM이 없다는 사실만으로 HMB 지원이 보장되는 것은 아니며, SATA SSD에 NVMe의 HMB 기능을 그대로 적용할 수 없다. SLC Cache는 TLC나 QLC 영역 일부를 1비트 모드로 돌려 짧은 쓰기를 빠르게 처리한다. 캐시가 차고 나면 지속 쓰기 속도는 NAND 자체의 속도와 병렬성에 좌우된다. 그래서 캐시가 살아 있을 때의 벤치마크만 보면 실제 사용을 잘못 판단하게 된다.
TRIM과 빈 공간의 역할
파일을 삭제해도 운영체제의 논리 주소와 NAND의 실제 상태가 즉시 같아지는 것은 아니다. TRIM 또는 Deallocate는 더 이상 보존할 필요가 없는 논리 범위를 드라이브에 알려 준다. 컨트롤러는 이후 가비지 컬렉션에서 그 데이터를 옮기지 않아도 되므로 불필요한 내부 쓰기를 줄일 수 있다.
빈 공간이 넉넉하면 유효 페이지를 덜 옮기고 새 쓰기를 배치할 여지가 커진다. 반대로 공간이 거의 찬 상태의 잦은 재기록은 내부 정리와 사용자 쓰기가 경쟁하기 쉽다. TRIM은 즉시 모든 셀을 지우거나 보안 삭제를 보장하는 명령이 아니며, 데이터 폐기는 저장장치 데이터 보존의 별도 문제다.
관련: NAND Flash, SSD 성능과 수명, M.2와 NVMe

Samsung 860 EVO 250 GB 2.5인치 SATA SSD의 분해 모습. 케이스와 작은 내부 기판을 함께 볼 수 있다. 사진에 보이는 면만으로 모든 부품의 위치를 판단할 수는 없다.
이미지: Grumbler eburg / Wikimedia Commons, CC BY-SA 4.0. 원본 변경 없음.