Enterprise SSD Alibaba Cloud (ESSD) menggunakan teknologi Ethernet 25 Gigabit dan Remote Direct Memory Access (RDMA) untuk memberikan hingga 1.000.000 operasi I/O acak baca/tulis per disk dengan latensi rendah. Topik ini menjelaskan cara menguji kinerja IOPS ESSD mentah berdasarkan kondisi pengujian yang diuraikan dalam bagian berikut.
Kondisi Pengujian
Alat Uji: Gunakan alat uji fleksibel I/O (fio).
Catatanfio adalah alat benchmarking kinerja I/O open source yang kuat, mampu menguji metrik kinerja perangkat penyimpanan blok seperti operasi baca/tulis acak dan sekuensial.
Tipe Instance: Direkomendasikan menggunakan tipe instance ecs.g7se.32xlarge. Untuk informasi lebih lanjut tentang tipe instance, lihat Famili instance tujuan umum (seri g).
Image: Gunakan versi terbaru dari image publik Linux yang disediakan oleh Alibaba Cloud. Contoh berikut menggunakan Alibaba Cloud Linux 3.
CatatanHasil pengujian menunjukkan bahwa ESSD mungkin tidak mencapai kinerja IOPS yang diharapkan pada beberapa distribusi Linux tertentu. Direkomendasikan melampirkan ESSD ke instance Elastic Compute Service (ECS) yang menggunakan image Alibaba Cloud Linux 3.
ESSD:
Pengujian pada disk mentah membantu mendapatkan kinerja disk yang sebenarnya. Direkomendasikan menggunakan alat fio untuk menguji kinerja IOPS disk mentah.
Direkomendasikan menggunakan ESSD pada level performa 3 (PL3 ESSD). Untuk informasi lebih lanjut tentang ESSD, lihat ESSD.
PentingPengujian pada disk mentah membantu mendapatkan kinerja penyimpanan blok yang sebenarnya. Jika perangkat penyimpanan blok memiliki partisi, sistem file, atau data, penggunaan langsung alat fio dapat menyebabkan pengecualian pada sistem file dan mengakibatkan hilangnya data. Untuk mencegah masalah tersebut, direkomendasikan membuat snapshot untuk perangkat penyimpanan blok yang ingin diuji guna mencadangkan data sebelum menggunakan alat fio. Untuk informasi lebih lanjut, lihat Buat Snapshot.
Untuk mencegah hilangnya data, direkomendasikan tidak menggunakan disk sistem tempat sistem operasi berada atau disk data yang berisi data sebagai objek pengujian. Sebagai gantinya, gunakan alat fio untuk menguji kinerja disk data baru yang kosong.
Hasil pengujian kinerja diperoleh dalam lingkungan pengujian dan hanya untuk referensi. Dalam lingkungan produksi, kinerja disk cloud dapat bervariasi karena faktor-faktor seperti lingkungan jaringan dan akses konkuren.
Prosedur
Sambungkan ke instance ECS.
Untuk informasi lebih lanjut, lihat Gunakan Workbench untuk menyambung ke instance Linux melalui SSH.
Periksa nama perangkat penyimpanan blok:
sudo fdisk -lu
Gambar di atas menunjukkan bahwa instance memiliki tiga perangkat penyimpanan blok: disk sistem bernama /dev/vda dan dua disk data bernama /dev/vdb dan /dev/vdc.Periksa apakah partisi dan sistem file ada pada perangkat penyimpanan blok:
sudo blkid
Gambar di atas menunjukkan bahwa perangkat penyimpanan blok bernama /dev/vda dan /dev/vdb memiliki partisi dan sistem file. Output perintah tidak berisi informasi tentang perangkat penyimpanan blok bernama /dev/vdc, yang menunjukkan bahwa perangkat tersebut tidak memiliki partisi atau sistem file.
Sebelum menguji kinerja perangkat penyimpanan blok, pastikan Anda mencadangkan data yang tersimpan pada perangkat tersebut untuk mencegah hilangnya data. Untuk informasi lebih lanjut, lihat Buat Snapshot.
CatatanAnda akan dikenakan biaya untuk snapshot. Untuk informasi tentang penagihan snapshot, lihat Snapshot.
Instal pustaka libaio dan alat fio berdasarkan sistem operasi Anda.
Alibaba Cloud Linux 2, Alibaba Cloud Linux 3, atau CentOS 6 atau lebih baru
CatatanCentOS 6 telah mencapai akhir masa pakai (EOL). Sesuai aturan komunitas Linux, semua konten telah dihapus dari alamat repositori CentOS 6 berikut: http://mirror.centos.org/centos-6/. Jika Anda terus menggunakan repositori CentOS 6 default di Alibaba Cloud, kesalahan akan dilaporkan. 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 lebih baru, atau Ubuntu 14 atau lebih baru
PentingDebian 9 dan Debian 10 telah mencapai akhir masa pakai (EOL). Jika instance Anda menjalankan Debian 9 atau Debian 10, ubah alamat repositori sistem operasi. Untuk informasi lebih lanjut, lihat Ubah alamat repositori setelah CentOS atau Debian mencapai akhir masa pakainya
sudo apt-get update sudo apt-get install libaio* fio -yUbah jalur:
cd /tmpBuat skrip test100w.sh:
sudo vim test100w.shTempelkan konten berikut ke dalam skrip test100w.sh.
Untuk informasi lebih lanjut, lihat bagian Detail Skrip test100w.sh dari topik ini.
#!/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 jenis 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. Dalam contoh ini, nilainya adalah 10. iodepth=$2 # Jumlah maksimum permintaan I/O konkuren. Dalam contoh ini, nilainya adalah 64. bs=$3 # Ukuran blok data per I/O. Dalam contoh ini, nilainya adalah 4k. rw=$4 # Kebijakan baca dan tulis. Dalam contoh ini, nilainya adalah randwrite. size=$5 filename=$6 # Nama file pengujian. Dalam 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 dari 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_NAMEModifikasi parameter dalam skrip test100w.sh berdasarkan skenario bisnis Anda.
Ganti
your_devicedengan nama perangkat aktual dari perangkat yang ingin Anda uji. Contoh: nvme1n1.Ganti 10 (numjobs), 64 (iodepth), 4k (bs), randwrite (rw), dan /dev/your_device dalam baris
RunFio 10 64 4k randwrite /dev/your_devicedengan nilai-nilai aktual.Nilai parameter numjobs tidak boleh melebihi jumlah core CPU. Anda dapat menjalankan perintah berikut untuk memeriksa jumlah core CPU:
cat /proc/cpuinfo |grep "processor" |wc -l
Uji kinerja ESSD:
sudo sh test100w.shGambar berikut menunjukkan contoh output perintah, di mana parameter
IOPS=***menunjukkan IOPS ESSD.
Jika hasil yang ditunjukkan dalam kode sampel berikut dikembalikan, objek pengujian berisi partisi atau sistem file. Untuk memastikan keamanan data, skrip fio dihentikan. Direkomendasikan membuat disk data kosong untuk melakukan pengujian.
[[ecs-user@ecs tmp]$ sudo sh test100w.sh Perangkat /dev/vdb berisi tabel partisi atau sistem file. Skrip fio dihentikan.PeringatanJika objek pengujian berisi partisi, sistem file, dan data, penggunaan langsung alat fio dapat menyebabkan pengecualian pada sistem file dan mengakibatkan hilangnya data. Jika disk data Anda memiliki partisi dan sistem file, direkomendasikan membuat disk data kosong dan menguji disk baru tersebut.
Anda dapat membuat disk bayar sesuai pemakaian yang memiliki spesifikasi yang sama dengan disk data Anda dan melampirkannya ke instance Anda untuk pengujian. Untuk informasi lebih lanjut, lihat Buat Disk Data Kosong.
Setelah pengujian selesai, Anda dapat melepaskan dan membebaskan disk bayar sesuai pemakaian berdasarkan kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Lepaskan Disk Data dan Rilis Disk.
Detail Skrip test100w.sh
Dalam skrip test100w.sh, perintah berikut mengatur parameter
rq_affinitymenjadi 2:echo 2 > /sys/block/your_device/queue/rq_affinityNilai rq_affinity
Deskripsi
1
Menunjukkan bahwa perangkat blok mengirimkan peristiwa penyelesaian I/O yang diterima ke grup vCPU yang mengirimkan permintaan I/O yang sesuai. Dalam skenario di mana beberapa thread berjalan secara bersamaan, peristiwa penyelesaian I/O mungkin hanya dikirimkan ke satu vCPU dan menyebabkan hambatan kinerja.
2
Menunjukkan bahwa perangkat blok mengirimkan peristiwa penyelesaian I/O yang diterima ke vCPU yang mengirimkan permintaan I/O yang sesuai. Dalam skenario di mana beberapa thread berjalan secara bersamaan, setiap vCPU dapat memberikan kinerja maksimalnya.
Perintah berikut menjalankan
jobsuntuk mengikat antrian ke core CPU yang 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 antrian permintaan tunggal. Antrian permintaan menjadi hambatan kinerja ketika beberapa thread memproses permintaan I/O secara bersamaan. Dalam mode multi-antrian, perangkat dapat memiliki beberapa antrian permintaan untuk memproses permintaan I/O dan memberikan kinerja penyimpanan backend maksimal. Misalnya, asumsikan Anda memiliki empat thread I/O. Untuk memanfaatkan sepenuhnya mode multi-antrian dan meningkatkan kinerja penyimpanan, Anda harus mengikat thread I/O ke core CPU yang sesuai dengan antrian permintaan yang berbeda.
Parameter
Deskripsi
Nilai contoh
numjobsJumlah thread I/O.
10
/dev/your_deviceNama perangkat ESSD.
/dev/nvme1n1
cpus_allowed_policyParameter yang disediakan oleh alat fio untuk mengikat vCPU. Alat fio menyediakan parameter
cpus_allowed_policydancpus_alloweduntuk mengikat vCPU.split
Perintah di atas menjalankan
jobsuntuk mengikat antrian dengan ID antrian berbeda ke core CPU yang berbeda. Untuk melihat ID core CPU yang mana antrian diikat, jalankan perintah berikut:Jalankan perintah
ls /sys/block/your_device/mq/. Dalam perintah tersebut, ganti parameteryour_devicedengan nama perangkat aktual. Contoh: nvme1n1. Perintah tersebut mengembalikan ID antrian untuk ESSD yang nama perangkatnya dalam format /dev/vd*.Jalankan perintah cat /sys/block/your_device/mq/cpu_list. Dalam perintah tersebut, ganti parameter
your_devicedengan nama perangkat aktual. Contoh: nvme1n1. Perintah tersebut mengembalikan ID core CPU yang mana antrian untuk ESSD diikat. Nama perangkat ESSD dalam format /dev/vd*.