컴퓨터의 메인버스에 직접 연결되는 주기억장치는 지연속도 및 처리량이 우수한 반면 작은 용량이라는 문제를 안고 있습니다. 용량 문제를 해소하기 위해서는 HDD나 SSD 등의 보조기억장치를 사용해야 하는데, 이 때 고려해야 할 '지연속도'에 대해 엔지니어인 루슬란 서프첸코 씨가 HDD · SATA SSD · NVMe SSD · Optane SSD의 조사결과를 설명합니다.

A journey to io_uring, AIO and modern storage devices
https://clickhoμse.tech/blog/en/2021/reading-from-external-memory/

보조기억장치는 호스트 측과 데이터 교환을 할 때 1바이트 단위가 아닌 데이터를 한 덩어리로 처리한 '블록'이라는 단위로 입출력을 실시합니다. 어떤 크기를 하나의 블록으로 취급할지는 제조사에 따라 다양하며 경우에 따라서는 수년 동안 사용해온 블록 크기의 업데이트를 게을리한 결과, 최신 장비에서는 부적격인 블록을 설정하고 있는 업체도 존재한다고 합니다.

이번에 서프첸코 씨는 HDD나 SSD 등의 '최적의 블록 크기'의 계산을 시도했습니다. 서프첸코 씨는 각각의 보조기억장치에 4KB ~ 16MB의 블록을 무작위 읽기시켜 그 때의 액세스 시간 지연에 대해 MAX(최대), P99.9(99.9퍼센트), P99(99퍼센트), AVG(평균), MIN(최소)이라는 5가지 측정을 시도했습니다.

HDD의 결과가 아래와 같습니다. 가로축이 블록 크기, 세로축은 초 단위 지연속도, 그래프 자체는 양대수 그래프입니다.


HDD의 특징으로는 '256KB 이하의 블록 크기는 지연속도가 거의 변하지 않는다'는 점을 들 수 있습니다. 이 점에 대해 서프첸코 씨는 "데이터 전송시간보다 탐색시간이 훨씬 크기 때문"이라고 설명합니다. 읽거나 쓸 때 자기헤드가 디스크의 목적 트랙으로 이동하는 '탐색'이 블록 크기에 관계없이 일정하기 때문입니다. 서프첸코 씨는 "HDD의 경우에는 적어도 256KB 이상의 블록 크기를 사용한다. 그러나 256KB에서는 지연시간의 편차가 너무 크다"고 결론을 내렸습니다.

SATA SSD의 결과는 아래와 같습니다.


지연시간은 HDD가 달성할 수 없었던 'μs(마이크로초)'단위까지 도달했고 4KB의 최소 지연시간은 불과 140μs. 블록 크기와 지연속도가 거의 일관되게 정비례하고 있다는 점도 특징입니다. 서프첸코 씨는 위의 HDD의 결과를 인용해 "SATA SSD는 HDD에 비해 블록 크기 256KB에서 10배 빠르지만, 블록 크기가 충분히 큰(4MB 이상) 경우에는 2배 정도 빠르다"고 설명합니다.

NVMe SSD의 결과는 아래와 같습니다.


HDD에 비해 상당한 개선을 보여주었던 SATA SSD를 상회하는 결과인데, 서프첸코 씨는 4KB 블록 크기에서 SATA SSD와 NVMe SSD를 비교했을 때는 평균 지연속도가 거의 동등하지만 NVMe SSD가 99퍼센트가 2배 빠른 속도인 점이나 1MB의 블록 크기에서 NVMe SSD는 어떤 결과에서도 1ms를 밑도는 반면, SATA SSD는 3ms를 초과하는 점을 지적합니다. 그러나 "HDD에서 보인 SATA SSD 정도의 비약은 아니다"라고 평가합니다.

Optane SSD의 결과는 아래와 같습니다.


4KB의 최소 지연시간은 불과 12μs로 NVMe SSD의 약 10배, HDD의 1000배 빠르다는 경이적인 결과입니다. 그러나 최대 지연속도와 99퍼센트 지연속도가 최소 지연속도와 평균 지연시간에 비해 크게 나빠 "변덕이 매우 크다"고 서프첸코 씨는 평가합니다.

또한 Optane SSD에 관해서는 '지연이 매우 작은 경우에는 폴링모드가 유효하다며 폴링모드시의 지연시간도 측정했습니다.


'256KB 블록 크기에서 최대 지연시간이 반 토막이 났다'고 서프첸코 씨는 설명합니다.

위의 결과에 대해 HDD · SATA SSD · NVMe SSD · Optane SSD의 결과를 한눈에 볼 수 있게 한 것이 아래의 그래프입니다.


어느 규격과 블록 크기에서도 'SSD가 HDD보다 지연에 관해서는 뛰어나다'는 점은 분명합니다. 무작위 읽기에 최적의 블록 크기는 'HDD가 256KB, SATA SSD와 NVMe SSD는 4KB, Optane SSD는 8KB'라는 결론입니다.

Posted by 말총머리
,