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.
Instal dependensi:
sudo apt update sudo apt install -y fio
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
.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
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
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
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
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
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.
Tambahkan Persistent Disk ke instance VM yang ingin Anda ukur.
Instal dependensi:
sudo apt-get update sudo apt-get install -y fio
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
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
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
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
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
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
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
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
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
Bersihkan Persistent Disk dan VM yang dibuang:
- Hapus disk yang digunakan untuk performa benchmark.
- Hapus VM yang dibuat untuk performa benchmark.
Langkah selanjutnya
- Pelajari cara memantau performa disk dengan meninjau metrik performa persistent disk.
- Pelajari harga Persistent Disk.
- Pelajari cara mengoptimalkan performa Persistent Disk.