Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

Windows에서 스토리지 성능 및 IOPS 측정하는 방법 완벽 가이드

스토리지 시스템의 성능을 평가하는 가장 핵심적인 지표 중 하나가 바로 IOPS(Input/Output Operations Per Second)입니다. 쉽게 말해 IOPS는 단위 시간당 스토리지, 디스크 또는 파일 시스템에서 처리되는 읽기/쓰기 작업의 횟수를 의미합니다. 이 수치가 클수록 스토리지 성능이 뛰어나다고 볼 수 있지만, 정확한 평가를 위해서는 지연 시간(latency), 처리량(throughput) 같은 다른 성능 특성도 함께 고려해야 합니다.

이 글에서는 Windows 환경에서 스토리지 성능(IOPS, 지연 시간, 처리량)을 측정하는 여러 가지 방법을 소개합니다. 로컬 하드 디스크, SSD, SMB 네트워크 폴더, CSV 볼륨, SAN/iSCSI 스토리지의 LUN 등 다양한 대상에 활용할 수 있습니다.

Windows 성능 카운터로 디스크 I/O 모니터링하기

Windows에 내장된 성능 모니터(Performance Monitor)의 디스크 성능 카운터를 사용하면 현재 스토리지의 I/O 부하를 어림짐작해볼 수 있습니다. 카운터 데이터를 수집하는 절차는 다음과 같습니다.

  1. Perfmon(성능 모니터)을 실행합니다.
  2. 데이터 수집기 집합(Data Collector Set)을 만들고 수동으로 만들기(Create manually)를 선택합니다.Windows에서 스토리지 성능 및 IOPS 측정하는 방법 완벽 가이드
  3. 데이터 로그 만들기성능 카운터(Performance counter) 체크박스를 선택합니다.Windows에서 스토리지 성능 및 IOPS 측정하는 방법 완벽 가이드
  4. 새로 만든 데이터 수집기 집합의 속성에서 Physical Disk 개체에 대해 다음 성능 카운터를 추가합니다(특정 디스크만 선택하거나 사용 가능한 모든 로컬 디스크를 선택할 수 있습니다).
    • Avg. Disk Sec./Transfer
    • Avg. Disk Queue Length
    • Avg Disk Bytes/Transfer
    • Disk Bytes/sec
    • Disk Transfers/sec
    • Split IO/sec
  5. 데이터 수집 속성은 필요에 따라 변경할 수 있습니다. 기본적으로 카운터 값은 15초마다 수집됩니다. 실시간 디스크 성능을 확인하려면 모니터링 도구 → 성능 모니터 섹션에 해당 카운터를 추가하면 됩니다.Windows에서 스토리지 성능 및 IOPS 측정하는 방법 완벽 가이드
  6. 시작(Start)을 눌러 카운터 데이터 수집을 시작하고, 분석에 충분한 정보가 모일 때까지 기다린 후 데이터 수집기를 마우스 오른쪽 버튼으로 클릭하여 중지(Stop)를 선택합니다.Windows에서 스토리지 성능 및 IOPS 측정하는 방법 완벽 가이드
  7. 수집된 성능 데이터는 Perfmon → 보고서 → 사용자 정의 → Data_Disk_IO → 마지막 집합 확인 경로에서 확인할 수 있습니다. 기본적으로 디스크 데이터는 그래프 형태로 표시됩니다.
  8. Ctrl + G 키를 누르면 보고서(Report) 모드로 전환됩니다.Windows에서 스토리지 성능 및 IOPS 측정하는 방법 완벽 가이드

Perfmon이 수집한 스토리지 성능 카운터는 어떻게 해석해야 할까요? 디스크/스토리지 성능을 빠르게 분석하려면 최소한 다음 5가지 카운터 값을 살펴봐야 합니다. 분석 시에는 현재 물리적 디스크 구성(RAID 또는 스트라이프 사용 여부, 디스크 수와 종류, 캐시 크기 등)도 함께 이해하고 있는 것이 좋습니다.

  • Disk sec/Transfer – 스토리지 장치나 디스크에서 하나의 쓰기/읽기 작업을 수행하는 데 걸리는 시간(디스크 지연 시간)입니다. 지연이 25ms(0.25초)를 초과하면 디스크 어레이가 I/O 작업을 제시간에 처리하지 못하고 있다는 의미입니다. 고부하 서버의 경우 디스크 지연 시간은 10ms(0.1초)를 넘지 않아야 합니다.
  • Disk Transfers/sec – (IOPS) 초당 읽기/쓰기 작업 횟수입니다. 디스크 접근 강도를 나타내는 핵심 지표입니다(디스크 유형별 대략적인 IOPS 값은 글 하단의 표를 참고하세요).
  • Disk Bytes/sec – 초당 디스크의 총 처리량(읽기+쓰기)입니다. 최대값은 디스크 유형에 따라 다르며, 일반 HDD는 150~250MB/s, SSD는 500~10,000MB/s 수준입니다.
  • Split IO/sec – 운영체제가 하나의 I/O 작업을 여러 디스크 요청으로 분할해야 하는 상황을 나타내는 디스크 조각화 지표입니다. 애플리케이션이 한 번의 작업으로 전송하기에는 너무 큰 데이터 블록을 요청하고 있다는 신호일 수도 있습니다.
  • Avg. Disk Queue Length – 큐에 대기 중인 읽기/쓰기 요청의 평균 개수입니다. 단일 디스크의 경우 큐 길이는 2를 초과하지 않아야 하며, 4개 디스크로 구성된 RAID 어레이라면 임계값은 8입니다.

DiskSpd로 디스크 성능과 IOPS 테스트하기

마이크로소프트는 디스크(스토리지) 시스템에 부하를 생성하고 성능을 측정하는 도구로 DiskSpd(https://aka.ms/diskspd) 유틸리티 사용을 권장합니다. 명령줄 인터페이스 기반 도구로, 지정된 드라이브 대상에 대해 여러 스레드로 I/O 작업을 수행할 수 있습니다. 필자 역시 특정 서버의 최대 읽기/쓰기 속도와 IOPS를 측정할 때 DiskSpd를 자주 사용하며, 스토리지 성능 측정 시에도 부하 생성 용도로 활용할 수 있습니다.

DiskSpd는 별도 설치가 필요 없습니다. 아카이브를 다운로드해 로컬 디스크에 압축 해제하기만 하면 됩니다. x64 비트 시스템에서는 amd64fre 디렉터리의 diskspd.exe 버전을 사용하세요.

필자가 디스크 성능 테스트에 사용하는 명령어는 다음과 같습니다.

diskspd.exe –c50G -d300 -r -w40 -t8 -o32 -b64K -Sh -L E:\diskpsdtmp.dat > DiskSpeedResults.txt

주의: diskspd.exe 실행 시 테스트 대상 시스템의 디스크와 CPU에 상당한 부하가 발생합니다. 사용자에게 성능 저하를 일으키지 않도록 실제 운영 중인 시스템에서는 피크 시간대 실행을 피하는 것이 좋습니다.

Windows에서 스토리지 성능 및 IOPS 측정하는 방법 완벽 가이드

  • -c50G – 파일 크기 50GB(스토리지 컨트롤러 캐시에 들어가지 않도록 큰 파일을 사용하는 것이 좋습니다).
  • -d300 – 테스트 지속 시간(초).
  • -r – 무작위 읽기/쓰기 작업(순차 접근을 테스트하려면 -s 사용).
  • -t8 – 스레드 수.
  • -w40 – 쓰기 대 읽기 작업 비율 40%/60%.
  • -o32 – 큐 길이.
  • -b64K – 블록 크기.
  • -Sh – 캐시 미사용.
  • -L – 지연 시간 측정.
  • E:\diskpsdtmp.dat – 테스트 파일 경로.

스트레스 테스트가 완료되면 출력 표에서 스토리지 성능의 평균값을 확인할 수 있습니다.

필자의 테스트에서 얻은 성능 데이터(Total IO 표 기준)는 다음과 같습니다.

  • MiB/s — 241 (약 252Mb/s, 나쁘지 않음)
  • IOPS — 3866 (매우 양호!)
  • 평균 지연 시간 — 66.206ms (다소 높은 편)

Windows에서 스토리지 성능 및 IOPS 측정하는 방법 완벽 가이드

Read IO 섹션과 Write IO 섹션을 통해 읽기와 쓰기 작업의 개별 값도 각각 확인할 수 있습니다. diskspd로 여러 디스크나 스토리지 LUN을 테스트해보면 성능을 서로 비교하거나, 업무 요구 사항에 맞는 성능의 어레이를 선택하는 데 도움이 됩니다.

PowerShell로 스토리지 IOPS, 처리량, 지연 시간 측정하기

마이크로소프트 MVP인 Mikael Nystrom이 만든 PowerShell 스크립트를 활용하는 방법도 있습니다. 이 스크립트는 사실상 SQLIO.exe(파일 스토리지 성능 테스트 도구)의 확장 기능입니다.

참고: 2015년 12월 마이크로소프트는 이 도구의 지원 종료를 발표하고 SQLIO를 더 범용적인 Diskspd로 대체했으며, 공식 웹사이트에서 배포 파일을 삭제했습니다. 따라서 sqlio.exe는 직접 검색해서 구하거나, PowerShell 스크립트가 포함된 아카이브에서 다운로드해야 합니다.

SQLIO.exeDiskPerformance.ps1 두 개의 파일이 담긴 아카이브(disk_perf_iops.ZIP — 74KB)를 다운로드해 원하는 폴더에 압축 해제합니다.

Windows에서 스토리지 성능 및 IOPS 측정하는 방법 완벽 가이드

PowerShell 스크립트로 디스크 성능과 IOPS를 측정하는 실행 예시는 다음과 같습니다.

.\DiskPerformance.ps1 -TestFileName test.dat –TestFileSizeInGB 1 -TestFilepath C:\temp -TestMode Get-LargeIO -FastMode True -RemoveTestFile True -OutputFormat Out-GridView

Windows에서 스토리지 성능 및 IOPS 측정하는 방법 완벽 가이드

스크립트 인수를 살펴보면 다음과 같습니다.

  • –TestFileName test.dat – FSUTIL 도구로 생성되는 파일의 이름.
  • –TestFileSizeInGB 1 – 테스트 파일 크기. 가능한 값은 1.5, 10, 50, 100, 500, 1,000GB입니다. 파일 크기는 반드시 스토리지 시스템 캐시보다 커야 합니다. 그렇지 않으면 디스크가 아닌 캐시 데이터에 대한 IOPS가 측정됩니다.
  • -TestFilepath C:\Temp – 성능을 측정할 디스크와 테스트 파일이 생성될 폴더를 지정합니다. SMB 네트워크 공유 폴더의 UNC 경로도 지정할 수 있습니다.
  • -TestMode Get-LargeIO – 입출력 측정 옵션은 두 가지입니다. Get-SmallIO는 IOPS 측정용, Get-LargeIO는 데이터 전송률 측정용입니다. SmallIO와 LargeIO의 차이는 측정 시 블록 크기(각각 8KB와 512KB)와 접근 방식(Random과 Sequential)에 있습니다.
  • -FastMode True – Fastmode에서는 각 테스트가 10초씩 진행되며, 그렇지 않으면 60초가 걸립니다.
  • -RemoveTestFile True – 테스트 종료 후 테스트 파일을 삭제합니다.
  • -OutputFormat Out-GridView – 테스트 결과를 PowerShell 콘솔(Format-Table)로 표시하거나 별도의 그래픽 창(Out-Gridview)으로 표시할 수 있습니다.

Windows에서 스토리지 성능 및 IOPS 측정하는 방법 완벽 가이드

필자의 테스트 환경(SAN으로 연결된 HP MSA 2040의 VMFS 데이터스토어에 있는 vmdk 가상 디스크)에서는 디스크 어레이가 평균 IOPS 약 15,000, 데이터 전송률(처리량) 약 5Gbit/s를 기록했습니다.

아래 표는 디스크 유형별 대략적인 IOPS 값입니다.

유형IOPS
SSD(SLC)6000
SSD(MLC)1000
15K RPM175-200
10K RPM125-150
7.2K RPM50-75
10K RPM 드라이브 6개 RAID51000

참고로 주요 마이크로소프트 서비스에 권장되는 디스크 성능(IOPS) 기준은 다음과 같습니다.

  1. Microsoft Exchange 2010 – 사용자 5,000명이 각각 하루에 메일 75건을 수신하고 30건을 발송하는 경우 최소 3,750 IOPS 필요;
  2. Microsoft SQL 2008 Server – 초당 3,500 SQL 트랜잭션(TPS) 처리 시 28,000 IOPS 필요;
  3. 일반 Windows 애플리케이션 서버 – 사용자 10~100명 기준 10~40 IOPS 필요.