Membuat tolok ukur performa SSD Lokal


Batas performa SSD Lokal yang diberikan di bagian Pilih opsi penyimpanan tercapai dengan menggunakan setelan tertentu pada instance SSD Lokal. Jika instance virtual machine (VM) Anda kesulitan mencapai batas performa ini dan Anda telah mengonfigurasi instance menggunakan setelan SSD lokal yang direkomendasikan, Anda dapat membandingkan batas performa Anda terhadap batas yang dipublikasikan dengan mereplikasi setelan yang digunakan oleh tim Compute Engine.

Petunjuk ini mengasumsikan bahwa Anda menggunakan sistem operasi Linux dengan pengelola paket apt yang sudah terinstal.

Membuat VM dengan satu perangkat SSD Lokal

Jumlah SSD Lokal yang dapat dimiliki VM didasarkan pada jenis mesin yang Anda gunakan untuk membuat VM. Untuk mengetahui detailnya, baca bagian Memilih jumlah SSD Lokal yang valid.

  1. Buat instance SSD Lokal yang memiliki empat atau delapan vCPU untuk setiap perangkat, bergantung pada beban kerja Anda.

    Misalnya, perintah berikut akan membuat VM C3 dengan 4 vCPU dan 1 SSD Lokal.

    gcloud compute instances create c3-ssd-test-instance \
        --machine-type "c3-standard-4-lssd"
    

    Untuk jenis mesin generasi kedua dan sebelumnya, tentukan jumlah SSD Lokal yang akan dipasang ke VM menggunakan flag --local-ssd. Perintah berikut membuat VM N2 dengan 8 vCPU dan 1 SSD Lokal yang menggunakan antarmuka disk NVMe:

    gcloud compute instances create ssd-test-instance \
        --machine-type "n2-standard-8" \
        --local-ssd interface=nvme
    
  2. Jalankan skrip berikut di VM Anda. Skrip ini mereplikasi setelan yang digunakan untuk mencapai angka performa SSD yang diberikan di bagian performa. Perhatikan bahwa parameter --bs menentukan ukuran blok, yang memengaruhi hasil untuk berbagai jenis operasi baca dan tulis.

    # install tools
    sudo apt-get -y update
    sudo apt-get install -y fio util-linux
    
    # discard Local SSD sectors
    sudo blkdiscard /dev/disk/by-id/google-local-nvme-ssd-0
    
    # full write pass - measures write bandwidth with 1M blocksize
    sudo fio --name=writefile \
    --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --bs=1M --nrfiles=1 \
    --direct=1 --sync=0 --randrepeat=0 --rw=write --end_fsync=1 \
    --iodepth=128 --ioengine=libaio
    
    # rand read - measures max read IOPS with 4k blocks
    sudo fio --time_based --name=readbenchmark --runtime=30 --ioengine=libaio \
    --filename=/dev/disk/by-id/google-local-nvme-ssd-0  --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=4 --rw=randread --blocksize=4k --group_reporting
    
    # rand write - measures max write IOPS with 4k blocks
    sudo fio --time_based --name=writebenchmark  --runtime=30 --ioengine=libaio \
    --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=4 --rw=randwrite --blocksize=4k --group_reporting
    

Membuat VM dengan jumlah maksimum SSD Lokal

  1. Jika Anda ingin memasang 24 perangkat SSD Lokal atau lebih ke instance, gunakan jenis mesin dengan 32 vCPU atau lebih.

    Perintah berikut membuat VM dengan jumlah maksimum disk SSD Lokal yang diizinkan menggunakan antarmuka NVMe:

    Memasang SSD Lokal ke VM

    gcloud compute instances create ssd-test-instance \
        --machine-type "n1-standard-32" \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme \
        --local-ssd interface=nvme
    

    Menggunakan jenis mesin -lssd

    Seri mesin yang lebih baru menawarkan jenis mesin -lssd yang dilengkapi dengan jumlah disk SSD Lokal yang telah ditentukan. Misalnya, untuk mengukur performa VM dengan 32 SSD Lokal (kapasitas 12 TiB), gunakan perintah berikut:

    gcloud compute instances create ssd-test-instance \
        --machine-type "c3-standard-176-lssd"
    
  2. Instal alat mdadm. Proses penginstalan untuk mdadm menyertakan perintah pengguna yang menghentikan skrip, jadi jalankan proses secara manual:

    Debian dan Ubuntu

    sudo apt update && sudo apt install mdadm --no-install-recommends
    

    CentOS dan RHEL

    sudo yum install mdadm -y
    

    SLES dan openSUSE

    sudo zypper install -y mdadm
    
  3. Gunakan perintah find untuk mengidentifikasi semua SSD Lokal yang ingin Anda pasang bersama:

    find /dev/ | grep google-local-nvme-ssd
    

    Outputnya terlihat mirip dengan yang berikut ini:

    /dev/disk/by-id/google-local-nvme-ssd-23
    /dev/disk/by-id/google-local-nvme-ssd-22
    /dev/disk/by-id/google-local-nvme-ssd-21
    /dev/disk/by-id/google-local-nvme-ssd-20
    /dev/disk/by-id/google-local-nvme-ssd-19
    /dev/disk/by-id/google-local-nvme-ssd-18
    /dev/disk/by-id/google-local-nvme-ssd-17
    /dev/disk/by-id/google-local-nvme-ssd-16
    /dev/disk/by-id/google-local-nvme-ssd-15
    /dev/disk/by-id/google-local-nvme-ssd-14
    /dev/disk/by-id/google-local-nvme-ssd-13
    /dev/disk/by-id/google-local-nvme-ssd-12
    /dev/disk/by-id/google-local-nvme-ssd-11
    /dev/disk/by-id/google-local-nvme-ssd-10
    /dev/disk/by-id/google-local-nvme-ssd-9
    /dev/disk/by-id/google-local-nvme-ssd-8
    /dev/disk/by-id/google-local-nvme-ssd-7
    /dev/disk/by-id/google-local-nvme-ssd-6
    /dev/disk/by-id/google-local-nvme-ssd-5
    /dev/disk/by-id/google-local-nvme-ssd-4
    /dev/disk/by-id/google-local-nvme-ssd-3
    /dev/disk/by-id/google-local-nvme-ssd-2
    /dev/disk/by-id/google-local-nvme-ssd-1
    /dev/disk/by-id/google-local-nvme-ssd-0
    

    find tidak menjamin pengurutan. Tidak masalah jika perangkat dicantumkan dalam urutan yang berbeda selama jumlah baris output sesuai dengan jumlah partisi SSD yang diharapkan.

    Jika menggunakan perangkat SCSI, gunakan perintah find berikut:

    find /dev/ | grep google-local-ssd
    

    Semua perangkat NVMe harus dalam format google-local-nvme-ssd-# dan perangkat SCSI harus dalam format google-local-ssd-#.

  4. Gunakan alat mdadm untuk menggabungkan beberapa perangkat SSD Lokal ke dalam satu array bernama /dev/md0. Contoh berikut menggabungkan dua puluh empat perangkat SSD Lokal yang menggunakan antarmuka NVMe. Untuk perangkat SSD Lokal yang menggunakan SCSI, gunakan nama perangkat yang ditampilkan dari perintah find di langkah 3.

    sudo mdadm --create /dev/md0 --level=0 --raid-devices=24 \
    /dev/disk/by-id/google-local-nvme-ssd-0 \
    /dev/disk/by-id/google-local-nvme-ssd-1 \
    /dev/disk/by-id/google-local-nvme-ssd-2 \
    /dev/disk/by-id/google-local-nvme-ssd-3 \
    /dev/disk/by-id/google-local-nvme-ssd-4 \
    /dev/disk/by-id/google-local-nvme-ssd-5 \
    /dev/disk/by-id/google-local-nvme-ssd-6 \
    /dev/disk/by-id/google-local-nvme-ssd-7 \
    /dev/disk/by-id/google-local-nvme-ssd-8 \
    /dev/disk/by-id/google-local-nvme-ssd-9 \
    /dev/disk/by-id/google-local-nvme-ssd-10 \
    /dev/disk/by-id/google-local-nvme-ssd-11 \
    /dev/disk/by-id/google-local-nvme-ssd-12 \
    /dev/disk/by-id/google-local-nvme-ssd-13 \
    /dev/disk/by-id/google-local-nvme-ssd-14 \
    /dev/disk/by-id/google-local-nvme-ssd-15 \
    /dev/disk/by-id/google-local-nvme-ssd-16 \
    /dev/disk/by-id/google-local-nvme-ssd-17 \
    /dev/disk/by-id/google-local-nvme-ssd-18 \
    /dev/disk/by-id/google-local-nvme-ssd-19 \
    /dev/disk/by-id/google-local-nvme-ssd-20 \
    /dev/disk/by-id/google-local-nvme-ssd-21 \
    /dev/disk/by-id/google-local-nvme-ssd-22 \
    /dev/disk/by-id/google-local-nvme-ssd-23
    

    Responsnya mirip dengan hal berikut ini:

    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md0 started.
    

    Anda dapat mengonfirmasi detail array dengan mdadm --detail. Menambahkan flag --prefer=by-id akan mencantumkan perangkat yang menggunakan jalur /dev/disk/by-id.

     sudo mdadm --detail --prefer=by-id /dev/md0
    

    Output akan terlihat seperti berikut untuk setiap perangkat dalam array.

     ...
     Number   Major   Minor   RaidDevice State
     0     259        0        0      active sync   /dev/disk/by-id/google-local-nvme-ssd-0
     ...
    
  5. Jalankan skrip berikut di VM Anda. Skrip ini mereplikasi setelan yang digunakan untuk mencapai angka performa SSD yang diberikan di bagian performa. parameter --bs menentukan ukuran blok, yang memengaruhi hasil untuk berbagai jenis operasi baca dan tulis.

    # install tools
    sudo apt-get -y update
    sudo apt-get install -y fio util-linux
    
    # full write pass - measures write bandwidth with 1M blocksize
    sudo fio --name=writefile \
    --filename=/dev/md0 --bs=1M --nrfiles=1 \
    --direct=1 --sync=0 --randrepeat=0 --rw=write --end_fsync=1 \
    --iodepth=128 --ioengine=libaio
    
    # rand read - measures max read IOPS with 4k blocks
    sudo fio --time_based --name=benchmark  --runtime=30 \
    --filename=/dev/md0 --ioengine=libaio --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=32 --rw=randread --blocksize=4k --group_reporting --norandommap
    
    # rand write - measures max write IOPS with 4k blocks
    sudo fio --time_based --name=benchmark  --runtime=30 \
    --filename=/dev/md0 --ioengine=libaio --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=32 --rw=randwrite --blocksize=4k --group_reporting --norandommap
    

Membuat Benchmark VM yang Dioptimalkan untuk Penyimpanan

  1. VM yang Dioptimalkan dengan Penyimpanan (seperti Keluarga Z3) harus diukur secara langsung terhadap partisi perangkat. Anda bisa mendapatkan nama partisi dengan lsblk

    lsblk -o name,size -lpn | grep 2.9T | awk '{print $1}'
    

    Outputnya terlihat mirip dengan yang berikut ini:

    /dev/nvme1n1
    /dev/nvme2n1
    /dev/nvme3n1
    /dev/nvme4n1
    /dev/nvme5n1
    /dev/nvme6n1
    /dev/nvme7n1
    /dev/nvme8n1
    /dev/nvme9n1
    /dev/nvme10n1
    /dev/nvme11n1
    /dev/nvme12n1
    
  2. Jalankan benchmark secara langsung terhadap partisi SSD Lokal dengan memisahkannya menggunakan pemisah titik dua.

    # install benchmarking tools
    sudo apt-get -y update
    sudo apt-get install -y fio util-linux
    
    # Full Write Pass.
    # SOVM achieves max read performance on previously written/discarded ranges.
    sudo  fio --readwrite=write --blocksize=1m --iodepth=4 --ioengine=libaio \
    --direct=1 --group_reporting \
    --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \
    --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \
    --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \
    --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \
    --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \
    --name=job11  --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1
    
    # rand read - measures max read IOPS with 4k blocks
    sudo fio --readwrite=randread --blocksize=4k --iodepth=128  \
    --numjobs=4 --direct=1 --runtime=30 --group_reporting  --ioengine=libaio \
    --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \
    --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \
    --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \
    --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \
    --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \
    --name=job11  --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1
    
    # rand write - measures max write IOPS with 4k blocks
    sudo fio --readwrite=randwrite --blocksize=4k --iodepth=128 \
    --numjobs=4 --direct=1 --runtime=30 --group_reporting --ioengine=libaio \
    --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \
    --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \
    --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \
    --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \
    --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \
    --name=job11  --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1
    

Langkah selanjutnya