Memverifikasi performa

Halaman ini menjelaskan cara memverifikasi performa volume menggunakan alat Fio. Untuk mengoptimalkan aplikasi, penting untuk menetapkan performa dasar untuk volume Anda.

Mengukur performa volume menggunakan Fio

Gunakan alat pembuat I/O, Fio, untuk mengukur performa dasar.

Menggunakan Fio

Fio menerapkan workload yang dapat Anda tentukan melalui antarmuka command line atau file konfigurasi. Saat berjalan, Fio menampilkan indikator progres dengan throughput saat ini dan angka input dan output per detik (IOPS). Setelah berakhir, ringkasan mendetail akan ditampilkan.

Contoh hasil Fio

Contoh berikut menunjukkan tugas penulisan acak 4k ber-thread tunggal yang berjalan selama 60 detik, yang merupakan cara yang berguna untuk mengukur latensi dasar. Pada perintah berikut, parameter --directory mengarah ke folder dengan share NetApp Volumes yang di-mount:

  $ 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

Baca baris berikut untuk mengetahui detail tentang hasil performa:

  • Latensi: lat (usec): min=382, max=28001, avg=495.96, stdev=91.89

    Latensi rata-rata adalah 495,96 mikrodetik (usec), kira-kira 0,5 md, yang merupakan latensi ideal.

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

    Contoh sebelumnya menunjukkan rata-rata 2.000 IOPS. Nilai tersebut diharapkan untuk tugas berutas tunggal dengan latensi 0,5 md (IOPS = 1000 ms/0.5 ms = 2000).

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

    Rata-rata throughput adalah 8002 KiBps, yang merupakan hasil yang diharapkan untuk 2.000 IOPS dengan ukuran blok 4 KiB (2000 1/s * 4 KiB = 8,000 KiB/s).

Mengukur latensi

Latensi adalah metrik mendasar untuk performa volume. Hal ini merupakan hasil dari kemampuan klien dan server, jarak antara klien dan server (volume Anda), dan peralatan di antaranya. Komponen utama metrik ini adalah latensi yang disebabkan oleh jarak.

Anda dapat melakukan ping ke IP volume untuk mendapatkan waktu pulang pergi, yang merupakan perkiraan kasar latensi Anda.

Latensi dipengaruhi oleh ukuran blok dan apakah Anda melakukan operasi baca atau tulis. Sebaiknya gunakan parameter berikut untuk mengukur latensi dasar antara klien dan volume Anda:

Linux

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

Windows

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

Ganti parameter rw (read/write/randread/randwrite) dan bs (ukuran blok) agar sesuai dengan beban kerja Anda. Ukuran blok yang lebih besar akan menghasilkan latensi yang lebih tinggi, dengan operasi baca lebih cepat daripada operasi tulis. Hasilnya dapat ditemukan di baris lat.

Mengukur IOPS

IOPS adalah hasil langsung dari latensi dan serentak. Gunakan salah satu tab berikut berdasarkan jenis klien Anda untuk mengukur IOPS:

Linux

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

Windows

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

Ganti parameter rw (read/write/randread/randwrite), bs (blocksize), dan iodepth (concurrency) agar sesuai dengan beban kerja Anda. Hasilnya dapat ditemukan di baris iops.

Mengukur throughput

Throughput adalah IOPS dikalikan dengan ukuran blok. Gunakan salah satu tab berikut berdasarkan jenis klien Anda untuk mengukur throughput:

Linux

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

Windows

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

Ganti parameter rw (read/write/randread/randwrite), bs (blocksize), dan iodepth (concurrency) agar sesuai dengan workload Anda. Anda hanya dapat mencapai throughput tinggi menggunakan ukuran blok 64k atau lebih besar dan konkurensi tinggi.

Langkah berikutnya

Tinjau tolok ukur performa.