All Products
Search
Document Center

Elastic Compute Service:Uji kinerja IOPS ESSD

Last Updated:Aug 25, 2026

Topik ini menjelaskan cara mengonfigurasi kondisi pengujian dan menggunakan FIO untuk melakukan benchmark IOPS sebuah ESSD sebagai disk mentah.

Prasyarat

  • Tool pengujian: FIO.

    Catatan

    Fio (Flexible I/O Tester) adalah tool pengujian I/O open-source yang andal, digunakan untuk melakukan benchmark perangkat penyimpanan dengan berbagai beban kerja, seperti baca/tulis acak atau sekuensial.

  • Tipe instans: Disarankan menggunakan instans ECS ecs.g7se.32xlarge. Untuk informasi lebih lanjut, lihat Keluarga instans tujuan umum (seri g).

  • Gambar: Versi terbaru dari gambar publik Linux. Topik ini menggunakan Alibaba Cloud Linux 3.

    Catatan

    Hasil pengujian menunjukkan bahwa beberapa distribusi Linux mungkin tidak memberikan kinerja yang diharapkan. Kami menyarankan menggunakan gambar resmi Alibaba Cloud Linux 3 dari Alibaba Cloud untuk hasil terbaik.

  • ESSD:

    • Menguji disk mentah memberikan metrik kinerja yang lebih akurat untuk disk cloud. Kami menyarankan menjalankan FIO langsung pada disk mentah untuk menguji kinerjanya.

    • Disarankan menggunakan ESSD PL3. Untuk informasi lebih lanjut tentang ESSD, lihat ESSDs.

    Penting
    • Menguji disk mentah memberikan hasil kinerja penyimpanan blok yang paling akurat. Namun, menjalankan Fio langsung pada perangkat penyimpanan blok yang berisi partisi, sistem file, atau data lainnya akan menyebabkan error sistem file dan kehilangan data. Sebelum memulai, buat snapshot untuk mencadangkan data Anda. Untuk informasi lebih lanjut, lihat Buat snapshot manual.

    • Kami sangat menyarankan agar Anda tidak menguji sistem disk atau data disk yang berisi data untuk menghindari kehilangan data. Untuk pengujian, kami menyarankan menggunakan data disk baru yang belum diinisialisasi dan kosong.

    • Hasil pengujian kinerja diperoleh dalam lingkungan pengujian dan hanya untuk referensi. Di lingkungan produksi, kinerja disk cloud dapat bervariasi karena faktor-faktor seperti kondisi jaringan dan akses konkuren. Kinerja aktual akan berbeda-beda.

    • Setelah pengujian selesai, tangani disk cloud baru sebagai berikut:

Prosedur

  1. Sambungkan ke instans ECS.

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

  2. Jalankan perintah berikut untuk menampilkan daftar perangkat penyimpanan blok yang tersedia.

    sudo fdisk -lu

    Output berikut merupakan contoh di mana /dev/vda adalah sistem disk, sedangkan /dev/vdb dan /dev/vdc adalah data disk.

    [ecs-a                          ]$ sudo fdisk -lu
    Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: F51132A7-67B1-4650-806D-FD0DE6E1210C
    Device      Start      End  Sectors  Size Type
    /dev/vda1    2048     6143     4096    2M BIOS boot
    /dev/vda2    6144   415743   409600  200M EFI System
    /dev/vda3  415744 83886046 83470303 39.8G Linux filesystem
    Disk /dev/vdb: 30 GiB, 32212254720 bytes, 62914560 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: C36DF120-8650-4188-8043-AEF9C85F31EF
    Device     Start      End  Sectors Size Type
    /dev/vdb1   2048 62912511 62910464  30G Linux filesystem
    Disk /dev/vdc: 40 GiB, 42949672960 bytes, 83886080 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes

    Output di atas menunjukkan bahwa instans memiliki satu sistem disk /dev/vda dan dua data disk /dev/vdb dan /dev/vdc.

  3. Jalankan perintah berikut untuk memeriksa apakah perangkat penyimpanan blok memiliki partisi atau sistem file.

    sudo blkid
    [ecs-a]$ sudo blkid
    /dev/vdb1: UUID="9c32c24f-d2b8-4aa8-8xxx" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="primary" PARTUUID="4bd66635-f5f4-4dc0-9bdd-664fd5b8d2fb"
    /dev/vda2: SEC_TYPE="msdos" UUID="7E" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="82a50cd6-9899-41eb-91fe-7027bf257086"
    /dev/vda3: LABEL="root" UUID="beef9d8d-ba84-46d9-8xxx" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="e0d4fa20-912d-4e86-943e-6b0866xxx"
    /dev/vda1: PARTUUID="d083a7cd-a7ea-4898-89d5-8e1510bed584"

    Seperti yang ditunjukkan di atas, perangkat penyimpanan blok /dev/vda dan /dev/vdb memiliki partisi dan sistem file. Tidak ada informasi yang dikembalikan untuk /dev/vdc, yang menunjukkan bahwa perangkat tersebut tidak memiliki partisi atau sistem file.

  4. Sebelum menguji kinerja penyimpanan blok, pastikan Anda telah mencadangkan data objek pengujian untuk mencegah kehilangan data. Untuk informasi lebih lanjut, lihat Buat snapshot manual.

    Catatan

    Anda akan dikenai biaya atas penggunaan snapshot. Untuk informasi selengkapnya, lihat Harga Snapshot.

  5. Jalankan perintah berikut untuk menginstal library libaio dan tool FIO. Pilih perintah berdasarkan sistem operasi.

    Alibaba Cloud Linux 2/3 dan CentOS 6 atau versi lebih baru

    Catatan

    CentOS 6 telah mencapai masa akhir dukungan (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 dan Ubuntu 14 atau versi lebih baru

    Penting

    Karena Debian 9 dan 10 telah mencapai masa akhir dukungan (EOL), Anda harus terlebih dahulu mengubah alamat repositori pada instans ECS yang menjalankan versi-versi tersebut. Untuk informasi lebih lanjut, lihat Ubah alamat repositori untuk CentOS/Debian EOL.

    sudo apt-get update
    sudo apt-get install libaio* fio -y
  6. Masuk ke direktori /tmp.

    cd /tmp
  7. Buat skrip test100w.sh.

    sudo vim test100w.sh
  8. Tempel konten berikut ke dalam file test100w.sh. Untuk informasi lebih lanjut, lihat 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: Device $device does not exist"
            exit 1
        fi
        # Gunakan 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 "$DEV_NAME contains a partition table or a file system. Stop the fio script!"
        exit 1
    fi
    function RunFio
    {
     numjobs=$1   # Jumlah thread pengujian dalam instans. Contoh: 10.
     iodepth=$2   # Jumlah maksimum permintaan I/O yang dapat diajukan secara bersamaan. Contoh: 64.
     bs=$3        # Ukuran satu blok I/O. Contoh: 4k.
     rw=$4        # Kebijakan baca/tulis untuk pengujian. Contoh: randwrite.
     size=$5
     filename=$6  # Nama file pengujian. Contoh: /dev/your_device.
     nr_cpus=`cat /proc/cpuinfo |grep "processor" |wc -l`
     if [ $nr_cpus -lt $numjobs ];then
         echo "Numjobs is more than cpu cores, exit!"
         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 skrip test100w.sh sesuai kebutuhan.

    • Ganti semua parameter your_device dengan nama perangkat aktual, misalnya nvme1n1.

    • Atur nilai untuk 10 (numjobs), 64 (iodepth), 4k (bs), randwrite (rw), dan /dev/your_device dalam perintah RunFio 10 64 4k randwrite /dev/your_device berdasarkan situasi aktual Anda.

    • Nilai numjobs tidak boleh melebihi jumlah core CPU. Untuk mengetahui jumlah core CPU, jalankan perintah berikut:

      cat /proc/cpuinfo |grep "processor" |wc -l
  10. Jalankan perintah berikut untuk menguji kinerja ESSD.

    sudo sh test100w.sh
    • Dalam output perintah, baris yang berisi IOPS=*** menunjukkan IOPS ESSD.

      job1: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=128
      ...
        fio-3.7
        Starting 6 processes
        Jobs: 6 (f=6): [w(6)][100.0%][r=0KiB/s,w=3932MiB/s][r=0,w=1007k IOPS][eta 00m:00s]
      job1: (groupid=0, jobs=6): err= 0: pid=42693: Thu Jun 23 15:32:28 2022
        write: IOPS=1005k, BW=3925MiB/s (4116MB/s)(38.4GiB/10015msec)
          slat (nsec): min=728, max=9562.2k, avg=5157.38, stdev=47881.11
          clat (usec): min=82, max=25001, avg=758.61, stdev=843.67
           lat (usec): min=86, max=25042, avg=763.86, stdev=844.85
          clat percentiles (usec):
           |  1.00th=[  190],  5.00th=[  347], 10.00th=[  445], 20.00th=[  537],
           | 30.00th=[  586], 40.00th=[  635], 50.00th=[  652], 60.00th=[  676],
           | 70.00th=[  693], 80.00th=[  717], 90.00th=[  824], 95.00th=[ 1254],
           | 99.00th=[ 4424], 99.50th=[ 6849], 99.90th=[10814], 99.95th=[15008],
           | 99.99th=[19530]
         bw (  KiB/s): min=573448, max=732136, per=16.69%, avg=670799.74, stdev=26159.23, samples=120
         iops        : min=143362, max=183034, avg=167699.93, stdev=6539.81, samples=120
        lat (usec)   : 100=0.01%, 250=2.26%, 500=11.66%, 750=71.40%, 1000=8.11%
        lat (msec)   : 2=3.38%, 4=2.02%, 10=1.04%, 20=0.11%, 50=0.01%
        cpu          : usr=14.45%, sys=24.23%, ctx=401609, majf=0, minf=236
        IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=110.0%
           submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
           complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.1%
           issued rwts: total=0,10062326,0,0 short=0,0,0,0 dropped=0,0,0,0
           latency   : target=0, window=0, percentile=100.00%, depth=128
      Run status group 0 (all jobs):
        WRITE: bw=3925MiB/s (4116MB/s), 3925MiB/s-3925MiB/s (4116MB/s-4116MB/s), io=38.4GiB (41.2GB), run=10015-10015msec
      Disk stats (read/write):
        nvme1n1: ios=4Z/11063917, merge=0/0, ticks=5/8026436, in_queue=9632482, util=100.00%
    • Jika Anda melihat output berikut, disk pengujian memiliki partisi atau sistem file. Skrip FIO berhenti untuk memastikan keamanan data. Gunakan data disk baru yang kosong untuk pengujian.

      [[ecs-user@ecs tmp]$ sudo sh test100w.sh
      /dev/vdb contains a partition table or a file system. Stop the fio script!
      Peringatan

      Jika objek pengujian memiliki partisi, sistem file, atau data lainnya, menjalankan FIO langsung pada objek tersebut akan menyebabkan exception sistem file dan kehilangan data. Jika data disk Anda memiliki partisi dan sistem file, kami menyarankan membuat data disk baru yang kosong untuk pengujian:

      • Anda dapat membuat disk cloud bayar sesuai penggunaan yang memiliki konfigurasi yang sama dan menyambungkan disk tersebut ke Instans untuk pengujian. Untuk informasi selengkapnya, lihat Membuat disk data.

      • Setelah pengujian selesai, Anda dapat melepas dan merilis disk sesuai kebutuhan. Untuk informasi selengkapnya, lihat Melepas disk data dan Merilis disk cloud.

Skrip Test100w.sh

  • Perintah berikut mengatur parameter rq_affinity perangkat blok ke nilai 2.

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

    Nilai rq_affinity

    Deskripsi nilai

    1

    Saat perangkat blok menyelesaikan operasi I/O, event penyelesaian dikirim ke grup vCPU yang sama yang mengajukan permintaan. Dalam skenario multi-threaded dan konkuren, hal ini menciptakan bottleneck dan membatasi kinerja.

    2

    Saat perangkat blok menyelesaikan operasi I/O, event penyelesaian diproses pada vCPU yang mengajukan permintaan. Dalam skenario multi-threaded dan konkuren, kinerja setiap vCPU dapat dimanfaatkan secara penuh.

  • Perintah berikut mengikat jobs yang berbeda 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 hanya memiliki satu antrian permintaan. Dalam skenario I/O multi-threaded dan konkuren, satu-satunya antrian permintaan dapat menjadi bottleneck kinerja. Mode multi-antrian memungkinkan perangkat menggunakan beberapa antrian permintaan untuk memproses I/O, sehingga memanfaatkan sepenuhnya kinerja penyimpanan backend. Untuk menggunakan fitur ini secara efektif, Anda harus mengikat thread I/O ke core CPU yang berbeda yang sesuai dengan antrian permintaan yang berbeda.

    Parameter

    Catatan

    Contoh

    numjobs

    Jumlah thread I/O.

    10

    /dev/your_device

    Nama perangkat ESSD.

    /dev/nvme1n1

    cpus_allowed_policy

    FIO menyediakan parameter cpus_allowed_policy dan cpus_allowed untuk mengikat vCPU.

    split

    Perintah di atas menjalankan beberapa jobs dan mengikatnya ke core CPU yang berbeda yang sesuai dengan nilai Queue_Id yang berbeda. Untuk menanyakan nilai cpu_core_id yang diikat oleh nilai Queue_Id, jalankan perintah berikut:

    • Jalankan perintah ls /sys/block/your_device/mq/. Dalam perintah ini, ganti your_device dengan nama perangkat aktual, misalnya nvme1n1. Perintah ini menanyakan nilai Queue_Id untuk perangkat yang ditentukan.

    • Jalankan perintah cat /sys/block/your_device/mq/*/cpu_list. Dalam perintah ini, ganti your_device dengan nama perangkat aktual, misalnya nvme1n1. Perintah ini menunjukkan core CPU mana yang diikat ke setiap antrian permintaan untuk perangkat yang ditentukan.