환경에서 실적 지표 측정

이 페이지에서는 볼륨 성능을 측정하는 방법을 자세히 설명합니다.

Fio를 사용하여 볼륨 성능 측정

I/O 생성기 도구인 Fio를 사용하여 기준 성능을 측정합니다.

Fio 사용

Fio는 명령줄 인터페이스 또는 구성 파일을 통해 지정할 수 있는 워크로드를 적용합니다. 실행 중 Fio에는 현재 처리량과 초당 입력 및 출력 (IOPS) 숫자가 포함된 진행률 표시기가 표시됩니다. 완료되면 자세한 요약이 표시됩니다.

Fio 결과 예시

다음 예는 기준 지연 시간을 측정하는 데 유용한 단일 스레드 4K 무작위 쓰기 작업이 60초 동안 실행되는 것을 보여줍니다. 다음 명령어에서 --directory 매개변수는 마운트된 NetApp Volumes 공유가 있는 폴더를 가리킵니다.

  $ FIO_COMMON_ARGS=--size=10g --fallocate=none --direct=1 --runtime=60 --time_based --ramp_time=5
  $ fio $FIO_COMMON_ARGS --directory=/netapp --ioengine=libaio --rw=randwrite --bs=4k --iodepth=1 --name=nv
  cvs: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
  fio-3.28
  Starting 1 process
  cvs: Laying out IO file (1 file / 10240MiB)
  Jobs: 1 (f=1): [w(1)][100.0%][w=7856KiB/s][w=1964 IOPS][eta 00m:00s]
  cvs: (groupid=0, jobs=1): err= 0: pid=1891: Wed Dec 21 14:56:37 2022
    write: IOPS=1999, BW=7999KiB/s (8191kB/s)(469MiB/60001msec); 0 zone resets
      slat (usec): min=4, max=417, avg=12.06, stdev= 5.71
      clat (usec): min=366, max=27978, avg=483.59, stdev=91.34
      lat (usec): min=382, max=28001, avg=495.96, stdev=91.89
      clat percentiles (usec):
      |  1.00th=[  408],  5.00th=[  429], 10.00th=[  437], 20.00th=[  449],
      | 30.00th=[  461], 40.00th=[  469], 50.00th=[  482], 60.00th=[  490],
      | 70.00th=[  498], 80.00th=[  515], 90.00th=[  529], 95.00th=[  553],
      | 99.00th=[  611], 99.50th=[  652], 99.90th=[  807], 99.95th=[  873],
      | 99.99th=[ 1020]
    bw (  KiB/s): min= 7408, max= 8336, per=100.00%, avg=8002.05, stdev=140.09, samples=120
    iops        : min= 1852, max= 2084, avg=2000.45, stdev=35.06, samples=120
    lat (usec)   : 500=70.67%, 750=29.17%, 1000=0.15%
    lat (msec)   : 2=0.01%, 4=0.01%, 50=0.01%
    cpu          : usr=2.04%, sys=3.25%, ctx=120561, majf=0, minf=58
    IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
      submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
      complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
      issued rwts: total=0,119984,0,0 short=0,0,0,0 dropped=0,0,0,0
      latency   : target=0, window=0, percentile=100.00%, depth=1

  Run status group 0 (all jobs):
    WRITE: bw=7999KiB/s (8191kB/s), 7999KiB/s-7999KiB/s (8191kB/s-8191kB/s), io=469MiB (491MB), run=60001-60001msec

실적 결과에 관한 자세한 내용은 다음 행을 참고하세요.

  • 지연 시간: lat (usec): min=382, max=28001, avg=495.96, stdev=91.89

    평균 지연 시간은 495.96마이크로초 (usec)로, 약 0.5ms이며 이는 이상적인 지연 시간입니다.

  • IOPS: min= 1852, max= 2084, avg=2000.45, stdev=35.06, samples=120

    위의 예에서는 평균 2,000개의 IOPS를 보여줍니다. 이 값은 지연 시간이 0.5ms인 단일 스레드 작업 (IOPS = 1000 ms/0.5 ms = 2000)에서 예상됩니다.

  • 처리량: bw ( KiB/s): min= 7408, max=8336, per=100.00%, avg=8002.05, stdev=140.09

    처리량 평균은 8,002KiBps로, 블록 크기가 4KiB인 2,000IOPS의 예상 결과입니다 (2000 1/s * 4 KiB = 8,000 KiB/s).

지연 시간 측정

지연 시간은 볼륨 성능의 기본 측정항목입니다. 이는 클라이언트와 서버 기능, 클라이언트와 서버 간의 거리 (볼륨), 그 사이의 장비로 인해 발생합니다. 이 측정항목의 주요 구성요소는 거리로 인한 지연 시간입니다.

볼륨의 IP를 핑하여 왕복 시간을 확인할 수 있습니다. 왕복 시간은 지연 시간의 대략적인 추정치입니다.

지연 시간은 블록 크기와 읽기 또는 쓰기 작업 여부에 영향을 받습니다. 클라이언트와 볼륨 간의 기준 지연 시간을 측정하려면 다음 매개변수를 사용하는 것이 좋습니다.

LinuxWindows
fio --directory=/netapp \
 --ioengine=libaio \
 --rw=randwrite \
 --bs=4k --iodepth=1 \
 --size=10g \
 --fallocate=none \
 --direct=1 \
 --runtime=60 \
 --time_based \
 --ramp_time=5 \
 --name=latency
fio --directory=Z\:\
--ioengine=windowsaio
--thread
--rw=randwrite
--bs=4k
--iodepth=1
--size=10g
--fallocate=none
--direct=1
--runtime=60
--time_based
--ramp_time=5
--name=latency

워크로드에 맞게 rw (read/write/randread/randwrite) 및 bs (블록 크기) 매개변수를 바꿉니다. 블록 크기가 클수록 지연 시간이 길어지고 읽기가 쓰기보다 빨라집니다. 결과는 lat 행에서 확인할 수 있습니다.

IOPS 측정

IOPS는 지연 시간과 동시 실행의 직접적인 결과입니다. 클라이언트 유형에 따라 다음 탭 중 하나를 사용하여 IOPS를 측정합니다.

LinuxWindows
fio --directory=/netapp \
--ioengine=libaio \
--rw=randread \
--bs=4k \
--iodepth=32 \
--size=10g \
--fallocate=none \
--direct=1 \
--runtime=60 \
--time_based \
--ramp_time=5 \
--name=iops
fio --directory=Z\:\
--ioengine=windowsaio
--thread
--rw=randread
--bs=4k
--iodepth=32
--size=10g
--fallocate=none
--direct=1
--runtime=60
--time_based
--ramp_time=5
--numjobs=16
--name=iops

워크로드에 맞게 rw (read/write/randread/randwrite), bs (blocksize), iodepth (동시 실행) 매개변수를 바꿉니다. 결과는 iops 행에서 확인할 수 있습니다.

처리량 측정

처리량은 IOPS에 블록 크기를 곱한 값입니다. 클라이언트 유형에 따라 다음 탭 중 하나를 사용하여 처리량을 측정합니다.

LinuxWindows
fio --directory=/netapp \
--ioengine=libaio \
--rw=read \
--bs=64k \
--iodepth=32 \
--size=10g \
--fallocate=none \
--direct=1 \
--runtime=60 \
--time_based \
--ramp_time=5 \
--numjobs=16 \
--name=throughput
fio --directory=Z\:\
--ioengine=windowsaio
--thread
--rw=read
--bs=64k
--iodepth=32
--size=10g
--fallocate=none
--direct=1
--runtime=60
--time_based
--ramp_time=5
--numjobs=16
--name=throughput

워크로드에 맞게 rw (read/write/randread/randwrite), bs (blocksize), iodepth (동시 실행) 매개변수를 바꿉니다. 블록 크기가 64k 이상이고 동시 실행이 많은 경우에만 높은 처리량을 달성할 수 있습니다.

다음 단계

성능 벤치마크를 검토합니다.