SSD VPS란? 플래시 스토리지와 IOPS 설명
SSD VPS는 회전식 디스크가 아닌 플래시 기반 가상 서버입니다. SSD가 제공하는 IOPS와 낮은 지연 시간의 의미, 구매 전 확인할 3가지 질문과 실제 성능 차이를 설명합니다.
SSD VPS란 무엇인가?
SSD VPS는 회전식 하드 디스크 대신 플래시 메모리를 사용하는 디스크 기반의 가상 사설 서버입니다. SSD는 solid state drive의 약어입니다. 내부에 움직이는 부품이 없고 NAND 플래시 칩으로 구성된 스토리지입니다. VPS는 virtual private server의 약어입니다. 물리적 호스트 시스템을 격리된 여러 조각으로 나누고, 각 조각에서 자체 운영 체제를 실행하여 전체 서버처럼 제공하는 방식입니다. 두 개념을 합치면 이 이름은 한 가지를 의미합니다. 서버가 데이터 블록을 읽을 때 먼저 기계 부품이 움직일 필요가 없습니다.
정의는 이것이 전부입니다. 아래에서는 이 이름이 설명하지 않는 내용을 다룹니다. 가격 페이지의 "SSD hosting"이라는 문구만으로는 그 뒤에 있는 스토리지 어레이에 대해 알 수 있는 내용이 거의 없기 때문입니다.
VPS가 일반적인 가상 머신과 어떻게 다른지 아직 확인하는 중이라면 VPS, VM, VPC의 차이를 먼저 읽는 편이 좋습니다.
호스트가 스토리지 용량보다 스토리지 속도를 광고하는 이유
요금제 페이지에는 CPU 코어 수, 메모리, 디스크 크기, 대역폭이 나열되어 있습니다. 그런 다음 크기와는 전혀 관계없는 디스크 관련 항목을 하나 추가합니다. 호스트가 이렇게 하는 이유는 스토리지에서 용량이 중요한 수치였던 시기가 이미 오래전에 지났기 때문입니다. 서버의 체감 성능을 결정하는 두 수치는 IOPS(초당 입출력 작업 수)와 지연 시간(하나의 작업 결과가 돌아오는 데 걸리는 시간)입니다.
그 이유는 장치의 기계적 차이에 있습니다. 하드 디스크는 회전하는 플래터에 데이터를 저장하고, 움직이는 암에 달린 헤드로 데이터를 읽습니다. 플래터의 다른 위치에 있는 블록에 접근하려면 암이 탐색해야 합니다. 그런 다음 올바른 섹터가 헤드 아래에 올 때까지 디스크가 회전해야 합니다. 7200 rpm에서는 반 바퀴에 평균 약 4 ms가 걸리고, 여기에 탐색 시간이 몇 ms 더해집니다. Flash에는 암과 플래터가 없으므로 전기적 조회로 읽으며, 수십 마이크로초 안에 결과를 반환합니다.
The data behind this chart
[
{
"device": "7200 rpm hard disk",
"random_read_iops": "125",
"read_latency_ms": 8
},
{
"device": "SATA SSD",
"random_read_iops": "90,000",
"read_latency_ms": 0.15
},
{
"device": "NVMe SSD",
"random_read_iops": "600,000",
"read_latency_ms": 0.08
}
]7200 rpm 하드 디스크의 정격 성능은 초당 약 125회의 무작위 4k 읽기입니다. 이 읽기 하나가 반환되는 데는 약 8 ms가 걸립니다. NVMe 드라이브는 동일한 읽기를 약 600,000회 처리하는 정격 성능을 보이며, 각 읽기에는 약 0.08 ms가 걸립니다. 두 장치의 중간에 해당하는 SATA SSD의 정격 성능은 약 90,000입니다. 이 수치는 백분율 향상률이 아니라 자릿수 차이로 보아야 합니다.
이 데이터에는 두 가지 주의할 점이 있습니다. 이 수치는 각 장치 유형의 전체 드라이브를 대상으로 공개된 사양입니다. 따라서 VPS에서 직접 측정한 값이 아니라 제조업체의 사양서에 기재된 수치입니다. 또한 전체 드라이브를 사용할 수는 없습니다. 사용자의 볼륨은 하나의 장치 또는 하나의 어레이를 다른 고객과 함께 사용하는 공유 영역입니다.
두 열은 서로 다른 질문에 답하므로 함께 읽어야 합니다. 지연 시간은 하나의 작업을 처리하기 위해 기다리는 시간입니다. IOPS는 드라이브가 동시에 처리할 수 있는 작업 수입니다. Flash가 높은 IOPS 수치를 내는 이유는 병렬 처리에 있습니다. 여러 Flash 칩이 동시에 여러 요청에 응답하고, 깊은 큐가 칩을 계속 바쁘게 유지합니다. 하나의 스레드에서 실행되는 프로그램이 읽기 하나를 요청하고 결과를 기다린 다음 다음 읽기를 요청하는 방식이라면 차트의 최고 수치를 볼 수 없습니다. 이런 프로그램에는 지연 시간 열이 적용됩니다.
SSD, NVMe, SATA 및 PCIe: 서로 다른 4개 계층의 용어
각 용어가 시스템의 서로 다른 부분을 설명하기 때문에 구매자는 이 용어들을 혼동합니다.
- SSD는 저장 매체입니다. 데이터가 자기 플래터가 아니라 NAND 플래시 칩에 저장된다는 의미입니다.
- SATA는 기계식 디스크 시대에 설계된 인터페이스입니다. 최대 속도는 6 Gbit/s이며, 실제 처리량은 약 550 MB/s입니다. 명령 큐에는 처리 대기 중인 명령을 32개까지 저장할 수 있습니다.
- NVMe(non-volatile memory express)는 플래시를 위해 특별히 작성된 프로토콜입니다. 각각 수천 개의 명령을 저장할 수 있는 큐를 여러 개 지원합니다. 따라서 여러 CPU 코어가 하나의 좁은 큐를 공유하지 않고 동시에 드라이브와 통신할 수 있습니다.
- PCIe(peripheral component interconnect express)는 NVMe가 사용하는 버스입니다. 그래픽 카드가 연결되는 레인과 같은 유형입니다.
따라서 SATA SSD와 NVMe SSD는 모두 플래시에 데이터를 저장합니다. 두 제품은 사용하는 인터페이스가 다릅니다. SATA SSD는 여전히 모든 하드 디스크보다 훨씬 빠릅니다. 그러나 32개 명령 큐로 인해 병렬 작업을 처리하는 능력이 제한됩니다. 플래시는 바로 이러한 병렬 작업에 강합니다. 어느 제품에 비용을 지불할 가치가 있는지는 워크로드에 따라 달라지며, NVMe와 SATA SSD 중 선택하기에서 이 문제를 자세히 설명합니다.
로컬 플래시 또는 네트워크 연결 스토리지?
서로 매우 다른 2가지 구성이 같은 이름으로 판매됩니다.
로컬 스토리지는 플래시 드라이브가 VPS와 동일한 물리적 호스트 내부에 있다는 의미입니다. 요청은 한 시스템 내부의 PCIe를 통해 이동한 후 바로 반환됩니다. 따라서 지연 시간이 수십 마이크로초 수준으로 유지됩니다.
네트워크 연결 스토리지는 가상 디스크가 별도의 스토리지 클러스터에 있다는 의미입니다. 이 클러스터는 일반적으로 Ceph 또는 SAN(storage area network)입니다. 모든 읽기 및 쓰기 작업은 스토리지에 도달하기 위해 네트워크를 거칩니다. 공급자는 보통 이를 "cloud block storage" 또는 "elastic volumes"라고 부릅니다. 플래시 자체는 실제입니다. 네트워크를 통한 왕복도 실제로 발생합니다. 이 왕복 시간이 모든 작업에 추가되므로 지연 시간은 수십 마이크로초가 아니라 수백 마이크로초 후반 또는 수 밀리초 수준이 됩니다.
어느 쪽도 잘못된 선택은 아닙니다. 네트워크 스토리지는 호스트 장애에도 유지됩니다. 데이터가 해당 호스트에만 저장된 것이 아니기 때문입니다. 공급자는 다른 하드웨어에서 서버를 시작할 수 있고, 디스크도 서버를 따라 이동합니다. 로컬 NVMe는 더 빠르지만 하나의 물리적 시스템에 연결됩니다. 따라서 해당 하드웨어에 장애가 발생하면 백업에서 복원해야 합니다. 사용 중인 플랜이 어느 구성을 사용하는지 확인해야 합니다. 하지만 이를 확인하는 사람은 거의 없습니다.
실제 서버에서 체감하는 차이
서버 작업은 긴 순차 전송보다 작은 무작위 읽기와 쓰기가 대부분입니다. 따라서 홍보 문구에 표시된 MB/s 수치는 페이지에서 가장 유용하지 않은 숫자입니다.
- 데이터베이스 커밋. 내구성을 보장하는 데이터베이스는 트랜잭션이 커밋될 때
fsync를 호출한 다음, 드라이브가 데이터가 실제로 저장되었음을 확인할 때까지 기다립니다. 하드 디스크에서는 이 대기 시간이 밀리초 단위이므로 소규모 데이터베이스의 초당 커밋 수가 수백 건 이하로 제한됩니다. 플래시에서는 같은 대기 시간이 1밀리초의 일부에 불과합니다. PostgreSQL, MySQL 또는 프로덕션 데이터베이스로서의 SQLite를 실행하는 경우에도 차이가 가장 크게 나타나는 부분입니다. - 패키지 설치.
apt install는 수천 개의 작은 파일을 압축 해제하고 작업을 진행하면서 디스크에 동기화합니다. 이 작업은 거의 순차적으로 수행되지 않으므로 IOPS에 의해 제한됩니다. - 컨테이너 이미지 가져오기.
docker pull는 네트워크를 통해 압축된 레이어를 가져온 다음 이를 수천 개의 작은 파일로 추출합니다. 다운로드는 네트워크 대역폭에 의해 제한됩니다. 추출은 디스크 성능에 의해 제한되며, 느린 볼륨에서는 추출 과정이 완료될 때까지 기다리는 시간이 대부분을 차지합니다. - 부팅 및 재부팅. 시작 과정에서는 커널과 initramfs를 읽은 다음, 볼륨 전체에 흩어져 있는 수백 개의 작은 unit 파일과 공유 라이브러리를 읽습니다.
이 작업 중 어느 것도 대규모 순차 읽기가 아닙니다. 3,000 IOPS만 처리하면서 500 MB/s로 데이터를 스트리밍하는 볼륨은 docker compose pull 중에도 여전히 느리게 느껴집니다. 대기 시간이 메가바이트 단위가 아니라 파일 단위로 계산되기 때문입니다.
가격 페이지의 "SSD cloud hosting"이라는 표현만으로는 거의 알 수 없는 것
이 표현은 저장 매체만 설명하고 끝납니다. 드라이브가 사용하는 인터페이스가 무엇인지 알려 주지 않습니다. 해당 드라이브가 서버와 같은 머신에 있는지도 알려 주지 않습니다. 또한 요금제가 도달할 수 있는 한도도 설명하지 않습니다.
가장 중요한 것은 이 한도지만, 요금 페이지에는 가장 적게 표시됩니다. 하나의 호스트에서 여러 고객을 서비스하고, 제한 없이 사용하는 이웃 고객이 다른 고객의 성능을 고갈시킬 수 있기 때문에 제공업체는 볼륨별 IOPS와 처리량을 제한합니다. 수십만 IOPS를 처리할 수 있는 하드웨어에 몇 천 IOPS의 제한을 두는 것은 일반적이며 정직한 운영 방식입니다. 그러나 요금제 설명에는 이 제한이 표시되지 않습니다. 두 요금제 모두 "SSD"라고 표시하면서, 하나는 볼륨별 제한이 없는 로컬 NVMe이고 다른 하나는 3,000 IOPS로 제한된 공유 클러스터 볼륨일 수 있습니다.
제한은 두 가지 형태로 적용됩니다. 지속 제한은 변하지 않는 고정된 상한입니다. 버스트 제한은 낮은 기본 성능에 크레딧을 더해 일정 시간 동안 기본 성능을 초과할 수 있게 하며, 볼륨이 유휴 상태일 때 크레딧이 다시 충전됩니다. 버스트 제한은 5분 테스트에서는 매우 우수해 보이지만, 데이터베이스 가져오기나 대규모 복원 작업 중에 기본 성능 수준으로 떨어질 수 있습니다. 제공업체가 높은 수치를 제시한다면 그 성능을 얼마나 오래 유지할 수 있는지 확인해야 합니다.
VPS에서 실제로 할당된 리소스를 확인하는 방법
게스트 내부에서는 하이퍼바이저가 알려 주는 정보만 확인할 수 있습니다.
lsblk -d -o NAME,ROTA,MODEL,SIZE
cat /sys/block/vda/queue/rotationalvda을 디스크에 대해 lsblk에 표시된 장치 이름으로 바꿉니다. ROTA과 rotational 파일은 커널에 해당 장치가 비회전식이라고 전달된 경우 0을 읽고, 반대로 전달된 경우 1을 읽습니다. 가상 디스크는 하이퍼바이저가 알리는 정보를 바탕으로 이 플래그를 설정하므로, 이 값은 하위의 물리 하드웨어가 아니라 가상 장치를 설명합니다. MODEL는 일반적으로 vda과 같은 virtio 디스크에서는 비어 있거나, 에뮬레이션된 SATA 컨트롤러에서는 QEMU HARDDISK와 같은 일반 문자열입니다. 게스트에서는 호스트의 스토리지 어레이를 볼 수 없으며, 실제로도 볼 수 없습니다.
따라서 이 플래그는 참고 정보로만 사용하고 나머지는 직접 측정합니다. fio을 사용하여 볼륨의 파일을 대상으로 random 4k 테스트를 실행합니다. 애플리케이션이 실제로 사용하는 queue depth를 적용하고, burst credit을 모두 소진할 만큼 충분히 오래 실행합니다. VPS를 올바르게 벤치마크하는 방법에는 fio 명령과 실제보다 좋은 수치를 만들어 내는 일반적인 실수가 설명되어 있습니다.
구매 전에 제공업체에 물어볼 세 가지 질문
- 스토리지는 하이퍼바이저에 로컬로 연결되어 있습니까, 아니면 네트워크에 연결되어 있습니까? 이 답변에 따라 지연 시간의 하한이 정해지고, 물리적 호스트에 장애가 발생했을 때 데이터가 어떻게 되는지도 결정됩니다. 이 질문에 명확히 답하는 제공업체라면 해당 문제를 충분히 고려한 것입니다.
- 내 볼륨의 IOPS 제한은 얼마입니까? 수치로 답해 달라고 요청합니다. "무제한"과 "엔터프라이즈급"은 수치가 아닙니다. 실제로 제한이 없다면, 같은 호스트의 다른 사용자가 백업 시간 동안 전체 스토리지 어레이를 점유하지 못하도록 무엇이 제어하는지 질문합니다.
- 이 제한은 지속 한도입니까, 아니면 버스트 한도입니까? 버스트가 가능하다면 기준 성능과 버스트 지속 시간을 질문합니다. 야간 작업이 실제로 사용하게 될 값은 기준 성능이므로, 이를 기준으로 계획해야 합니다.
플래시는 마모되며, 이것이 문제가 됩니까?
플래시 셀은 쓸 수 있는 횟수가 제한되어 있으므로 드라이브는 TBW (terabytes written) 또는 DWPD (drive writes per day)로 내구성 등급을 공개합니다. 드라이브는 셀 전체에 쓰기 작업을 균등하게 분산합니다. 이를 wear levelling이라고 합니다. 또한 장애가 발생한 셀을 교체할 수 있도록 예비 블록을 보유합니다. VPS에서는 마모가 공급자의 문제입니다. 공급자는 자체 드라이브의 SMART 카운터를 모니터링하고 등급 한도에 도달하기 전에 하드웨어를 교체합니다. 사용자의 문제는 플래시보다 오래된 문제입니다. 드라이브는 백업이 아닙니다. 볼륨 아래의 이중화도 백업이 아닙니다. 데이터뿐 아니라 삭제 작업도 그대로 복제하기 때문입니다.
실제로 선택하는 기준은 기가바이트당 가격입니다. 플래시는 하드 디스크보다 기가바이트당 비용이 높습니다. 따라서 동일한 가격의 SSD 요금제는 일반적으로 하드 디스크 요금제보다 제공 용량이 작습니다. 미디어 또는 아카이브에 대용량 공간이 필요하다면 빠른 볼륨은 작게 유지하고 대용량 데이터는 더 저렴한 위치에 저장해야 합니다. 이는 서버 외부에 백업을 보관하는 방식에도 적합합니다. 스토리지가 전체 요금에 어떻게 반영되는지 확인하려면 VPS의 실제 비용에서 각 항목을 자세히 설명합니다.
FAQ
SSD VPS는 NVMe VPS와 같은 것입니까?
모든 NVMe VPS는 SSD VPS입니다. NVMe 드라이브는 플래시 저장 장치이기 때문입니다. 반대는 성립하지 않습니다. "SSD"로 광고되는 요금제는 SATA SSD일 수 있습니다. SATA SSD는 기계식 디스크용으로 설계된 인터페이스 뒤에 플래시 저장 장치를 연결하며, 명령 대기열은 32개이고 속도는 약 550 MB/s에서 제한됩니다. 두 저장 장치 모두 하드 디스크보다 훨씬 빠릅니다. 두 장치의 성능 차이가 워크로드에 중요하다면 요금제 이름만 보고 판단하지 말고 공급자에게 해당 요금제가 어떤 저장 장치를 사용하는지 문의합니다.
SSD VPS를 사용하면 웹사이트가 더 빨라집니까?
디스크 작업만 빨라집니다. 디스크 작업이 아닌 부분에는 영향을 주지 않습니다. 요청마다 여러 데이터베이스 쿼리를 실행하는 페이지는 더 빨라집니다. 이러한 쿼리와 커밋이 소규모 랜덤 I/O이기 때문입니다. 메모리 또는 캐시에서 제공되는 페이지는 응답을 보낼 때 디스크에 접근하지 않으므로 속도 변화가 거의 없습니다. 저장 장치 비용을 지불하기 전에 요청의 어느 부분이 느린지 측정합니다.
VPS가 실제로 SSD 저장 장치를 사용하는지 어떻게 확인할 수 있습니까?
게스트 내부에서는 물리 하드웨어를 확인할 수 없습니다. lsblk -d -o NAME,ROTA는 가상 장치가 광고하는 정보를 표시하지만, 해당 값은 하이퍼바이저가 결정합니다. 따라서 0이 표시되어도 이는 증거가 아니라 참고 정보입니다. 실제로 확인하려면 측정해야 합니다. 랜덤 4k 읽기 워크로드로 fio을 몇 분 동안 실행하고 보고된 지연 시간을 확인합니다. 한 자릿수 밀리초의 랜덤 읽기 지연 시간은 회전식 디스크 또는 혼잡한 네트워크 볼륨을 나타냅니다. 수십 마이크로초의 지연 시간은 로컬 플래시 저장 장치를 나타냅니다.
네트워크 연결 SSD 저장 장치는 로컬 NVMe보다 성능이 나쁩니까?
작업당 속도는 느리며 장애 양상도 다릅니다. 모든 읽기와 쓰기에 네트워크 왕복 시간이 추가되므로 두 저장 장치가 모두 플래시라도 지연 시간이 더 높습니다. 대신 데이터가 단일 물리 호스트에만 저장되지 않습니다. 따라서 호스트 장애가 발생해도 볼륨이 함께 중단되지 않으며, 공급자에게는 스냅샷과 라이브 마이그레이션을 적용하기도 더 쉽습니다. 지연 시간에 민감한 데이터베이스에는 로컬 플래시를 선택합니다. 마이크로초 단위의 성능보다 볼륨의 보존이 중요하면 네트워크 저장 장치를 선택합니다.