반도체 메모리에 데이터를 저장하는 SSD는 읽기 및 쓰기 속도와 충격 내성이 HDD보다 우수합니다. 그런 SSD의 구조와 특성에 대해 데이터 시스템 연구가 피터 본치 씨 연구팀이 설명합니다.

Database Architects: What Every Programmer Should Know About SSDs
https://databasearchitects.blogspot.com/2021/06/what-every-programmer-should-know-about.html


HDD에 랜덤 액세스 하려면, 자기헤드를 자기디스크의 올바른 위치에 물리적으로 이동시킬 필요가 있으며, 이 동작에는 10밀리 초 정도 걸립니다. 반면 SSD의 랜덤 액세스는 플래시메모리에서 이루어지므로 100분의 1 정도의 시간으로 충분합니다.

SSD는 큰 파일을 덩어리 그대로 저장하는 것이 아니라 내부에서 저장소의 최소 단위로 분리하여 여러 플래시칩에 저장되며, 그리고 순차 액세스로 모든 플래시칩을 사용할 수 있도록 하드웨어 프리페처(Hardware Prefetcher)가 갖추어져 있습니다. 하지만 플래시칩 단독으로 볼 경우에도 순차적 액세스 및 랜덤 액세스에서 큰 차이가 있는 것은 아니고, 대부분의 SSD가 랜덤 액세스에서 최고속도를 달성할 수 있습니다. 이렇게는 모든 플래시칩을 바쁘게 작동시키기 위해서는 수백 개의 랜덤 IO요청을 동시에 관리해야 하는데, 이에 다수의 스레드를 기동하거나 libaio 등의 비동기 I/O 인터페이스를 사용하여 실현할 수 있다고 합니다.

HDD와 SSD의 또 하나의 차이로는, HDD는 하나의 자기헤드나 자기디스크로 읽거나 쓰기 때문에 순차 액세스에서만 잘 작동하는 반면, SSD는 수십 또는 수백 개의 플래시메모리칩을 사용하여 병렬 액세스를 하기 때문에 두 가지 접근방법 모두에서 잘 작동한다는 점입니다.

SSD의 쓰기속도는 읽기속도보다 10배 정도 느린 약 1ms 정도 소요된다고 합니다. 컨슈머 SSD는 쓰기 후 sync/flush 명령을 실행하여 지연시간을 측정할 수 있습니다. 쓰기의 높은 지연을 보완해 높은 쓰기 대역폭을 실현하기 위해 쓰기도 읽기 때처럼 여러 플래시칩에 동시에 액세스하는 구조를 이용합니다. 쓰기 캐시는 비동기적으로 페이지를 쓸 수 있기 때문에 좋은 성능을 얻기 위해 동시에 많은 기록을 관리할 필요가 없습니다. 그러나 쓰기는 읽기보다 10배나 긴 시간 플래시칩을 차지하기 때문에 대기시간을 완전히 제거할 수는 없습니다.

SSD는 매우 저렴한 고성능으로 진화하고 있습니다. 분치 씨 연구팀은 어떻게 성능을 실현하고 있는지에 대한 자세한 튜토리얼도 소개하고 있습니다.

Posted by 말총머리
,