가상 머신 및 디스크 성능

적용 대상: ✔️ Linux VM ✔️ Windows VM ✔️ 유연한 확장 집합 ✔️ 균일한 확장 집합

이 문서는 디스크 성능 및 Azure Virtual Machines와 Azure 디스크 결합 시 작동 방식을 파악하는 데 도움이 됩니다. 또한 디스크 IO의 병목 상태 진단 방법과 성능 최적화를 위해 수행할 수 있는 변경 사항에 대해 설명합니다.

디스크 성능은 어떻게 작동하나요?

Azure Virtual Machine은 가상 머신 유형 및 크기에 따라 IOPS(초당 입력/출력 작업 수) 및 처리량 성능 제한이 있습니다. OS 디스크와 데이터 디스크를 가상 머신에 연결할 수 있습니다. 디스크에는 자체 IOPS 및 처리량 제한이 있습니다.

가상 머신 또는 연결된 디스크에 할당된 것보다 더 많은 IOPS 또는 처리량을 요청하는 경우 애플리케이션의 성능이 제한됩니다. 제한되면 애플리케이션의 성능이 최적화되지 않습니다. 이는 대기 시간 증가와 같은 부정적인 결과를 초래할 수 있습니다. 이 개념 설명을 위해 몇 가지 예제를 살펴보겠습니다. 이 예제를 쉽게 따라갈 수 있도록 IOPS만 보겠습니다. 그러나 동일한 논리가 처리량에 적용됩니다.

디스크 IO 제한

설정:

  • Standard_D8s_v3
    • 캐시되지 않은 IOPS: 12,800
  • E30 OS 디스크
    • IOPS: 500
  • E30 데이터 디스크 2개 × 2
    • IOPS: 500

Diagram showing disk level capping.

가상 머신에서 실행되는 애플리케이션이 가상 머신에 10,000 IOPS가 필요한 요청을 합니다. Standard_D8s_v3 가상 머신은 최대 12,800 IOPS를 실행할 수 있기 때문에 이 모든 것이 VM에서 허용됩니다.

10,000 IOPS 요청은 서로 다른 디스크에 대한 3개의 요청으로 분류됩니다.

  • 운영 체제 디스크에 1,000 IOPS가 요청됩니다.
  • 각 데이터 디스크에 4,500 IOPS가 요청됩니다.

연결된 모든 디스크는 E30 디스크이며 500 IOPS만 처리할 수 있습니다. 따라서 각각 500 IOPS로 다시 응답합니다. 애플리케이션의 성능은 연결된 디스크에 의해 제한되며 1,500 IOPS만 처리할 수 있습니다. 프리미엄 SSD P30 디스크와 같이 더 나은 성능의 디스크를 사용하는 경우 애플리케이션은 10,000 IOPS에서 최고 성능으로 작동할 수 있습니다.

가상 머신 IO 제한

설정:

  • Standard_D8s_v3
    • 캐시되지 않은 IOPS: 12,800
  • P30 OS 디스크
    • IOPS: 5,000
  • P30 데이터 디스크 2개 × 2
    • IOPS: 5,000

Diagram showing virtual machine level capping.

가상 머신에서 실행되는 애플리케이션이 15,000 IOPS가 필요한 요청을 합니다. 아쉽게도 Standard_D8s_v3 가상 머신은 12,800 IOPS를 처리하기 위해서만 프로비전됩니다. 애플리케이션은 가상 머신 한도로 제한되며 할당된 12,800 IOPS를 할당해야 합니다.

요청된 12,800 IOPS는 다른 디스크에 대한 세 가지 요청으로 분류됩니다.

  • 운영 체제 디스크에 4,267 IOPS가 요청됩니다.
  • 각 데이터 디스크에 4,266 IOPS가 요청됩니다.

연결된 디스크는 모두 5,000 IOPS를 처리할 수 있는 P30 디스크입니다. 따라서 요청한 양으로 다시 응답합니다.

가상 머신 캐시되지 않은 제한 및 캐시된 제한

프리미엄 스토리지 및 프리미엄 스토리지 캐싱에 모두 사용하도록 설정된 가상 머신에는 두 가지 스토리지 대역폭 제한이 있습니다. 한 가지 예로 Standard_D8s_v3 가상 머신을 살펴봅니다. Dsv3-시리즈 및 Standard_D8s_v3에 대한 설명서는 다음과 같습니다.

Chart showing D s v 3 specifications.

  • 캐시되지 않은 최대 디스크 처리량은 가상 머신에서 처리할 수 있는 기본 스토리지의 최대 한도입니다.
  • 호스트 캐싱을 사용하도록 설정하면 캐시된 최대 스토리지 처리량 한도가 별도의 한도가 됩니다.

호스트 캐싱은 데이터를 신속하게 기록하거나 읽을 수 있는 VM에 스토리지를 더 가깝게 배치하는 방식으로 작동합니다. VM에서 호스트 캐싱에 사용할 수 있는 스토리지 크기는 설명서에 나와 있습니다. 예를 들어 Standard_D8s_v3가 200GiB의 캐시 스토리지와 함께 제공되는 것을 볼 수 있습니다.

가상 머신을 만들고 디스크를 연결할 때 호스트 캐싱을 사용하도록 설정할 수 있습니다. 또한 기존 VM의 디스크에서 호스트 캐싱을 설정 및 해제할 수 있습니다. 기본적으로 캐시 가능 데이터 디스크는 읽기 전용 캐싱을 사용하도록 설정됩니다. 캐시 지원 OS 디스크에는 읽기/쓰기 캐싱을 사용하도록 설정됩니다.

Screenshot showing host caching.

각 디스크에 대한 워크로드 요구 사항에 맞게 호스트 캐싱을 조정할 수 있습니다. 호스트 캐싱을 다음과 같이 설정할 수 있습니다.

  • 읽기 전용: 읽기 작업만 수행하는 워크로드
  • 읽기/쓰기: 읽기 및 쓰기 작업의 균형을 유지하는 워크로드

워크로드가 이러한 패턴 중 하나를 따르지 않는 경우 호스트 캐싱을 사용하지 않는 것이 좋습니다.

서로 다른 호스트 캐시 설정의 몇 가지 예제를 살펴보고 데이터 흐름 및 성능에 미치는 영향을 알아보겠습니다. 이 첫 번째 예제에서는 호스트 캐싱 설정이 읽기 전용으로 설정된 경우 IO 요청이 어떻게 진행되는지 살펴보겠습니다.

설정:

  • Standard_D8s_v3
    • 캐시된 IOPS: 16,000
    • 캐시되지 않은 IOPS: 12,800
  • P30 데이터 디스크
    • IOPS: 5,000
    • 호스트 캐싱: 읽기 전용

읽기를 수행할 때 캐시에 원하는 데이터가 있으면 캐시에서 요청된 데이터를 반환합니다. 디스크에서 읽을 필요가 없습니다. 이 읽기는 VM의 캐시된 제한에 합산됩니다.

Diagram showing a read host caching read hit.

읽기를 수행할 때 캐시에 원하는 데이터가 없으면 읽기 요청이 디스크로 릴레이됩니다. 그러면 디스크에서 캐시와 VM 모두에 이를 표시합니다. 이 읽기는 VM의 캐시되지 않은 제한과 VM의 캐시된 제한에 합산됩니다.

Diagram showing a read host caching read miss.

쓰기를 수행할 때 캐시와 디스크 모두에 디스크가 기록되어야 쓰기가 완료된 것으로 간주됩니다. 이 쓰기는 VM의 캐시되지 않은 제한과 VM의 캐시된 제한에 합산됩니다.

Diagram showing a read host caching write.

다음으로, 호스트 캐시 설정이 읽기/쓰기로 설정된 경우 IO 요청이 어떻게 진행되는지 살펴보겠습니다.

설정:

  • Standard_D8s_v3
    • 캐시된 IOPS: 16,000
    • 캐시되지 않은 IOPS: 12,800
  • P30 데이터 디스크
    • IOPS: 5,000
    • 호스트 캐싱: 읽기/쓰기

읽기는 읽기 전용과 동일하게 처리됩니다. 읽기/쓰기 캐싱과 다른 것은 쓰기밖에 없습니다. 호스트 캐싱을 사용한 쓰기가 읽기/쓰기로 설정된 경우, 쓰기 작업은 호스트 캐시에만 기록해야 완료된 것으로 간주됩니다. 그런 다음 캐시가 주기적으로 플러시될 때 쓰기가 디스크에 지연되어 기록됩니다. 고객은 f/sync 또는 fua 명령을 실행하여 추가로 플러시를 강제 실행할 수 있습니다. 즉, 쓰기가 캐시에 기록되면 캐시된 IO에 합산됩니다. 디스크에 지연 기록되면 캐시되지 않은 IO에 합산됩니다.

Diagram showing read/write host caching write.

Standard_D8s_v3 가상 머신을 계속 살펴보겠습니다. 이번에는 디스크에서 호스트 캐싱을 사용하도록 설정하겠습니다. 이렇게 하면 VM의 IOPS가 16,000 IOPS로 제한됩니다. 각각 5,000 IOPS를 처리할 수 있는 세 개의 기본 P30 디스크가 VM에 연결되어 있습니다.

설정:

  • Standard_D8s_v3
    • 캐시된 IOPS: 16,000
    • 캐시되지 않은 IOPS: 12,800
  • P30 OS 디스크
    • IOPS: 5,000
    • 호스트 캐싱: 읽기/쓰기
  • P30 데이터 디스크 2개 × 2
    • IOPS: 5,000
    • 호스트 캐싱: 읽기/쓰기

Diagram showing a host caching example.

애플리케이션은 캐싱이 설정된 Standard_D8s_v3 가상 머신을 사용합니다. 16,000 IOPS에 대한 요청을 보냅니다. 요청은 캐시에 읽거나 쓰는 즉시 완료됩니다. 그런 다음 쓰기는 연결된 디스크에 지연되어 기록됩니다.

캐시되지 않은 제한과 캐시된 제한 결합

가상 머신의 캐시된 제한은 캐시되지 않은 제한과 별개입니다. 즉, 다른 디스크에서 호스트 캐싱을 사용하도록 설정하지 않고 VM에 연결된 디스크에서 호스트 캐싱을 사용하도록 설정할 수 있습니다. 이 구성을 통해 가상 머신은 캐시된 제한과 캐시되지 않은 제한을 더한 총 스토리지 IO를 구할 수 있습니다.

이러한 제한을 함께 사용하는 방법을 이해하는 데 도움이 되는 예제를 살펴보겠습니다. Standard_D8s_v3 가상 머신 및 프리미엄 디스크 연결 구성을 계속합니다.

설정:

  • Standard_D8s_v3
    • 캐시된 IOPS: 16,000
    • 캐시되지 않은 IOPS: 12,800
  • P30 OS 디스크
    • IOPS: 5,000
    • 호스트 캐싱: 읽기/쓰기
  • P30 데이터 디스크 2개 × 2
    • IOPS: 5,000
    • 호스트 캐싱: 읽기/쓰기
  • P30 데이터 디스크 2개 × 2
    • IOPS: 5,000
    • 호스트 캐싱: 사용 안 함

Diagram showing a host caching example with remote storage.

이 경우 Standard_D8s_v3 가상 머신에서 실행되는 애플리케이션은 25,000 IOPS를 요청합니다. 이 요청은 연결된 각 디스크에 5,000 IOPS로 분할됩니다. 세 개의 디스크가 호스트 캐싱을 사용하고, 두 개의 디스크는 호스트 캐싱을 사용하지 않습니다.

  • 호스트 캐싱을 사용하는 세 개의 디스크가 16,000이라는 캐시된 제한을 넘지 않았으므로 해당 요청이 성공적으로 완료됩니다. 스토리지 성능 제한이 발생하지 않습니다.
  • 호스트 캐싱을 사용하지 않는 두 개의 디스크가 12,800이라는 캐시되지 않은 제한을 넘지 않았으므로 이러한 요청도 성공적으로 완료됩니다. 제한이 발생하지 않습니다.