全部产品
Search
文档中心

Elastic Compute Service:Uji Kinerja IOPS ESSD

更新时间:Jul 02, 2025

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).

    Catatan

    fio 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.

    Catatan

    Hasil 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.

    Penting
    • Pengujian 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

  1. Sambungkan ke instance ECS.

    Untuk informasi lebih lanjut, lihat Gunakan Workbench untuk menyambung ke instance Linux melalui SSH.

  2. Periksa nama perangkat penyimpanan blok:

    sudo fdisk -lu

    截屏2024-12-05 09Gambar 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.

  3. Periksa apakah partisi dan sistem file ada pada perangkat penyimpanan blok:

    sudo blkid

    截屏2024-12-05 09Gambar 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.

  4. 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.

    Catatan

    Anda akan dikenakan biaya untuk snapshot. Untuk informasi tentang penagihan snapshot, lihat Snapshot.

  5. Instal pustaka libaio dan alat fio berdasarkan sistem operasi Anda.

    Alibaba Cloud Linux 2, Alibaba Cloud Linux 3, atau CentOS 6 atau lebih baru

    Catatan

    CentOS 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 -y

    Debian 9 atau lebih baru, atau Ubuntu 14 atau lebih baru

    Penting

    Debian 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 -y
  6. Ubah jalur:

    cd /tmp
  7. Buat skrip test100w.sh:

    sudo vim test100w.sh
  8. Tempelkan 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_NAME
  9. Modifikasi parameter dalam skrip test100w.sh berdasarkan skenario bisnis Anda.

    • Ganti your_device dengan 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_device dengan 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
  10. Uji kinerja ESSD:

    sudo sh test100w.sh
    • Gambar berikut menunjukkan contoh output perintah, di mana parameter IOPS=*** menunjukkan IOPS ESSD.image

    • 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.

      Peringatan

      Jika 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_affinity menjadi 2:

    echo 2 > /sys/block/your_device/queue/rq_affinity

    Nilai 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 jobs untuk 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=split
    Catatan

    Dalam 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

    numjobs

    Jumlah thread I/O.

    10

    /dev/your_device

    Nama perangkat ESSD.

    /dev/nvme1n1

    cpus_allowed_policy

    Parameter yang disediakan oleh alat fio untuk mengikat vCPU. Alat fio menyediakan parameter cpus_allowed_policy dan cpus_allowed untuk mengikat vCPU.

    split

    Perintah di atas menjalankan jobs untuk 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 parameter your_device dengan 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_device dengan nama perangkat aktual. Contoh: nvme1n1. Perintah tersebut mengembalikan ID core CPU yang mana antrian untuk ESSD diikat. Nama perangkat ESSD dalam format /dev/vd*.