Membuat benchmark performa persistent disk di VM Linux


Dokumen ini menjelaskan cara mengukur performa Persistent Disk di virtual machine (VM) Linux. Untuk VM Windows, lihat Benchmark performa persistent disk di VM Windows.

Untuk mengukur performa Persistent Disk di Linux, gunakan penguji I/O Fleksibel (FIO), bukan alat tolok ukur disk lainnya seperti dd. Secara default, dd menggunakan kedalaman antrean I/O yang sangat rendah, dan mungkin tidak menguji performa disk secara akurat. Secara umum, hindari penggunaan perangkat khusus seperti /dev/urandom, /dev/random, dan /dev/zero dalam benchmark performa Persistent Disk Anda.

Untuk mengukur IOPS dan throughput disk yang digunakan pada instance yang berjalan, tetapkan tolok ukur sistem file dengan konfigurasi yang dimaksudkan. Gunakan opsi ini untuk menguji workload yang realistis tanpa kehilangan isi disk yang sudah ada. Perhatikan bahwa saat Anda menetapkan tolok ukur sistem file pada disk yang sudah ada, ada banyak faktor khusus untuk lingkungan pengembangan Anda yang dapat memengaruhi hasil tolok ukur, dan Anda mungkin tidak mencapai batas performa disk.

Untuk mengukur performa mentah persistent disk, tetapkan tolok ukur perangkat blok secara langsung. Gunakan opsi ini untuk membandingkan performa disk mentah dengan batas performa disk.

Perintah berikut berfungsi dengan sistem operasi Debian atau Ubuntu dengan pengelola paket apt.

Menetapkan tolok ukur IOPS dan throughput disk pada instance yang sedang berjalan

Jika Anda ingin mengukur IOPS dan throughput untuk workload yang realistis pada disk aktif pada instance yang berjalan tanpa kehilangan isi disk Anda, tetapkan tolok ukur terhadap direktori baru pada sistem file yang ada.

  1. Terhubung ke instance.

  2. Instal dependensi:

    sudo apt update
    sudo apt install -y fio
    
  3. Di terminal, cantumkan disk yang terpasang ke VM Anda dan temukan disk yang ingin diuji. Jika persistent disk Anda belum diformat, format dan pasang disk.

    sudo lsblk
    
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   10G  0 disk
    └─sda1   8:1    0   10G  0 part /
    sdb      8:32   0  2.5T  0 disk /mnt/disks/mnt_dir
    

    Dalam contoh ini, kami menguji persistent disk SSD sebesar 2.500 GB dengan ID perangkat sdb.

  4. Buat direktori baru, fiotest, di disk. Dalam contoh ini, disk dipasang di /mnt/disks/mnt_dir:

    TEST_DIR=/mnt/disks/mnt_dir/fiotest
    sudo mkdir -p $TEST_DIR
    
  5. Uji throughput tulis dengan melakukan penulisan berurutan pada beberapa aliran data paralel (16+), menggunakan ukuran blok I/O 1 MB dan kedalaman I/O minimal 64:

    sudo fio --name=write_throughput --directory=$TEST_DIR --numjobs=16 \
    --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio \
    --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \
    --group_reporting=1 --iodepth_batch_submit=64 \
    --iodepth_batch_complete_max=64
    
  6. Uji IOPS penulisan dengan melakukan penulisan acak, menggunakan ukuran blok I/O 4 KB dan kedalaman I/O minimal 256:

     sudo fio --name=write_iops --directory=$TEST_DIR --size=10G \
    --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 \
    --verify=0 --bs=4K --iodepth=256 --rw=randwrite --group_reporting=1  \
    --iodepth_batch_submit=256  --iodepth_batch_complete_max=256
    
  7. Uji throughput baca dengan melakukan pembacaan berurutan dengan beberapa aliran data paralel (16+), menggunakan ukuran blok I/O 1 MB, dan kedalaman I/O minimal 64:

    sudo fio --name=read_throughput --directory=$TEST_DIR --numjobs=16 \
    --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio \
    --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \
    --group_reporting=1 \
    --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
    
  8. Uji IOPS baca dengan melakukan pembacaan acak, menggunakan ukuran blok I/O 4 KB dan kedalaman I/O minimal 256:

    sudo fio --name=read_iops --directory=$TEST_DIR --size=10G \
    --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 \
    --verify=0 --bs=4K --iodepth=256 --rw=randread --group_reporting=1 \
    --iodepth_batch_submit=256  --iodepth_batch_complete_max=256
    
  9. Pembersihan:

    sudo rm $TEST_DIR/write* $TEST_DIR/read*
    

Menetapkan tolok ukur performa persistent disk mentah

Jika Anda ingin mengukur performa persistent disk secara mandiri di luar lingkungan pengembangan, uji performa baca dan tulis untuk perangkat blok pada persistent disk dan VM sekali pakai.

Perintah berikut mengasumsikan persistent disk SSD sebesar 2.500 GB terpasang ke VM Anda. Jika ukuran perangkat Anda berbeda, ubah nilai argumen --filesize. Ukuran disk ini diperlukan untuk mencapai batas throughput VM 32 vCPU. Untuk mengetahui informasi selengkapnya, lihat Performa block storage.

  1. Buat dan mulai instance VM.

  2. Tambahkan Persistent Disk ke instance VM yang ingin Anda ukur.

  3. Terhubung ke instance.

  4. Instal dependensi:

    sudo apt-get update
    sudo apt-get install -y fio
    
  5. Isi disk dengan data yang bukan nol. Pembacaan persistent disk dari blok kosong memiliki profil latensi yang berbeda dengan blok yang berisi data. Sebaiknya isi disk sebelum menjalankan tolok ukur latensi baca.

    # Running this command causes data loss on the second device.
    # We strongly recommend using a throwaway VM and disk.
    sudo fio --name=fill_disk \
      --filename=/dev/sdb --filesize=2500G \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --bs=128K --iodepth=64 --rw=randwrite \
      --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
    
  6. Uji bandwidth operasi tulis dengan melakukan penulisan berurutan pada beberapa aliran data paralel (16+), menggunakan ukuran I/O 1 MB dan memiliki kedalaman I/O sebesar 64 atau lebih besar.

    # Running this command causes data loss on the second device.
    # We strongly recommend using a throwaway VM and disk.
    sudo fio --name=write_bandwidth_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --bs=1M --iodepth=64 --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \
      --rw=write --numjobs=16 --offset_increment=100G
    
  7. Uji IOPS tulis. Untuk mencapai IOPS PD maksimum, Anda harus mempertahankan antrean I/O yang dalam. Jika, misalnya, latensi tulis adalah 1 milidetik, VM dapat mencapai maksimal 1.000 IOPS untuk setiap I/O yang sedang beroperasi. Untuk mencapai 15.000 IOPS tulis, VM harus mempertahankan setidaknya 15 I/O yang sedang beroperasi. Jika disk dan VM Anda dapat mencapai 30.000 IOPS tulis, jumlah I/O yang sedang beroperasi harus minimal 30 I/O. Jika ukuran I/O lebih besar dari 4 KB, VM mungkin mencapai batas bandwidth sebelum mencapai batas IOPS.

    # Running this command causes data loss on the second device.
    # We strongly recommend using a throwaway VM and disk.
    sudo fio --name=write_iops_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --bs=4K --iodepth=256 --rw=randwrite \
      --iodepth_batch_submit=256 --iodepth_batch_complete_max=256
    
  8. Uji latensi tulis. Saat menguji latensi I/O, VM tidak boleh mencapai bandwidth atau IOPS maksimum. Jika tidak, latensi yang diamati tidak akan mencerminkan latensi I/O persistent disk yang sebenarnya. Misalnya, jika batas IOPS tercapai pada kedalaman I/O 30 dan perintah fio telah melipatgandakannya, total IOPS tetap sama dan latensi I/O yang dilaporkan meningkat dua kali lipat.

    # Running this command causes data loss on the second device.
    # We strongly recommend using a throwaway VM and disk.
    sudo fio --name=write_latency_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --bs=4K --iodepth=4 --rw=randwrite --iodepth_batch_submit=4 \
      --iodepth_batch_complete_max=4
    
  9. Uji bandwidth operasi baca dengan melakukan operasi baca berurutan dengan beberapa aliran data paralel (16+), menggunakan ukuran I/O sebesar 1 MB dan memiliki kedalaman I/O sebesar 64 atau lebih.

    sudo fio --name=read_bandwidth_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --bs=1M --iodepth=64 --rw=read --numjobs=16 --offset_increment=100G \
      --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
    
  10. Uji IOPS baca. Untuk mencapai IOPS PD maksimum, Anda harus mempertahankan antrean I/O yang dalam. Misalnya, jika ukuran I/O lebih besar dari 4 KB, VM mungkin mencapai batas bandwidth sebelum mencapai batas IOPS. Untuk mencapai IOPS baca maksimum yang berjumlah 100 ribu, tentukan --iodepth=256 untuk pengujian ini.

    sudo fio --name=read_iops_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --bs=4K --iodepth=256 --rw=randread \
      --iodepth_batch_submit=256 --iodepth_batch_complete_max=256
    
  11. Uji latensi baca. Penting untuk mengisi disk dengan data guna mendapatkan pengukuran latensi yang realistis. Penting bahwa VM tidak mencapai IOPS atau batas throughput selama pengujian ini karena setelah persistent disk mencapai batas saturasinya, VM akan mendorong kembali I/O yang masuk dan hal ini tercermin sebagai peningkatan buatan dalam Latensi I/O.

    sudo fio --name=read_latency_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --bs=4K --iodepth=4 --rw=randread \
      --iodepth_batch_submit=4 --iodepth_batch_complete_max=4
    
  12. Uji bandwidth operasi baca berurutan.

    sudo fio --name=read_bandwidth_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --numjobs=4 --thread --offset_increment=500G \
      --bs=1M --iodepth=64 --rw=read \
      --iodepth_batch_submit=64  --iodepth_batch_complete_max=64
    
  13. Uji bandwidth operasi tulis berurutan.

    sudo fio --name=write_bandwidth_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --numjobs=4 --thread --offset_increment=500G \
      --bs=1M --iodepth=64 --rw=write \
      --iodepth_batch_submit=64  --iodepth_batch_complete_max=64
    
  14. Bersihkan Persistent Disk dan VM yang dibuang:

    1. Hapus disk yang digunakan untuk performa benchmark.
    2. Hapus VM yang dibuat untuk performa benchmark.

Langkah selanjutnya