다음을 통해 공유


디스크 벤치마크

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

벤치마킹은 애플리케이션에서 다양한 워크로드를 시뮬레이션하고 각 워크로드에 대한 애플리케이션 성능을 측정하는 프로세스입니다. 고성능을 위한 디자인 문서에 설명된 단계를 사용하여 애플리케이션 성능 요구 사항을 수집했습니다. 애플리케이션을 호스팅하는 VM에서 벤치마킹 도구를 실행하여 애플리케이션이 프리미엄 SSD로 달성할 수 있는 성능 수준을 결정할 수 있습니다. 이 문서에서는 Azure 프리미엄 SSD로 프로비전된 Standard_D8ds_v4 VM을 벤치마킹하는 예제를 제공합니다.

Windows 및 Linux에 대해 각각 일반적인 벤치마킹 도구 DiskSpd 및 FIO를 사용했습니다. 이러한 도구는 워크로드와 같은 프로덕션을 시뮬레이션하는 여러 스레드를 생성하고 시스템 성능을 측정합니다. 도구를 사용하여 일반적으로 애플리케이션에 대해 변경할 수 없는 블록 크기 및 큐 깊이와 같은 매개 변수를 구성할 수도 있습니다. 이렇게 하면 다양한 유형의 애플리케이션 워크로드에 대해 프리미엄 SSD로 프로비전된 대규모 VM에서 최대 성능을 더 유연하게 구동할 수 있습니다. 각 벤치마킹 도구에 대해 자세히 알아보려면 DiskSpdFIO를 방문하세요.

아래 예제를 따르려면 Standard_D8ds_v4 만들고 4개의 프리미엄 SSD를 VM에 연결합니다. 4개의 디스크 중에서 호스트 캐싱을 "없음"으로 사용하여 3개를 구성하고 NoCacheWrites라는 볼륨으로 스트라이프합니다. 나머지 디스크에서 호스트 캐싱을 "ReadOnly"로 구성하고 이 디스크를 사용하여 CacheReads라는 볼륨을 만듭니다. 이 설정을 사용하면 Standard_D8ds_v4 VM에서 최대 읽기 및 쓰기 성능을 볼 수 있습니다. 프리미엄 SSD를 사용하여 Standard_D8ds_v4 만드는 방법에 대한 자세한 단계는 고성능을 위한 설계를 참조하세요.

캐시 워밍업

ReadOnly 호스트 캐싱이 있는 디스크는 디스크 제한보다 높은 IOPS를 제공할 수 있습니다. 호스트 캐시에서 이 최대 읽기 성능을 얻으려면 먼저 이 디스크의 캐시를 준비해야 합니다. 이렇게 하면 벤치마킹 도구가 CacheReads 볼륨에서 구동하는 읽기 IO가 디스크가 아니라 실제로 캐시에 도달합니다. 캐시 히트로 인해 단일 캐시 사용 디스크에서 더 많은 IOPS가 발생합니다.

중요합니다

VM을 다시 부팅할 때마다 벤치마크를 실행하기 전에 캐시를 준비해야 합니다.

DISKSPD

VM에서 DISKSP 도구를 다운로드합니다. DISKSPD는 사용자 고유의 가상 워크로드를 만들기 위해 사용자 지정할 수 있는 도구입니다. 위에서 설명한 것과 동일한 설정을 사용하여 벤치마킹 테스트를 실행합니다. 사양을 변경하여 다른 워크로드를 테스트할 수 있습니다.

이 예제에서는 다음 기준 매개 변수 집합을 사용합니다.

  • -c200G: 테스트에 사용된 샘플 파일을 만들거나 다시 만듭니다. 바이트, KiB, MiB, GiB 또는 블록으로 설정할 수 있습니다. 이 경우 메모리 캐싱을 최소화하기 위해 200GiB 대상 파일의 큰 파일이 사용됩니다.
  • -w100: 쓰기 요청인 작업의 백분율을 지정합니다(-w0 읽기% 100개에 해당).
  • -b4K: 블록 크기(바이트, KiB, MiB 또는 GiB)를 나타냅니다. 이 경우 4K 블록 크기는 임의 I/O 테스트를 시뮬레이션하는 데 사용됩니다.
  • -F4: 총 4개의 스레드를 설정합니다.
  • -r: 임의 I/O 테스트를 나타냅니다(-s 매개 변수 재정의).
  • -o128: 스레드당 대상당 미해결 I/O 요청 수를 나타냅니다. 이를 대기열 깊이라고도 합니다. 이 경우 128은 CPU를 강조하는 데 사용됩니다.
  • -W7200: 측정이 시작되기 전의 준비 시간을 지정합니다.
  • -d30: 준비를 제외하고 테스트 지속 시간을 지정합니다.
  • -Sh: 소프트웨어 및 하드웨어 쓰기 캐싱을 사용하지 않도록 설정합니다(-Suw해당).

매개 변수의 전체 목록은 GitHub 리포지토리를 참조하세요.

최대 쓰기 IOPS

쓰기 작업을 구동하기 위해 128의 높은 큐 깊이, 8KB의 작은 블록 크기 및 4개의 작업자 스레드를 사용합니다. 쓰기 작업자는 캐시가 "없음"으로 설정된 3개의 디스크가 있는 "NoCacheWrites" 볼륨에서 트래픽을 유도합니다.

준비 30초 및 측정 30초 동안 다음 명령을 실행합니다.

diskspd -c200G -w100 -b8K -F4 -r -o128 -W30 -d30 -Sh testfile.dat

결과에 따르면 Standard_D8ds_v4 VM은 최대 쓰기 IOPS 제한인 12,800을 제공합니다.

3208642560 총 바이트의 경우 총 I/O 391680, 총 101.97MiB/s, 초당 총 13052.65 I/O입니다.

최대 읽기 IOPS

읽기 작업을 구동하기 위해 128의 높은 큐 깊이, 4KB의 작은 블록 크기 및 4개의 작업자 스레드를 사용합니다. 읽기 작업자는 캐시가 "ReadOnly"로 설정된 디스크 하나가 있는 "CacheReads" 볼륨에서 트래픽을 유도합니다.

2시간의 준비 및 30초 측정에 대해 다음 명령을 실행합니다.

diskspd -c200G -b4K -F4 -r -o128 -W7200 -d30 -Sh testfile.dat

결과에 따르면 Standard_D8ds_v4 VM은 최대 읽기 IOPS 제한인 77,000을 제공합니다.

9652785152 바이트의 총합에 대해, 총 2356637 I/O가 있었고, 총 306.72 MiB/s로 초당 78521.23 I/O가 있었습니다.

최대 처리량

최대 읽기 및 쓰기 처리량을 얻으려면 더 큰 블록 크기인 64KB로 변경할 수 있습니다.

FIO

FIO는 Linux VM의 스토리지를 벤치마킹하는 데 널리 사용되는 도구입니다. 다양한 IO 크기, 순차적 또는 임의 읽기 및 쓰기를 유연하게 선택할 수 있습니다. 작업자 스레드 또는 프로세스를 생성하여 지정된 I/O 작업을 수행합니다. 각 작업자 스레드가 작업 파일을 사용하여 수행해야 하는 I/O 작업의 유형을 지정할 수 있습니다. 아래 예제에 설명된 시나리오당 하나의 작업 파일을 만들었습니다. Premium Storage에서 실행되는 다양한 워크로드를 벤치마킹하도록 이러한 작업 파일의 사양을 변경할 수 있습니다. 예제에서는 Ubuntu를 실행하는 Standard_D8ds_v4 사용합니다. 벤치마크 섹션의 시작 부분에 설명된 것과 동일한 설정을 사용하고 벤치마크 테스트를 실행하기 전에 캐시를 준비합니다.

시작하기 전에 FIO를 다운로드 하여 가상 머신에 설치합니다.

Ubuntu에 대해 다음 명령을 실행합니다.

apt-get install fio

쓰기 작업을 구동하기 위해 작업자 스레드 4개와 디스크에서 읽기 작업을 구동하기 위해 4개의 작업자 스레드를 사용합니다. 쓰기 작업자는 캐시가 "없음"으로 설정된 3개의 디스크가 있는 "nocache" 볼륨에서 트래픽을 유도합니다. 읽기 작업자는 캐시가 "ReadOnly"로 설정된 디스크 하나가 있는 "readcache" 볼륨에서 트래픽을 유도합니다.

최대 쓰기 IOPS

최대 쓰기 IOPS를 얻으려면 다음 사양으로 작업 파일을 만듭니다. 이름을 "fiowrite.ini"로 지정합니다.

[global]
size=30g
direct=1
iodepth=256
ioengine=libaio
bs=4k
numjobs=4

[writer1]
rw=randwrite
directory=/mnt/nocache

이전 섹션에서 설명한 디자인 지침에 부합하는 다음 주요 사항에 유의하세요. 이러한 사양은 최대 IOPS를 구동하는 데 필수적입니다.

  • 큐 깊이가 256으로 높습니다.
  • 4KB의 작은 블록 크기입니다.
  • 임의 쓰기를 수행하는 여러 스레드

다음 명령을 실행하여 FIO 테스트를 30초 동안 시작합니다.

sudo fio --runtime 30 fiowrite.ini

테스트가 실행되는 동안 VM 및 프리미엄 디스크가 제공하는 쓰기 IOPS 수를 확인할 수 있습니다. 아래 샘플에 표시된 것처럼 Standard_D8ds_v4 VM은 최대 쓰기 IOPS 제한인 12,800 IOPS를 제공합니다.
쓰기 IOPS VM과 프리미엄 SSD가 제공하는 성능을 보면, 쓰기 작업이 13.1k IOPS를 기록하고 있음을 보여줍니다.

최대 읽기 IOPS

최대 읽기 IOPS를 얻으려면 다음 사양으로 작업 파일을 만듭니다. 이름을 "fioread.ini"로 지정합니다.

[global]
size=30g
direct=1
iodepth=256
ioengine=libaio
bs=4k
numjobs=4

[reader1]
rw=randread
directory=/mnt/readcache

이전 섹션에서 설명한 디자인 지침에 부합하는 다음 주요 사항에 유의하세요. 이러한 사양은 최대 IOPS를 구동하는 데 필수적입니다.

  • 큐 깊이가 256으로 높습니다.
  • 4KB의 작은 블록 크기입니다.
  • 임의 쓰기를 수행하는 여러 스레드

다음 명령을 실행하여 FIO 테스트를 30초 동안 시작합니다.

sudo fio --runtime 30 fioread.ini

테스트가 실행되는 동안 VM 및 프리미엄 디스크가 제공하는 읽기 IOPS 수를 볼 수 있습니다. 아래 샘플에 표시된 것처럼 Standard_D8ds_v4 VM은 77,000개 이상의 읽기 IOPS를 제공합니다. 디스크와 캐시 성능의 조합입니다.
IOPS VM 및 프리미엄 SSD가 제공하는 쓰기 수의 스크린샷은 읽기가 78.6k임을 보여줍니다.

최대 읽기 및 쓰기 IOPS

다음 사양을 사용하여 작업 파일을 만들어 최대 결합 읽기 및 쓰기 IOPS를 가져옵니다. 이름을 "fioreadwrite.ini"로 지정합니다.

[global]
size=30g
direct=1
iodepth=128
ioengine=libaio
bs=4k
numjobs=4

[reader1]
rw=randread
directory=/mnt/readcache

[writer1]
rw=randwrite
directory=/mnt/nocache
rate_iops=3200

이전 섹션에서 설명한 디자인 지침에 부합하는 다음 주요 사항에 유의하세요. 이러한 사양은 최대 IOPS를 구동하는 데 필수적입니다.

  • 큐 깊이가 128로 높습니다.
  • 4KB의 작은 블록 크기입니다.
  • 임의 읽기 및 쓰기를 수행하는 여러 스레드

다음 명령을 실행하여 FIO 테스트를 30초 동안 시작합니다.

sudo fio --runtime 30 fioreadwrite.ini

테스트가 실행되는 동안 VM 및 프리미엄 디스크가 제공하는 결합된 읽기 및 쓰기 IOPS 수를 볼 수 있습니다. 아래 샘플에 표시된 것처럼 Standard_D8ds_v4 VM은 90,000개 이상의 결합된 읽기 및 쓰기 IOPS를 제공합니다. 디스크와 캐시 성능의 조합입니다.
읽기 및 쓰기 IOPS를 결합하면 읽기가 78.3k이고 쓰기가 12.6k IOPS임을 보여 줍니다.

최대 결합 처리량

최대 결합 읽기 및 쓰기 처리량을 얻으려면 읽기 및 쓰기를 수행하는 여러 스레드에서 더 큰 블록 크기와 큰 큐 깊이를 사용합니다. 64KB의 블록 크기와 128의 큐 깊이를 사용할 수 있습니다.

다음 단계

고성능을 위한 디자인에 대한 문서를 계속 진행하세요.

이 문서에서는 프로토타입에 대한 기존 애플리케이션과 유사한 검사 목록을 만듭니다. 벤치마킹 도구를 사용하여 워크로드를 시뮬레이션하고 프로토타입 애플리케이션에서 성능을 측정할 수 있습니다. 이렇게 하면 애플리케이션 성능 요구 사항과 일치하거나 초과할 수 있는 디스크 제품을 결정할 수 있습니다. 그런 다음 프로덕션 애플리케이션에 대해 동일한 지침을 구현할 수 있습니다.