All Products
Search
Document Center

Elastic Compute Service:Uji kinerja IOPS ESSD

Last Updated:Apr 28, 2026

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

    Catatan

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

    Catatan

    ESSD 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:

Prosedur

  1. Sambungkan ke instans ECS.

    Untuk informasi lebih lanjut, lihat Masuk ke instans Linux menggunakan Workbench.

  2. Kueri nama perangkat penyimpanan blok:

    sudo fdisk -lu

    fdisk outputOutput menunjukkan tiga perangkat penyimpanan blok: sistem disk /dev/vda dan dua data disk /dev/vdb serta /dev/vdc.

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

    sudo blkid

    blkid outputOutput 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.

  4. Buat cadangan data pada perangkat penyimpanan blok sebelum pengujian untuk mencegah kehilangan data. Lihat Buat snapshot secara manual.

    Catatan

    Snapshot dikenai biaya. Lihat Penagihan snapshot.

  5. Instal library libaio dan fio berdasarkan sistem operasi Anda.

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

    Catatan

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

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

    Penting

    Debian 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
  6. Pindah ke direktori /tmp:

    cd /tmp
  7. Buat skrip test100w.sh:

    sudo vim test100w.sh
  8. 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
  9. Modifikasi parameter skrip sesuai lingkungan Anda.

    • Ganti your_device dengan 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_device dengan nilai aktual.

    • Nilai numjobs tidak boleh melebihi jumlah core CPU. Kueri jumlah core CPU:

      cat /proc/cpuinfo |grep "processor" |wc -l
  10. Uji kinerja ESSD:

    sudo sh test100w.sh
    • Pada output, IOPS=*** menunjukkan IOPS ESSD.image

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

      Peringatan

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

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

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

    Dalam 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

    numjobs

    Jumlah thread I/O.

    10

    /dev/your_device

    Nama perangkat ESSD.

    /dev/nvme1n1

    cpus_allowed_policy

    Parameter fio untuk mengikat vCPU. Gunakan cpus_allowed_policy dan cpus_allowed bersama-sama untuk mengikat vCPU.

    split

    Perintah ini menjalankan jobs untuk 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/. Ganti your_device dengan 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_device dengan nama perangkat aktual (misalnya, nvme1n1). Ini mengembalikan ID core CPU yang diikat ke setiap antrian untuk ESSD dengan nama perangkat /dev/vd*.