디스크 성능 특성 이해
애플리케이션 성능은 종종 애플리케이션이 데이터를 읽고 쓸 수 있는 빈도에 따라 달라집니다. 애플리케이션 성능을 개선하려면 먼저 성능 측정 방법을 이해해야 합니다. 그런 다음 이에 영향을 미치는 설정과 선택 사항을 이해합니다.
디스크 성능 특성
올바른 디스크 형식을 선택하려면 성능 지표를 이해하는 것이 중요합니다. 다음 지표는
- IOPS(초당 입출력 작업 수): 애플리케이션이 1초 동안 디스크에 전송하는 요청 수는 애플리케이션 성능에 직접적인 영향을 미칩니다. 소매 웹 사이트와 같은 일부 애플리케이션에서 사이트의 응답성을 유지하기 위해 신속하게 처리되어야 하는 임의의 작은 I/O(입력/출력) 요청을 모두 관리하려면 IOPS가 높아야 합니다. 고성능 디스크는 더 높은 IOPS 값을 가집니다.
- 처리량: 처리량은 애플리케이션이 지정된 간격 동안 디스크에 보내는 데이터의 양입니다. 처리량은 데이터 전송 속도라고도 하며 MB/s 단위로 측정됩니다. 애플리케이션이 큰 데이터 블록을 포함한 I/O를 수행하는 경우에는 높은 처리량이 필요합니다. 성능 디스크가 더 높은 처리량을 가집니다.
- 대기 시간: 대기 시간은 앱이 디스크에 요청을 보내고 응답을 받는 데 걸리는 시간입니다. 대기 시간은 유효 IOPS에 제한을 가합니다. 예를 들어 디스크가 5,000 IOPS를 처리할 수 있지만 각 작업을 처리하는 데 10ms가 걸리는 경우 앱은 처리 시간으로 인해 초당 100개의 작업까지 처리할 수 있습니다. ReadOnly 호스트 캐싱을 사용하도록 설정하면 대기 시간이 크게 개선됩니다.
IOPS 및 처리량
처리량과 IOPS는 직접적인 관계가 있습니다. 하나를 변경하면 다른 하나에 직접적인 영향을 미칩니다. 이론적인 처리량 제한을 얻으려면 IOPS × I/O 크기 = 처리량 수식을 사용할 수 있습니다. 애플리케이션을 계획할 때 이러한 값을 모두 고려해야 합니다.
Ultra 디스크와 프리미엄 SSD v2 관리 디스크의 경우 디스크 크기, IOPS 및 처리량을 독립적으로 조정할 수 있으므로 작동 방식이 약간 다릅니다. Ultra Disks 및 프리미엄 SSD v2 관리 디스크의 IOPS 또는 처리량 조정은 디스크를 VM(가상 머신)에서 분리하지 않고도 런타임에 수행할 수 있습니다.
Ultra Disk IOPS
Ultra Disk는 디스크당 최대 160,000IOPS까지 300IOPS/GiB의 IOPS 제한을 지원합니다. 디스크의 대상 IOPS를 달성하려면 선택한 디스크 IOPS가 VM IOPS 제한보다 작은지 확인합니다.
현재 일반 공급 크기의 단일 VM에 대한 IOPS의 최대 한도는 160,000입니다. IOPS가 더 큰 울트라 디스크를 공유 디스크로 사용하여 여러 VM을 지원할 수 있습니다.
디스크당 최소 보장 IOPS는 1 IOPS/GiB이며 전체 기준은 최소 100 IOPS입니다. 예를 들어 4GiB Ultra Disk를 프로비전한 경우 해당 디스크의 최소 IOPS는 4가 아닌 100입니다.
Ultra Disk 처리량
단일 Ultra Disk의 처리량 제한은 프로비전된 각 IOPS에 대해 256KiB/s이며 디스크당 최대 4000MB/s입니다(여기서 MB/s = 10^6바이트/초). 디스크당 보장되는 최소 처리량은 프로비전된 각 IOPS당 4KiB/s이고, 전체 기준은 1MB/s 이상입니다.
프리미엄 SSD v2 IOPS
모든 프리미엄 SSD v2 디스크의 기준 IOPS는 3000이며, 무료로 제공됩니다. 6GiB 이후 디스크의 최대 IOPS는 GiB당 500의 속도로 최대 80,000 IOPS까지 증가할 수 있습니다. 따라서 8GiB 디스크는 최대 4,000 IOPS를 가질 수 있고 10GiB 디스크는 최대 5,000 IOPS를 가질 수 있습니다. 디스크에 80,000 IOPS를 설정하려면 해당 디스크에 160GiB 이상이 있어야 합니다. IOPS를 3,000 이상으로 늘리면 디스크 가격이 증가합니다.
프리미엄 SSD v2 처리량
모든 프리미엄 SSD v2 디스크의 기준 처리량은 125MB/s이며, 무료로 제공됩니다. 6GiB 이후 설정할 수 있는 최대 처리량은 설정된 IOPS당 0.25MB/s씩 증가합니다. 디스크에 3,000 IOPS가 있는 경우 설정할 수 있는 최대 처리량은 750MB/s입니다. 이 디스크의 처리량을 750MB/s를 초과하려면 IOPS를 늘려야 합니다. 예를 들어 IOPS를 4,000으로 늘리면 설정할 수 있는 최대 처리량은 1,000입니다. 1,200MB/s는 5,000 IOPS 이상이 있는 디스크에 대해 지원되는 최대 처리량입니다. 처리량을 125MB/s 이상으로 늘리면 디스크 가격이 증가합니다.
가상 머신 I/O 제한
이제 Azure에서 사용할 수 있는 디스크를 알고 있으므로 각 VM을 올바른 디스크 형식과 일치시켜야 합니다. VM에는 디스크 IOPS와 결합할 때 전체 애플리케이션 성능에 영향을 줄 수 있는 자체 스토리지 IOPS 제한이 있습니다.
애플리케이션에 필요한 스토리지 성능에 맞게 VM 크기를 조정하지 않으면 VM 자체에 병목 현상이 발생합니다.
예를 들어 애플리케이션에서 15,000 IOPS가 필요한 요청을 수행한다고 가정합니다. P30 OS 디스크 1개와 P40 SKU의 프리미엄 SSD 데이터 디스크 두 개가 있는 Standard_D8s_v3 VM을 프로비전했습니다. 각 데이터 디스크는 7,500 IOPS를 처리할 수 있으며 궁극적으로 애플리케이션의 수요를 충족할 수 있습니다. 그러나 VM 자체의 최대 한도는 12,800 IOPS이며, 이는 애플리케이션이 실제로 가져오는 IOPS입니다. 다음 그림은 이러한 예제를 보여 줍니다.
앞의 예제에 설명된 시나리오를 VM I/O 제한이라고 합니다. 이 시나리오에서 애플리케이션은 디스크에서 관리할 수 있는 처리량 및 IOPS를 요청하지만 VM은 이러한 요구 사항을 수용할 수 없습니다.
다음 메트릭을 사용하여 VM I/O 제한으로 인한 성능 문제를 진단할 수 있습니다.
- VM의 캐시된 IOPS 사용 비율
- VM의 캐시된 대역폭 사용 비율
- VM의 캐시되지 않은 IOPS 사용 비율
- VM의 캐시되지 않은 대역폭 사용 비율
디스크 I/O 제한
스토리지 솔루션이 애플리케이션 요구를 충족하지 않는 다른 상황이 발생할 수 있습니다. 그러나 디스크에 대해 잘못된 성능 계층을 선택하면 병목 현상이 발생할 수 있습니다.
애플리케이션이 VM에서 15,000 IOPS가 필요하고 다음 설정을 선택한 동일한 예를 생각해 보겠습니다.
- 25,600 IOPS의 표준 D16s_v4
- 2,300 IOPS의 P20 OS 디스크
- 각각 5,000 IOPS를 지원하는 P30 데이터 디스크 2개
이 시나리오에서 애플리케이션의 요구 사항은 세 가지 다른 요청으로 나뉩니다.
- OS 디스크에서 2,300 IOPS가 요청됨
- 각 데이터 디스크에서 5,000 IOPS가 요청됨
VM이 애플리케이션에 반환하는 총 IOPS는 OS와 데이터 디스크에서 제공한 각 IOPS의 합계로 12,300입니다.
디스크 자체가 애플리케이션 요구를 충족할 수 없는 경우 이 시나리오를 디스크 I/O 제한이라고 합니다.
디스크 I/O 제한을 진단하려면 다음 메트릭을 사용합니다.
- 데이터 디스크 IOPS 사용 비율
- 데이터 디스크 대역폭 사용 비율
- OS 디스크 IOPS 사용 비율
- OS 디스크 대역폭 사용 비율
디스크 캐싱
캐시는 애플리케이션이 데이터에 더 빠르게 액세스할 수 있도록 일반적으로 메모리에 데이터를 저장하는 특화된 구성 요소입니다. 캐시의 데이터는 이전에 읽은 데이터이거나 이전 계산에서 생성된 결과 데이터인 경우가 많습니다. 목표는 애플리케이션이 디스크보다 캐시에서 더 빠르게 데이터에 액세스하는 것입니다. 디스크 캐싱은 Ultra Disks와 프리미엄 SSD v2에서 사용할 수 없습니다.
캐싱은 영구 스토리지보다 더 빠른 읽기 및 쓰기 성능을 갖춘 전문적이고 때로는 비용이 많이 드는 임시 스토리지를 사용합니다. 캐시 스토리지는 종종 제한적이므로 캐싱을 통해 가장 큰 이점을 얻을 수 있는 데이터 작업을 결정해야 합니다. 그러나 Azure와 같이 캐시를 광범위하게 사용할 수 있는 경우에도 사용할 캐싱 유형을 결정하기 전에 각 디스크의 워크로드 패턴을 파악하는 것이 여전히 중요합니다.
읽기 캐싱은 데이터 검색 속도를 높입니다. 애플리케이션은 영구 스토리지에서 데이터를 읽는 대신 더 빠른 캐시에서 데이터를 읽습니다.
순차적 읽기 집합과 같이 큐에 어느 정도 예측 가능성이 있는 경우 읽기 캐싱이 도움이 된다는 점을 알아두는 것이 중요합니다. 액세스하는 데이터가 스토리지에 분산된 임의 I/O의 경우 캐싱은 거의 또는 전혀 유용하지 않으며 디스크 성능을 저하할 수도 있습니다.
쓰기 캐싱은 영구 스토리지에 데이터를 쓰는 속도를 높입니다. 쓰기 캐시를 사용하면 앱은 저장해야 할 데이터를 고려할 수 있습니다.
실제로 쓰기 캐싱을 사용하면 데이터는 캐시에서 큐에 대기되어 디스크에 기록되기 위해 대기합니다. 상상할 수 있듯이 캐시된 데이터가 작성되기 전에 시스템이 종료되는 경우 이 메커니즘은 잠재적인 실패 지점이 될 수 있습니다. SQL Server와 같은 일부 시스템은 쓰기 캐시된 데이터 작업을 영구 디스크 스토리지 자체로 관리합니다.
VM의 캐시된 제한 및 캐시되지 않은 제한
캐싱이 디스크에서 데이터를 읽거나 쓸 때 성능을 어떻게 개선할 수 있는지 알아보았습니다. 이제 캐싱이 VM 성능에 어떤 영향을 미치는지 살펴보겠습니다.
VM의 성능은 VM 크기에 따라 부과되는 IOPS 및 처리량 제한에 따라 달라집니다. 프리미엄 계층의 모든 VM에는 캐시된 구성과 캐시되지 않은 구성에 따라 IOPS 및 처리량에 대한 제한이 다릅니다. VM 호스트 캐싱을 사용하도록 설정하여 IOPS 및 처리량에 대한 높은 수요를 충족하도록 VM의 성능을 향상시킬 수 있습니다.
다음 표에는 캐시된 경우와 캐시되지 않은 경우 디스크 처리량과 대역폭의 성능 차이를 보여 주는 예제가 나와 있습니다.
VM 크기 이름 | 최대 캐시된 임시 스토리지 처리량: IOPS/MB/s(GiB 단위의 캐시 크기) | 캐시되지 않은 최대 디스크 처리량 IOPS/MB/s |
---|---|---|
Standard_D2s_v3 | 4,000/32 (50) | 3,200/48 |
Standard_D4s_v3 | 8,000/64 (100) | 6,400/96 |
Standard_D8s_v3 | 16,000/128 (200) | 12,800/192 |
Standard_D64s_v3 | 128,000/1,024 (1,600) | 80,000/1,200 |
호스트 캐싱을 사용하면 VM 병목 현상 시나리오를 방지할 수 있습니다.
VM I/O 제한의 이전 예제에서는 애플리케이션에 15,000 IOPS가 필요했습니다. 두 데이터 디스크 모두 해당 요청을 처리할 수 있지만 Standard_D8s_v3 VM은 캐시되지 않은 상태에서 12,800 IOPS만 제공할 수 있습니다.
Standard_D8s_v3 VM에서 호스트 캐싱을 구성하는 경우 애플리케이션에서 요구하는 것보다 많은 16,000개의 캐시된 IOPS를 얻을 수 있습니다.