다음을 통해 공유


diskidlehistogram

이 작업은 모든 디스크 작업 및 유휴 시간을 표시하는 히스토그램을 생성합니다.

-a diskidlehistogram [-disknum <n>] [-buckets B1 B2 ... Bn] [-idletimeout T1 T2 ... Tn] [-idletheshold <t>] [-spindownOverhead [t]] [-spinupOverhead [t]] [-exc_file File1 File2 ... FileN] [-exc_filestr String1 String2 ... StringN] [-exc_filere <regex>]

옵션

-disknum<n>
n은 디스크 번호(0 기반 디스크 인덱스)를 나타냅니다. 기본값은 모든 디스크에 대한 히스토그램을 출력하는 것입니다.

-bucketsB1 B2 … Bn
인수는 유휴 길이의 다양한 범위를 초 단위로 나타냅니다. 기본 버킷은 다음과 같습니다.

  • [0 s, 1 s]

  • [1 s, 5 s]

  • [5 s, 60 s]

  • [60 s, 180 s]

  • [180 s, 600 s]

  • [600 s, 900 s]

  • [900 s, 1200 s]

  • [1200 s, 1800 s]

  • [1800 s, +inf]

다음 테이블의 예제 값에 설명된 대로 디스크 유휴 히스토그램은 디스크 유휴 시간 분포와 유휴 기간 길이의 다양한 범위에 대한 유휴 기간 수를 표시합니다.

1초 미만 1~600초 600초 초과

유휴 시간

1000

1000

2000

총 유휴 시간의 백분율

25

25

50

유휴 개수

90

5

5

총 유휴 개수의 백분율

90

5

5

첫 번째 행에는 히스토그램의 버킷인 유휴 길이의 다양한 범위가 표시됩니다.

두 번째 행에는 각 버킷의 누적 유휴 시간이 표시됩니다. 예를 들어 1초 미만의 모든 유휴 기간에 대한 누적 유휴 시간은 1,000초입니다.

세 번째 행은 버킷의 유휴 시간을 총 유휴 시간으로 나누어 각 버킷의 유휴 시간 백분율을 계산합니다.

네 번째 행은 각 버킷에 대해 캡처된 유휴 기간의 수입니다. 이 예제에서는 1초 미만의 유휴 기간이 90개 있습니다.

마지막 행은 버킷의 유휴 기간 수를 총 유휴 기간 수로 나누어 각 버킷의 유휴 기간 백분율을 계산합니다.

다음 명령은 다음 목록에서 버킷을 생성합니다. -buckets 1s 5s 60s 180s:

  • [0, 1 s]

  • [1 s, 5 s]

  • [5 s, 60 s]

  • [60 s, 180 s]

  • [180 s, +inf]

-idletimeoutT1 T2 … Tn
인수는 유휴 시간 제한을 초 단위로 나타냅니다. 기본값은 5, 60, 180, 600, 1800입니다.

-idletheshold<t>
인수는 유휴 임계값을 초 단위로 나타냅니다. 이 임계값보다 짧은 유휴 기간은 무시됩니다.

-spindownOverhead[t]
인수를 지정하지 않으면 기본값은 0입니다.

다음 테이블에 나와 있는 것처럼 디스크 I/O 타임스탬프 시퀀스와 지정된 유휴 시간 제한을 사용하여 디스크가 작동 중지되는 시기와 스핀다운(Spin Down) 상태로 유지될 수 있는 시간을 계산할 수 있습니다.

시간 제한(초) 5 60 180 600

예상 스핀다운 기회 시간(초)

3800

2000

1000

500

예상 스핀다운 기회 수

500

100

50

10

첫 번째 행은 스핀다운 시간을 예측하기 위해 관심 있는 유휴 시간 제한 값을 표시합니다. 두 번째 행은 각 시간 제한에 해당하는 예상 총 스핀다운 시간을 표시합니다. 이 예제에서 5초 시간 제한으로 인해 총 스핀다운 시간은 3,800초입니다. 세 번째 행은 각 시간 제한 값에 대해 디스크가 스핀다운하는 예상 횟수를 표시합니다.

-spinupOverheadT
인수를 지정하지 않으면 기본값은 0초입니다.

-exc_fileFile1 File1 … FileN
제공된 전체 파일 경로와 일치하는 파일은 제외됩니다. 제외하려는 각 파일에 대한 전체 파일 경로를 지정해야 합니다.

-exc_filestrString1 String2 … StringN
제공된 문자열 중 하나 이상이 포함된 파일은 제외됩니다.

-exc_filere<regx>
제공된 ATL 정규식과 일치하는 파일은 제외됩니다. 예를 들어 “.*\.dll” 식을 지정하여 .dll로 끝나는 모든 파일을 무시할 수 있습니다.

참고 새 줄을 정의할 때는 반환 문자를 포함해야 합니다. 두 문자(캐리지 리턴 = r; 줄 바꿈 = n)를 모두 포함하여 줄 종결자를 만듭니다. 이는 관심 영역 파일을 만들 때 유용합니다.

설명

디스크 I/O가 다른 파일에 대한 디스크 I/O에 대한 응답으로 표시되는 몇 가지 시스템 파일이 있습니다. 이러한 시스템 파일에는 다음이 포함됩니다.

  • $LogFiles

  • $Mft

  • $Bitmap

  • lastalive0.dat

  • lastalive1.dat

  • $UsnJrnl:$J

위의 시스템 파일에서 특정 디스크 I/O를 유발하는 디스크 I/O를 다른 파일로 구분하기 어려울 수 있습니다. 따라서 제외한 파일의 영향을 확인하려면 이러한 시스템 파일도 제외해야 합니다. 이러한 시스템 파일의 디스크 I/O는 다른 디스크 I/O에 응답하거나 “피기백”(Piggyback)하므로 이러한 시스템 파일 자체만 무시해도 디스크 유휴 히스토그램이 크게 변경되지 않습니다.

정렬 및 분석을 위해 해당 작업의 출력을 스프레드시트로 가져올 수 있습니다. 출력에 대해 다음과 같은 두 가지 추가 메트릭이 제공됩니다.

AvgIOInterval
특정 파일의 경우 이 파일에 대한 두 후속 I/O 사이의 평균 간격입니다. 파일에 1초 미만의 간격과 같은 짧은 I/O 간격이 있는 경우 이 메트릭은 오해의 소지가 있을 수 있습니다. 이 파일에 30분과 같이 긴 I/O 간격이 있더라도 평균 IO 간격이 10분과 같이 중간 정도의 짧은 I/O 간격이 있는 다른 파일보다 훨씬 더 나쁘게 보일 수 있습니다. 이 경우 -idlethreshold T를 사용하여 분석에서 1초 미만의 유휴 기간을 제거할 수 있습니다.

MaxIOInterval
각 파일에 대해 이 파일에 대한 두 개의 후속 I/O 사이의 최대 간격입니다. 출력은 기본적으로 이 메트릭을 기준으로 정렬됩니다. 하나의 긴 I/O 간격이 있는 파일은 여전히 평균적으로 자주 I/O가 있을 수 있습니다.

참고 디스크 활동을 포괄적으로 파악하려면 이러한 메트릭과 파일별 히스토그램을 모두 사용합니다.

다른 실제 디스크(또는 USB 플래시 드라이브와 같은 디바이스)를 사용하여 추적을 수집하여 조사 중인 디스크를 변경하지 마세요.

예제

다음 예제에서는 기본 매개 변수와 함께 이 작업을 일반적으로 사용하는 방법을 보여 줍니다.

Xperf -i Trace.etl -a diskidlehistogram > output.csv

심층 분석이 필요한 경우에 대비하여 레지스트리/cswitch/stacks와 같은 관련 정보뿐만 아니라 디스크 I/O에 대한 정보를 수집합니다. Compact_cswitch는 추적 파일 크기를 줄이는 데 사용할 수 있습니다. 다음 예제에서는 권장되는 Xperf 플래그 집합을 보여 줍니다.

xperf -on dispatcher+PROC_THREAD+LOADER+CSWITCH+COMPACT_CSWITCH +registry+DISK_IO+DISK_IO_INIT+FILEIO -stackwalk cswitch+readythread+DiskReadInit+DiskWriteInit+DiskFlushInit -buffersize 1024
sleep <desired trace time in seconds> or run scenario
xperf -d trace.etl

Xperf 작업