Menetapkan tolok ukur performa Hyperdisk


Untuk menetapkan tolok ukur performa Hyperdisk, gunakanPenguji 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 benchmark menghasilkan jumlah byte dan operasi I/O yang cukup untuk menguji performa disk secara akurat.

Selain itu, perangkat khusus yang digunakan dengan dd sering kali sangat lambat dan tidak menunjukkan 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*

Benchmark IOPS dan throughput untuk Hyperdisk Ekstrem pada VM C3

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

Guna mengukur I/O per detik (IOPS) atau throughput untuk workload yang realistis pada disk aktif pada VM C3 yang berjalan tanpa kehilangan konten disk data yang ada, lakukan tolok ukur terhadap direktori baru pada sistem file yang ada dan tambahkan volume Hyperdisk Ekstrem baru ke VM untuk tugas tolok ukur.

Untuk disk yang terpasang dengan antarmuka NVMe, sebaiknya mendistribusikan beban kerja I/O ke 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 Ekstrem baru ke VM Anda, dan lihat Batas performa Hyperdisk untuk mendapatkan penyiapan disk yang diperlukan untuk performa target Anda.

  2. Hubungkan ke instance Anda:

  3. Instal dependensi:

    sudo apt update
    sudo apt install -y fio
    
  4. Buat daftar 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 Ekstrem 2.500 GiB dengan perangkat bernama nvme0n2,nvme0n3, dan nvme0n4.

Throughput benchmark Hyperdisk Ekstrem pada C3

Bagian ini menunjukkan cara mengukur throughput baca dan tulis untuk disk Hyperdisk Ekstrem.

Persiapan untuk pengujian

Sebelum memulai benchmark performa disk Hyperdisk Ekstrem 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 level performa tertinggi, jalankan RAID 0 pada semua volume Hyperdisk yang terpasang. Hal ini memudahkan data untuk didistribusikan secara merata ke beberapa volume Hyperdisk.

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

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

Menguji throughput tulis

Uji throughput tulis dengan melakukan penulisan berurutan pada beberapa streaming paralel (minimal 16), menggunakan blok I/O ukuran 1 MiB dan total kedalaman I/O 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 operasi baca dengan melakukan operasi baca berurutan pada beberapa stream paralel (minimal 16), menggunakan blok I/O ukuran 1 MiB dan total kedalaman I/O 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

Tolok Ukur IOPS Hyperdisk Ekstrem pada C3

Untuk mengukur 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, yang memanfaatkan setidaknya 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, yang menggunakan setidaknya 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 Ekstrem pada 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 menggandakannya, total IOPS tetap sama dan latensi I/O yang dilaporkan berlipat ganda.

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 minimal 15 operasi I/O selama beroperasi. Jika disk dan VM Anda dapat mencapai 30.000 IOPS tulis, jumlah operasi I/O dalam penerbangan minimal harus 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 Ekstrem 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=4K --iodepth=256 --rw=randwrite \
    --iodepth_batch_submit=256  --iodepth_batch_complete_max=256 \
    --name=write_iops
    
  2. Jika volume Hyperdisk Ekstrem dipasang 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 Ekstrem dipasang 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 Ekstrem dipasang 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 Ekstrem dipasang 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 Ekstrem dipasang 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. VM tidak boleh 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 dicerminkan sebagai peningkatan buatan dalam 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 selanjutnya