Menetapkan tolok ukur performa Hyperdisk


Untuk menetapkan tolok ukur performa Hyperdisk, gunakan Penguji I/O fleksibel (FIO) dan bukan alat tolok ukur disk lainnya seperti dd. Secara default, dd menggunakan kedalaman antrean I/O yang sangat rendah, sehingga sulit untuk memastikan bahwa tolok ukur menghasilkan jumlah byte dan operasi I/O yang memadai untuk menguji performa disk secara akurat.

Selain itu, perangkat khusus yang digunakan dengan dd sering kali sangat lambat dan tidak mencerminkan performa disk secara akurat. Secara umum, hindari penggunaan perangkat khusus seperti /dev/urandom, /dev/random, dan /dev/zero dalam tolok ukur performa Hyperdisk 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 Hyperdisk, 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 VM yang berjalan tanpa kehilangan isi disk Anda, tetapkan tolok ukur terhadap direktori baru pada sistem file yang ada.

Menyiapkan pengujian

  1. Terhubung ke instance.

  2. Instal dependensi:

    sudo apt update
    sudo apt install -y fio
    
  3. Jika Hyperdisk Anda belum diformat, format dan pasang disk.

  4. Di terminal, cantumkan disk yang terpasang ke VM Anda dan temukan disk yang ingin diuji.

    sudo lsblk
    

    Perintah sebelumnya menghasilkan output yang mirip dengan berikut ini:

    NAME         MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    nvme0n1      259:0    0    10G  0 disk
    ├─nvme0n1p1  259:1    0   9.9G  0 part  /
    ├─nvme0n1p14 259:2    0     4M  0 part
    └─nvme0n1p15 259:3    0   106M  0 part  /boot/efi
    nvme0n2      259:4    0   3.4T  0 disk
    

    Dalam contoh ini, kami menguji volume Hyperdisk Extreme 3.500 GiB dengan nama perangkat nvme0n2.

  5. 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
    
  6. Jika VM menggunakan antarmuka disk NVMe untuk lampiran Hyperdisk (jika nama disk mentah diawali dengan nvme), lakukan langkah-langkah berikut untuk mendapatkan jumlah node NUMA yang tersedia untuk VM.

    Strategi tolok ukur untuk disk NVMe berbeda untuk VM yang hanya memiliki satu node NUMA dan VM yang memiliki lebih dari satu node NUMA. Saat menguji performa Hyperdisk menggunakan antarmuka disk NVMe, hanya 256 ukuran antrean NVMe yang dialokasikan per antrean. Karena terbatasnya ukuran antrean NVMe yang tersedia dan potensi pertentangan yang berasal dari disk lain yang terpasang ke VM yang sama, pengujian tolok ukur ini menggunakan dua antrean disk NVMe untuk mempertahankan ukuran antrean gabungan yang mampu menangani iodepth 256.

    1. Dapatkan jumlah node NUMA.

      lscpu | grep -i 'numa node(s)' | awk '{print $NF}'
      
    2. Jika VM hanya memiliki 1 node NUMA, dapatkan pemetaan antrean CPU ke NVMe. Anda akan menggunakan informasi ini nanti untuk parameter --cpus-allowed.

      QUEUE_1_CPUS=$(cat /sys/class/block/nvme0n2/mq/*/cpu_list | sed -n 1p | tr -d " \t")
      QUEUE_2_CPUS=$(cat /sys/class/block/nvme0n2/mq/*/cpu_list | sed -n 2p | tr -d " \t")
      

Menguji throughput tulis

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.

  1. Jika Hyperdisk menggunakan antarmuka SCSI:

    sudo fio --directory=$TEST_DIR \
    --numjobs=16 --size=10G --time_based \
    --runtime=5m --ramp_time=10s --ioengine=libaio \
    --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \
    --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \
    --name=write_throughput
    
  2. Jika Hyperdisk menggunakan antarmuka NVMe:

    1. Jika VM hanya memiliki satu node NUMA, gunakan perintah berikut:

      sudo fio --directory=$TEST_DIR --numjobs=8 \
      --size=10G --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
      --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \
      --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \
      --cpus_allowed_policy=split \
      --group_reporting \
      --name=write_throughput --cpus_allowed=$QUEUE_1_CPUS \
      --name=write_throughput_2 --cpus_allowed=$QUEUE_2_CPUS
      
    2. Jika VM memiliki lebih dari satu node NUMA, gunakan perintah berikut:

      sudo fio --directory=$TEST_DIR --numjobs=8 \
      --size=10G --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
      --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \
      --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \
      --group_reporting \
      --name=write_throughput --numa_cpu_nodes=0 \
      --name=write_throughput_2 --numa_cpu_nodes=1
      

Menguji IOPS tulis

Uji IOPS penulisan dengan melakukan penulisan acak, menggunakan ukuran blok I/O 4 KB dan kedalaman I/O minimal 256.

  1. Jika Hyperdisk dipasang menggunakan antarmuka SCSI:

    sudo fio --directory=$TEST_DIR \
    --numjobs=16 --size=10G -time_based \
    --runtime=5m --ramp_time=10s --ioengine=libaio \
    --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \
    --iodepth_batch_submit=256  --iodepth_batch_complete_max=256 \
    --name=write_iops
    
  2. Jika Hyperdisk menggunakan antarmuka NVMe:

    1. Jika VM hanya memiliki satu node NUMA, gunakan perintah berikut:

      sudo fio --directory=$TEST_DIR --numjobs=8 \
      --size=10G --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
      --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \
      --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \
      --cpus_allowed_policy=split \
      --group_reporting \
      --name=write_iops --cpus_allowed=$QUEUE_1_CPUS \
      --name=write_iops_2 --cpus_allowed=$QUEUE_2_CPUS
      
    2. Jika VM memiliki lebih dari satu node NUMA, gunakan perintah berikut:

      sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \
      --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
      --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \
      --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \
      --group_reporting \
      --name=write_iops --numa_cpu_nodes=0 \
      --name=write_iops_2 --numa_cpu_nodes=1
      

Menguji throughput baca

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.

  1. Jika Hyperdisk menggunakan antarmuka SCSI:

    sudo fio --directory=$TEST_DIR \
    --numjobs=16 --size=10G --time_based \
    --runtime=5m --ramp_time=10s --ioengine=libaio \
    --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \
    --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \
    --name=read_throughput
    
  2. Jika Hyperdisk menggunakan antarmuka NVMe:

    1. Jika VM hanya memiliki satu node NUMA, gunakan perintah berikut:

      sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \
      --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
      --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \
      --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \
      --cpus_allowed_policy=split \
      --group_reporting \
      --name=read_throughput --cpus_allowed=$QUEUE_1_CPUS \
      --name=read_throughput_2 --cpus_allowed=$QUEUE_2_CPUS
      
    2. Jika VM memiliki lebih dari satu node NUMA, gunakan perintah berikut:

      sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \
      --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
      --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \
      --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \
      --group_reporting \
      --name=read_throughput --numa_cpu_nodes=0 \
      --name=read_throughput_2 --numa_cpu_nodes=1
      

Menguji IOPS baca

Uji IOPS baca dengan melakukan pembacaan acak, menggunakan ukuran blok I/O 4 KB dan kedalaman I/O minimal 256.

  1. Jika Hyperdisk menggunakan antarmuka SCSI:

    sudo fio --directory=$TEST_DIR \
    --numjobs=16 --size=10G --time_based \
    --runtime=5m --ramp_time=10s --ioengine=libaio \
    --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \
    --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \
    --name=read_iops
    
  2. Jika Hyperdisk menggunakan antarmuka NVMe:

    1. Jika VM hanya memiliki satu node NUMA, gunakan perintah berikut:

      sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \
      --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
      --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \
      --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \
      --cpus_allowed_policy=split \
      --group_reporting \
      --name=read_iops --cpus_allowed=$QUEUE_1_CPUS \
      --name=read_iops_2 --cpus_allowed=$QUEUE_2_CPUS
      
    2. Jika VM memiliki lebih dari satu node NUMA, gunakan perintah berikut:

      sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \
      --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
      --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \
      --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \
      --group_reporting \
      --name=read_iops --numa_cpu_nodes=0 \
      --name=read_iops_2 --numa_cpu_nodes=1
      

Pembersihan

Hapus direktori pengujian.

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

Menetapkan tolok ukur IOPS dan throughput untuk Hyperdisk Extreme di VM C3

Google Cloud Hyperdisk Extreme menawarkan performa yang lebih tinggi pada VM C3 dengan 176 vCPU. Untuk mencapai batas performa yang lebih tinggi, Anda harus melampirkan beberapa volume Hyperdisk Extreme ke VM.

Untuk mengukur I/O per detik (IOPS) atau throughput untuk workload yang realistis pada disk aktif di VM C3 yang berjalan tanpa kehilangan isi disk data yang ada, lakukan benchmark terhadap direktori baru di sistem file yang ada dan pasang volume Hyperdisk Extreme baru ke VM untuk tugas benchmark.

Untuk disk yang terpasang dengan antarmuka NVMe, sebaiknya distribusikan beban kerja I/O di semua antrean NVMe yang tersedia untuk VM. Hal ini akan memaksimalkan performa Hyperdisk. Pada VM C3 dengan 176 vCPU, ada empat node NUMA yang dipetakan 1-ke-1 ke empat antrean NVMe. Pemetaan ini diasumsikan untuk pengujian benchmark di bagian ini.

Menyiapkan pengujian

  1. Tambahkan disk Hyperdisk Extreme baru ke VM Anda, dan lihat Batas performa Hyperdisk untuk mendapatkan penyiapan disk yang diperlukan untuk performa target Anda.

  2. Menghubungkan ke instance:

  3. Instal dependensi:

    sudo apt update
    sudo apt install -y fio
    
  4. Cantumkan disk yang terpasang ke VM Anda dan temukan disk yang ingin diuji.

    sudo lsblk
    

    Perintah sebelumnya menghasilkan output yang mirip dengan berikut ini:

    NAME         MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    nvme0n1      259:0    0    10G  0 disk
    ├─nvme0n1p1  259:1    0   9.9G  0 part  /
    ├─nvme0n1p14 259:2    0     4M  0 part
    └─nvme0n1p15 259:3    0   106M  0 part  /boot/efi
    nvme0n2      259:4    0   2.5T  0 disk
    nvme0n3      259:5    0   2.5T  0 disk
    nvme0n4      259:6    0   2.5T  0 disk
    

    Dalam contoh ini, kami menguji performa Google Cloud Hyperdisk di tiga volume Hyperdisk Extreme 2.500 GiB dengan perangkat bernama nvme0n2,nvme0n3, dan nvme0n4.

Benchmark throughput Hyperdisk Extreme di C3

Bagian ini menunjukkan cara menjalankan benchmark throughput baca dan tulis untuk disk Hyperdisk Extreme.

Persiapan untuk pengujian

Sebelum Anda mulai menjalankan benchmark performa disk Hyperdisk Extreme yang terpasang ke VM C3 dengan 176 vCPU, selesaikan langkah-langkah berikut.

  1. Buat direktori baru, fiotest, di sistem operasi Anda. Dalam contoh ini, direktori utama adalah /mnt/disks/mnt_dir:

    TEST_DIR=/mnt/disks/mnt_dir/fiotest
    sudo mkdir -p $TEST_DIR
    
  2. Karena VM memerlukan lebih dari satu disk untuk mencapai tingkat performa tertinggi, untuk memudahkan, lakukan RAID 0 pada semua volume Hyperdisk yang terpasang. Hal ini mempermudah data untuk didistribusikan secara merata di beberapa volume Hyperdisk.

    Dalam contoh ini, RAID 0 adalah performa pada tiga volume Hyperdisk Extreme yang dilampirkan ke VM C3.

    sudo mdadm --create /dev/md0 --level=0 --raid-devices=3 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4
    
  3. Format dan pasang volume RAID /dev/md0.

Menguji throughput tulis

Uji throughput tulis dengan melakukan penulisan berurutan pada beberapa aliran data paralel (minimal 16), menggunakan ukuran blok I/O 1 MiB dan kedalaman I/O total minimal 32 per antrean NVMe.

# Running this command causes data loss on the targeted file on the device.
# We strongly recommend using a throwaway disk.

sudo fio --name=global --group_reporting=1 --filesize=1024G \
--filename=$TEST_DIR/fiotestfile --numjobs=4 --size=64G \
--offset_increment=64G --time_based --runtime=5m \
--ramp_time=10s --ioengine=libaio --direct=1 --verify=0 \
--bs=1M --iodepth=8 --rw=write \
--name=write_throughput --numa_cpu_nodes=0 \
--name=write_throughput_1 --numa_cpu_nodes=1 \
--name=write_throughput_2 --numa_cpu_nodes=2 \
--name=write_throughput_3 --numa_cpu_nodes=3

Menguji throughput baca

Uji throughput baca dengan melakukan pembacaan berurutan dengan beberapa aliran data paralel (minimal 16), menggunakan ukuran blok I/O 1 MiB dan kedalaman I/O total minimal 32 per antrean NVMe.

sudo fio --name=global --group_reporting=1 --filesize=1024G \
--filename=$TEST_DIR/fiotestfile --numjobs=4 --size=64G \
--offset_increment=64G --time_based --runtime=5m \
--ramp_time=10s --ioengine=libaio --direct=1 \
--verify=0 --bs=1M --iodepth=8 --rw=read \
--name=read_throughput --numa_cpu_nodes=0 \
--name=read_throughput_1 --numa_cpu_nodes=1 \
--name=read_throughput_2 --numa_cpu_nodes=2 \
--name=read_throughput_3 --numa_cpu_nodes=3

Benchmark IOPS Hyperdisk Extreme di C3

Untuk menjalankan benchmark performa I/O per detik (IOPS), sebaiknya lakukan operasi I/O kecil paralel langsung ke atau dari disk mentah (tanpa RAID).

Menguji IOPS tulis

Uji IOPS penulisan dengan melakukan penulisan acak, menggunakan ukuran blok I/O 4 KiB dan kedalaman I/O minimal 256, menggunakan minimal 2 antrean NVMe.

# Running this command causes data loss on the targeted device.
# We strongly recommend using a throwaway disk.

sudo fio --name=global --group_reporting=1 \
--directory=/ --bs=4K --direct=1 \
--filesize=512G --iodepth=256 \
--iodepth_batch_complete_max=256 --iodepth_batch_submit=256 \
--ioengine=libaio --numjobs=5 --ramp_time=10s \
--randrepeat=0 --runtime=5m --rw=randwrite \
--time_based=1 --verify=0 \
--name=write_iops_test --filename=/dev/nvme0n2 --numa_cpu_nodes=0 \
--name=write_iops_test_1 --filename=/dev/nvme0n3  --numa_cpu_nodes=1 \
--name=write_iops_test_2 --filename=/dev/nvme0n4 --numa_cpu_nodes=2

Menguji IOPS baca

Uji IOPS baca dengan melakukan pembacaan acak, menggunakan ukuran blok I/O 4 KiB dan kedalaman I/O minimal 256, menggunakan minimal 2 antrean NVMe.

sudo fio --name=global --group_reporting=1 --directory=/ \
--bs=4K --direct=1 --filesize=512G --iodepth=256 \
--iodepth_batch_complete_max=256 --iodepth_batch_submit=256 \
--ioengine=libaio --numjobs=5 --ramp_time=10s \
--randrepeat=0 --runtime=5m --rw=randread \
--time_based=1 --verify=0 \
--name=read_iops_test --filename=/dev/nvme0n2 --numa_cpu_nodes=0 \
--name=read_iops_test_1 --filename=/dev/nvme0n3  --numa_cpu_nodes=1 \
--name=read_iops_test_2 --filename=/dev/nvme0n4 --numa_cpu_nodes=2

Latensi benchmark Hyperdisk Extreme di C3

Saat menguji latensi I/O, VM tidak boleh mencapai bandwidth atau IOPS maksimum. Jika ya, latensi yang diamati tidak akan mencerminkan latensi I/O Hyperdisk yang sebenarnya. Misalnya, jika VM mencapai batas IOPS pada kedalaman I/O 30 dan perintah fio telah melipatgandakannya, total IOPS tetap sama dan latensi I/O yang dilaporkan meningkat dua kali lipat.

Anda cukup menargetkan satu perangkat disk mentah secara langsung untuk mendapatkan latensi I/O yang realistis.

Menguji latensi tulis

Uji latensi tulis dengan melakukan penulisan acak, menggunakan ukuran blok I/O 4 KiB dan kedalaman I/O 4.

# Running this command causes data loss on the targeted device.
# We strongly recommend using a throwaway disk.

sudo fio --filename=/dev/nvme0n2  \
--filesize=512G --time_based \
--runtime=5m --ramp_time=10s --ioengine=libaio \
--direct=1 --verify=0 --bs=4K --iodepth=4 --rw=randwrite \
--iodepth_batch_submit=4 --iodepth_batch_complete_max=4 \
--name=write_latency

Menguji latensi baca

Uji latensi baca dengan melakukan pembacaan acak, menggunakan ukuran blok I/O 4 KiB dan kedalaman I/O 4.

sudo fio --filename=/dev/nvme0n2  \
--filesize=512G --time_based \
--runtime=5m --ramp_time=10s --ioengine=libaio \
--direct=1 --verify=0 --bs=4K --iodepth=4 --rw=randread \
--iodepth_batch_submit=4 --iodepth_batch_complete_max=4 \
--name=read_latency

Pembersihan

  1. Hapus file pengujian.

    sudo rm -rf $TEST_DIR/*
    
  2. Lepaskan dan hentikan volume RAID.

    sudo umount /dev/md0
    sudo mdadm --stop /dev/md0
    
  3. Lepaskan dan hapus volume Hyperdisk yang terpasang. Lihat perintah gcloud compute instances detach-disk dan gcloud compute disks delete.

Menetapkan tolok ukur performa Hyperdisk mentah

Jika ingin mengukur performa volume Hyperdisk saja, di luar lingkungan pengembangan, Anda dapat menguji performa baca dan tulis untuk perangkat blok pada disk dan VM sekali pakai.

Perintah berikut mengasumsikan volume Hyperdisk Extreme sebesar 3.500 GiB yang terpasang ke VM Anda. Ukuran disk ini diperlukan untuk mencapai batas throughput VM 32 vCPU. Jika ukuran perangkat Anda berbeda, ubah nilai argumen --filesize dalam perintah berikut. Untuk mengetahui informasi selengkapnya tentang batas performa jenis mesin VM, lihat Dukungan jenis mesin.

Menyiapkan pengujian

  1. Terhubung ke instance.

  2. Instal dependensi:

    sudo apt-get update
    sudo apt-get install -y fio
    
  3. Dapatkan jalur ke disk mentah. Simpan jalur dalam variabel. Contoh berikut menggunakan /dev/nvme0n2 sebagai jalur disk mentah:

    TEST_DIR=/dev/nvme0n2
    
  4. Isi disk dengan data yang bukan nol. Pembacaan Hyperdisk dari blok kosong memiliki profil latensi yang berbeda dari 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=$TEST_DIR --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
    
  5. Jika VM menggunakan antarmuka disk NVMe untuk lampiran Hyperdisk (jika nama disk mentah diawali dengan nvme), lakukan langkah-langkah berikut untuk mendapatkan jumlah node NUMA yang tersedia untuk VM.

    Strategi tolok ukur untuk disk NVMe berbeda untuk VM yang hanya memiliki satu node NUMA dan VM yang memiliki lebih dari satu node NUMA. Saat menguji performa Hyperdisk menggunakan antarmuka disk NVMe, hanya 256 ukuran antrean NVMe yang dialokasikan per antrean. Karena terbatasnya ukuran antrean NVMe yang tersedia dan potensi pertentangan yang berasal dari disk lain yang terpasang ke VM yang sama, pengujian tolok ukur ini menggunakan dua antrean disk NVMe untuk mempertahankan ukuran antrean gabungan yang mampu menangani iodepth 256.

    1. Dapatkan jumlah node NUMA.

      lscpu | grep -i 'numa node(s)' | awk '{print $NF}'
      
    2. Jika VM hanya memiliki 1 node NUMA, dapatkan pemetaan antrean CPU ke NVMe. Anda akan menggunakan informasi ini nanti untuk parameter --cpus-allowed.

      QUEUE_1_CPUS=$(cat /sys/class/block/nvme0n2/mq/*/cpu_list | sed -n 1p | tr -d " \t")
      QUEUE_2_CPUS=$(cat /sys/class/block/nvme0n2/mq/*/cpu_list | sed -n 2p | tr -d " \t")
      

Menguji throughput tulis

Uji throughput tulis dengan melakukan penulisan berurutan pada beberapa aliran data paralel (16+), menggunakan ukuran I/O 1 MB dan kedalaman I/O sebesar 64 atau lebih besar.

  1. Jika Hyperdisk dipasang menggunakan antarmuka SCSI:

    # Running this command causes data loss on the second device.
    # We strongly recommend using a throwaway VM and disk.
    
    sudo fio --filename=$TEST_DIR \
    --numjobs=16 --size=500G --time_based \
    --runtime=5m --ramp_time=10s --ioengine=libaio \
    --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \
    --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \
    --offset_increment=20G \
    --name=write_throughput
    
  2. Jika Hyperdisk menggunakan antarmuka NVMe:

    1. Jika VM hanya memiliki satu node NUMA, gunakan perintah berikut:

      # Running this command causes data loss on the second device.
      # We strongly recommend using a throwaway VM and disk.
      
      sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \
      --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
      --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \
      --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \
      --cpus_allowed_policy=split \
      --offset_increment=20G --group_reporting \
      --name=write_throughput --cpus_allowed=$QUEUE_1_CPUS \
      --name=write_throughput_2 --cpus_allowed=$QUEUE_2_CPUS
      
    2. Jika VM memiliki lebih dari satu node NUMA, gunakan perintah berikut:

      # Running this command causes data loss on the second device.
      # We strongly recommend using a throwaway VM and disk.
      
      sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \
      --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
      --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \
      --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \
      --offset_increment=20G --group_reporting \
      --name=write_throughput --numa_cpu_nodes=0 \
      --name=write_throughput_2 --numa_cpu_nodes=1
      

Menguji IOPS tulis

Untuk mencapai IOPS Hyperdisk 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 operasi I/O yang sedang beroperasi. Jika disk dan VM Anda dapat mencapai 30.000 IOPS tulis, jumlah operasi I/O yang sedang beroperasi harus minimal 30. Jika ukuran I/O lebih besar dari 4 KB, VM mungkin mencapai batas bandwidth sebelum mencapai batas IOPS.

Uji IOPS penulisan dengan melakukan penulisan acak, menggunakan ukuran blok I/O 4 KB dan kedalaman I/O minimal 256.

  1. Jika volume Hyperdisk Extreme terpasang menggunakan antarmuka SCSI:

    # Running this command causes data loss on the second device.
    # We strongly recommend using a throwaway VM and disk.
    
    sudo fio --filename=$TEST_DIR \
    --numjobs=16 --size=500G -time_based \
    --runtime=5m --ramp_time=10s --ioengine=libaio \
    --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \
    --iodepth_batch_submit=256  --iodepth_batch_complete_max=256 \
    --name=write_iops
    
  2. Jika volume Hyperdisk Extreme terpasang menggunakan antarmuka NVMe:

    1. Jika VM hanya memiliki satu node NUMA, gunakan perintah berikut:

      # Running this command causes data loss on the second device.
      # We strongly recommend using a throwaway VM and disk.
      
      sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \
      --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
      --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \
      --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \
      --cpus_allowed_policy=split \
      --group_reporting \
      --name=write_write_iops --cpus_allowed=$QUEUE_1_CPUS \
      --name=write_write_iops_2 --cpus_allowed=$QUEUE_2_CPUS
      
    2. Jika VM memiliki lebih dari satu node NUMA, gunakan perintah berikut:

      # Running this command causes data loss on the second device.
      # We strongly recommend using a throwaway VM and disk.
      
      sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \
      --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
      --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \
      --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \
      --group_reporting \
      --name=write_iops --numa_cpu_nodes=0 \
      --name=write_iops_2 --numa_cpu_nodes=1
      

Menguji 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 Hyperdisk 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 --filename=$TEST_DIR \
--filesize=500G --time_based \
--runtime=5m --ramp_time=10s --ioengine=libaio \
--direct=1 --verify=0 --bs=4K --iodepth=4 --rw=randwrite \
--iodepth_batch_submit=4 --iodepth_batch_complete_max=4 \
--name=write_latency

Menguji bandwidth baca

Uji bandwidth baca dengan melakukan pembacaan berurutan dengan beberapa aliran data paralel (16+), menggunakan ukuran I/O 1 MB dan kedalaman I/O minimal 64.

  1. Jika volume Hyperdisk Extreme terpasang menggunakan antarmuka SCSI:

     sudo fio --filename=$TEST_DIR \
     --numjobs=16 --size=500G --time_based \
     --runtime=5m --ramp_time=10s --ioengine=libaio \
     --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \
     --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \
     --offset_increment=20G --name=read_bandwidth
  2. Jika volume Hyperdisk Extreme terpasang menggunakan antarmuka NVMe:

    1. Jika VM hanya memiliki satu node NUMA, gunakan perintah berikut:

        sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \
        --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
        --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \
        --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \
        --cpus_allowed_policy=split \
        --offset_increment=20G --group_reporting \
        --name=read_bandwidth --cpus_allowed=$QUEUE_1_CPUS \
        --name=read_bandwidth_2 --cpus_allowed=$QUEUE_2_CPUS
    2. Jika VM memiliki lebih dari satu node NUMA, gunakan perintah berikut:

        sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \
        --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
        --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \
        --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \
        --offset_increment=20G --group_reporting \
        --name=read_bandwidth --numa_cpu_nodes=0 \
        --name=read_bandwidth_2 --numa_cpu_nodes=1

Menguji IOPS baca

Untuk mencapai IOPS Hyperdisk 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. Guna mencapai IOPS baca maksimum yang tersedia untuk sebuah jenis mesin, tentukan --iodepth=256 untuk pengujian ini.

  1. Jika volume Hyperdisk Extreme terpasang menggunakan antarmuka SCSI:

    sudo fio --filename=$TEST_DIR \
    --numjobs=16 --size=500G --time_based \
    --runtime=5m --ramp_time=10s --ioengine=libaio \
    --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \
    --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \
    --name=read_iops
    
  2. Jika volume Hyperdisk Extreme terpasang menggunakan antarmuka NVMe:

    1. Jika VM hanya memiliki satu node NUMA, gunakan perintah berikut:

      sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \
      --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
      --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \
      --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \
      --cpus_allowed_policy=split \
      --group_reporting \
      --name=read_iops --cpus_allowed=$QUEUE_1_CPUS \
      --name=read_iops_2 --cpus_allowed=$QUEUE_2_CPUS
      
    2. Jika VM memiliki lebih dari satu node NUMA, gunakan perintah berikut:

      sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \
      --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \
      --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \
      --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \
      --group_reporting \
      --name=read_iops --numa_cpu_nodes=0 \
      --name=read_iops_2 --numa_cpu_nodes=1
      

Menguji 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 volume Hyperdisk mencapai batas saturasinya, VM akan mendorong kembali operasi I/O yang masuk. Penolakan ini tercermin sebagai peningkatan buatan pada latensi I/O.

 sudo fio --filename=$TEST_DIR \
 --filesize=500G --time_based \
 --runtime=5m --ramp_time=10s --ioengine=libaio \
 --direct=1 --verify=0 --bs=4K --iodepth=4 --rw=randread \
 --iodepth_batch_submit=4 --iodepth_batch_complete_max=4 \
 --name=read_latency

Pembersihan

Jika menggunakan disk dan VM sekali pakai seperti yang direkomendasikan, setelah menyelesaikan pengujian tolok ukur, Anda dapat:

  • Melepaskan dan menghapus disk.
  • Menghapus VM.

Langkah berikutnya