Gunakan fio untuk melakukan benchmark IOPS pada ESSD mentah, yang mendukung hingga 1.000.000 IOPS baca/tulis acak dengan 25 GE dan RDMA.
Prasyarat
-
Tool pengujian: fio (flexible I/O tester).
Catatanfio adalah tool open source untuk benchmarking I/O yang dapat menguji metrik kinerja penyimpanan blok seperti operasi baca/tulis acak dan berurutan.
-
Tipe instans: ecs.g7se.32xlarge (disarankan). Lihat Famili instans tujuan umum (seri g).
-
Gambar: Gambar publik Alibaba Cloud Linux terbaru. Contoh berikut menggunakan Alibaba Cloud Linux 3.
CatatanESSD mungkin tidak mencapai IOPS yang diharapkan pada distribusi Linux tertentu. Sambungkan ESSD ke instans ECS yang menggunakan gambar Alibaba Cloud Linux 3.
-
ESSD:
-
Uji disk mentah dengan fio untuk memperoleh kinerja disk aktual.
-
Gunakan ESSD PL3. Lihat ESSDs.
Penting-
Jika perangkat penyimpanan blok berisi partisi, sistem file, atau data, fio dapat merusak sistem file dan menyebabkan kehilangan data. Buat snapshot sebelum pengujian. Lihat Buat snapshot secara manual.
-
Jangan lakukan pengujian pada sistem disk atau data disk apa pun yang berisi data. Gunakan data disk kosong yang baru dibuat dan belum diinisialisasi sebagai gantinya.
-
Hasil pengujian diperoleh dalam lingkungan pengujian dan hanya untuk referensi. Di lingkungan produksi, kinerja cloud disk dapat bervariasi karena faktor seperti kondisi jaringan dan akses konkuren.
-
Setelah menguji disk baru:
-
Item ini dicadangkan dan tidak dapat digunakan langsung. Lihat Inisialisasi ulang data disk.
-
Jika Anda tidak memerlukan disk tersebut, detach lalu release disk tersebut.
-
-
Prosedur
-
Sambungkan ke instans ECS.
Untuk informasi lebih lanjut, lihat Masuk ke instans Linux menggunakan Workbench.
-
Kueri nama perangkat penyimpanan blok:
sudo fdisk -lu
Output menunjukkan tiga perangkat penyimpanan blok: sistem disk /dev/vda dan dua data disk /dev/vdb serta /dev/vdc. -
Periksa apakah perangkat penyimpanan blok memiliki partisi dan sistem file:
sudo blkid
Output menunjukkan bahwa /dev/vda dan /dev/vdb memiliki partisi dan sistem file. /dev/vdc tidak muncul dalam output, yang menunjukkan tidak memiliki partisi atau sistem file. -
Buat cadangan data pada perangkat penyimpanan blok sebelum pengujian untuk mencegah kehilangan data. Lihat Buat snapshot secara manual.
CatatanSnapshot dikenai biaya. Lihat Penagihan snapshot.
-
Instal library libaio dan fio berdasarkan sistem operasi Anda.
Alibaba Cloud Linux 2, Alibaba Cloud Linux 3, atau CentOS 6 atau versi lebih baru
CatatanCentOS 6 telah mencapai akhir masa pakai (EOL). Sesuai aturan komunitas Linux, seluruh konten telah dihapus dari alamat repositori CentOS 6 berikut: http://mirror.centos.org/centos-6/. Jika Anda tetap menggunakan repositori CentOS 6 default di Alibaba Cloud, akan muncul error. Untuk menggunakan paket instalasi tertentu dari CentOS 6, ubah alamat repositori CentOS 6. Untuk informasi lebih lanjut, lihat Bagaimana cara mengubah alamat repositori CentOS 6?
sudo yum install libaio libaio-devel fio -yDebian 9 atau versi lebih baru, atau Ubuntu 14 atau versi lebih baru
PentingDebian 9 dan Debian 10 telah mencapai EOL. Jika instans Anda menjalankan Debian 9 atau Debian 10, ubah alamat repositori.
sudo apt-get update sudo apt-get install libaio* fio -y -
Pindah ke direktori /tmp:
cd /tmp -
Buat skrip test100w.sh:
sudo vim test100w.sh -
Tempel konten berikut ke dalam skrip test100w.sh.
Lihat bagian Detail skrip test100w.sh.
#!/bin/bash DEV_NODE=your_device DEV_NAME=/dev/$DEV_NODE function CheckHasFS { local device=$1 # Jalur perangkat. # Periksa apakah perangkat ada. if [ ! -b "$device" ]; then echo "Error: Perangkat $device tidak ada." exit 1 fi # Jalankan perintah blkid untuk memeriksa tabel partisi dan tipe sistem file. local pt_type=$(sudo blkid -o value -s PTTYPE "$device") local fs_type=$(sudo blkid -o value -s TYPE "$device") if [ -n "$pt_type" ] || [ -n "$fs_type" ]; then return 1 else return 0 fi } CheckHasFS "$DEV_NAME" if [ $? -eq 1 ]; then echo "Perangkat $DEV_NAME berisi tabel partisi atau sistem file. Skrip fio dihentikan." exit 1 fi function RunFio { numjobs=$1 # Jumlah thread pengujian. Pada contoh ini, nilainya adalah 10. iodepth=$2 # Jumlah maksimum permintaan I/O konkuren. Pada contoh ini, nilainya adalah 64. bs=$3 # Ukuran blok data per I/O. Pada contoh ini, nilainya adalah 4k. rw=$4 # Kebijakan baca dan tulis. Pada contoh ini, nilainya adalah randwrite. size=$5 filename=$6 # Nama file pengujian. Pada contoh ini, nilainya adalah /dev/your_device. nr_cpus=`cat /proc/cpuinfo |grep "processor" |wc -l` if [ $nr_cpus -lt $numjobs ];then echo "Nilai parameter numjobs lebih besar daripada jumlah core CPU. Pengujian dihentikan." exit -1 fi let nu=$numjobs+1 cpulist="" for ((i=1;i<10;i++)) do list=`cat /sys/block/$DEV_NODE/mq/*/cpu_list | awk '{if(i<=NF) print $i;}' i="$i" | tr -d ',' | tr '\n' ','` if [ -z $list ];then break fi cpulist=${cpulist}${list} done spincpu=`echo $cpulist | cut -d ',' -f 2-${nu}` echo $spincpu fio --ioengine=libaio --runtime=30s --numjobs=${numjobs} --iodepth=${iodepth} --bs=${bs} --size=${size} --rw=${rw} --filename=${filename} --time_based=1 --direct=1 --name=test --group_reporting --cpus_allowed=$spincpu --cpus_allowed_policy=split } echo 2 > /sys/block/$DEV_NODE/queue/rq_affinity sleep 5 RunFio 10 128 4k randwrite 1024g $DEV_NAME -
Modifikasi parameter skrip sesuai lingkungan Anda.
-
Ganti
your_devicedengan nama perangkat aktual, misalnya nvme1n1. -
Ganti 10 (numjobs), 64 (iodepth), 4k (bs), randwrite (rw), dan /dev/your_device pada baris
RunFio 10 64 4k randwrite /dev/your_devicedengan nilai aktual. -
Nilai numjobs tidak boleh melebihi jumlah core CPU. Kueri jumlah core CPU:
cat /proc/cpuinfo |grep "processor" |wc -l
-
-
Uji kinerja ESSD:
sudo sh test100w.sh-
Pada output,
IOPS=***menunjukkan IOPS ESSD.
-
Jika muncul output berikut, target pengujian berisi partisi atau sistem file. Skrip fio berhenti untuk melindungi data. Gunakan data disk kosong untuk pengujian.
[[ecs-user@ecs tmp]$ sudo sh test100w.sh Perangkat /dev/vdb berisi tabel partisi atau sistem file. Skrip fio dihentikan.PeringatanMenjalankan fio pada disk yang memiliki partisi, sistem file, atau data dapat merusak sistem file dan menyebabkan kehilangan data. Jika data disk Anda memiliki partisi dan sistem file, buat data disk kosong untuk pengujian.
-
Buat disk bayar sesuai penggunaan dengan spesifikasi yang sama seperti disk data Anda dan sambungkan ke instans. Lihat Membuat disk data.
-
Setelah pengujian, lepaskan dan rilis disk bayar sesuai penggunaan sesuai kebutuhan. Lihat Lepaskan disk data dan Rilis disk cloud.
-
-
Detail skrip: test100w.sh
-
Perintah berikut mengatur
rq_affinitymenjadi 2:echo 2 > /sys/block/your_device/queue/rq_affinityNilai rq_affinity
Deskripsi
1
Mengirimkan event penyelesaian I/O ke grup vCPU yang mengirimkan permintaan I/O. Dalam konkurensi multi-thread, event dapat mengantre pada satu vCPU, sehingga menciptakan bottleneck.
2
Mengirimkan event penyelesaian I/O ke vCPU yang tepat yang mengirimkan setiap permintaan. Setiap vCPU dapat memberikan kinerja maksimum dalam konkurensi multi-thread.
-
Perintah berikut menggunakan
jobsuntuk mengikat antrian ke core CPU berbeda:fio -ioengine=libaio -runtime=30s -numjobs=${numjobs} -iodepth=${iodepth} -bs=${bs} -rw=${rw} -filename=${filename} -time_based=1 -direct=1 -name=test -group_reporting -cpus_allowed=$spincpu -cpus_allowed_policy=splitCatatanDalam mode normal, perangkat memiliki satu antrian permintaan, yang menjadi bottleneck dalam I/O konkuren. Mode multi-antrian memungkinkan beberapa antrian permintaan. Misalnya, dengan empat thread I/O, ikat setiap thread ke core CPU yang dipetakan ke antrian permintaan berbeda untuk memaksimalkan kinerja penyimpanan.
Parameter
Deskripsi
Contoh nilai
numjobsJumlah thread I/O.
10
/dev/your_deviceNama perangkat ESSD.
/dev/nvme1n1
cpus_allowed_policyParameter fio untuk mengikat vCPU. Gunakan
cpus_allowed_policydancpus_allowedbersama-sama untuk mengikat vCPU.split
Perintah ini menjalankan
jobsuntuk mengikat antrian dengan ID berbeda ke core CPU berbeda. Untuk melihat core CPU yang diikat ke setiap antrian:-
Jalankan
ls /sys/block/your_device/mq/. Gantiyour_devicedengan nama perangkat aktual (misalnya, nvme1n1). Ini mengembalikan ID antrian untuk ESSD dengan nama perangkat /dev/vd*. -
Jalankan cat /sys/block/your_device/mq/cpu_list. Ganti
your_devicedengan nama perangkat aktual (misalnya, nvme1n1). Ini mengembalikan ID core CPU yang diikat ke setiap antrian untuk ESSD dengan nama perangkat /dev/vd*.
-