Mengoptimalkan performa persistent disk


Persistent Disk memberi Anda performa yang dijelaskan dalam diagram jenis disk jika VM mendorong penggunaan yang cukup untuk mencapai batas performa. Setelah Anda mengukur volume persistent disk untuk memenuhi kebutuhan performa, beban kerja dan sistem operasi Anda mungkin perlu disesuaikan.

Bagian berikut menjelaskan karakteristik VM dan beban kerja yang memengaruhi performa disk dan membahas beberapa elemen kunci yang dapat disesuaikan untuk performa yang lebih baik. Beberapa saran dan cara menerapkan beberapa di antaranya ke jenis beban kerja tertentu.

Faktor-faktor yang memengaruhi performa disk

Bagian berikut menjelaskan faktor-faktor yang memengaruhi performa disk untuk VM.

Batas traffic keluar jaringan untuk throughput operasi tulis

VM Anda memiliki batas traffic keluar jaringan yang bergantung pada jenis mesin VM.

Compute Engine menyimpan data di Persistent Disk dengan beberapa operasi tulis paralel untuk memastikan redundansi bawaan. Selain itu, setiap permintaan tulis memiliki beberapa overhead yang menggunakan bandwidth tulis tambahan.

Traffic tulis maksimum yang dapat dihasilkan instance VM adalah batas traffic keluar jaringan dibagi dengan pengganda bandwidth yang memperhitungkan replikasi dan overhead.

Batas traffic keluar jaringan tercantum di kolom Bandwidth traffic keluar maksimum (Gbps) di tabel jenis mesin untuk tujuan umum, dioptimalkan untuk komputasi, dioptimalkan penyimpanan, dioptimalkan memori, dan dioptimalkan akselerator kelompok mesin.

Pengganda bandwidth berada di kisaran 1,16x saat penggunaan jaringan penuh, yang berarti 16% byte yang ditulis merupakan overhead. Untuk Persistent Disk regional, pengganda bandwidth berada di kisaran 2,32x untuk memperhitungkan overhead replikasi tambahan.

Jika operasi baca dan tulis Persistent Disk bersaing dengan bandwidth keluar jaringan, 60% dari bandwidth keluar jaringan maksimum, yang ditentukan oleh jenis mesin, dialokasikan ke operasi tulis Persistent Disk. 40% sisanya tersedia untuk semua traffic keluar jaringan lainnya. Lihat bandwidth keluar untuk detail tentang traffic keluar jaringan yang lain.

Contoh berikut menunjukkan cara menghitung bandwidth operasi tulis maksimum untuk sebuah Persistent Disk di instance VM N1. Alokasi bandwidth adalah bagian dari bandwidth traffic keluar jaringan yang dialokasikan ke Persistent Disk. Bandwidth tulis maksimum adalah bandwidth operasi tulis maksimum Persistent Disk yang disesuaikan untuk overhead.

Jumlah vCPU VM Batas traffic keluar jaringan (MB/d) Alokasi bandwidth (MB/dtk) Bandwidth tulis maksimum (MB/dtk) Bandwidth tulis maksimum pada penggunaan jaringan penuh (MB/dtk)
1 250 150 216 129
2-7 1.250 750 1.078 647
8-15 2.000 1.200 1.724 1.034
16+ 4.000 2.400 3.448 2.069

Anda dapat menghitung bandwidth Persistent Disk maksimum menggunakan formula berikut:

VM N1 dengan 1 vCPU

Batas traffic keluar jaringannya adalah:

2 Gbps / 8 bit = 0,25 GB per detik = 250 MB per detik

Alokasi bandwidth Persistent Disk saat penggunaan jaringan penuh adalah:

250 MB per detik * 0,6 = 150 MB per detik.

Bandwidth tulis maksimum Persistent Disk tanpa pertentangan jaringan adalah:

  • Disk tingkat zona: 250 MB per detik / 1,16 ~= 216 MB per detik
  • Disk regional: 250 MB per detik / 2,32 ~= 108 MB per detik

Bandwidth tulis maksimum Persistent Disk pada saat penggunaan jaringan penuh adalah:

  • Disk tingkat zona: 150 MB per detik / 1,16 ~= 129 MB per detik
  • Disk regional: 150 MB per detik / 2,32 ~= 65 MB per detik

Batas traffic keluar jaringan memberikan batas atas performa. Faktor lain dapat membatasi performa di bawah tingkat ini. Lihat bagian berikut untuk informasi tentang batasan performa lainnya.

Operasi baca dan tulis secara bersamaan

Untuk Persistent Disk standar, operasi baca dan tulis secara bersamaan berbagi resource yang sama. Saat menggunakan lebih banyak throughput baca atau IOPS, VM Anda dapat melakukan lebih sedikit penulisan. Sebaliknya, instance yang menggunakan lebih banyak throughput tulis atau IOPS dapat melakukan lebih sedikit pembacaan.

Volume Persistent Disk tidak dapat mencapai batas throughput dan IOPS maksimumnya secara bersamaan untuk pembacaan dan penulisan.

Penghitungan untuk throughput adalah IOPS * I/O size. Guna memanfaatkan batas throughput maksimum untuk operasi baca dan tulis secara bersamaan di Persistent Disk SSD, gunakan ukuran I/O sehingga gabungan IOPS baca dan tulis tidak melebihi batas IOPS.

Tabel berikut mencantumkan batas IOPS per VM untuk operasi baca dan tulis secara bersamaan.

Persistent disk standar Persistent disk SSD (8 vCPU) Persistent disk SSD (32+ vCPU) Persistent disk SSD (64+ vCPU)
Baca Menulis Melihat Menulis Melihat Menulis Melihat Tulis
7.500 0 15.000 0 60.000 0 100.000 0
5.625 3.750 11.250 3.750 45.000 15.000 75.000 25.000
3.750 7.500 7.500 7.500 30.000 30.000 50.000 50.000
1875 11.250 3.750 11.250 15.000 45.000 25.000 75.000
0 15.000 0 15.000 0 60.000 0 100.000

Angka IOPS dalam tabel ini didasarkan pada ukuran I/O 8 KB. Ukuran I/O lainnya, seperti 16 KB, mungkin memiliki angka IOPS yang berbeda, tetapi mempertahankan distribusi baca/tulis yang sama.

Tabel berikut mencantumkan batas throughput (MB per detik) per VM untuk operasi baca dan tulis secara bersamaan.

Persistent disk standar Persistent disk SSD (6-14 vCPU) Persistent disk SSD (16+ vCPU)
Baca Menulis Melihat Menulis Melihat Tulis
1200 0 800* 800* 1.200* 1.200*
900 100
600 200
300 300
0 400

* Untuk Persistent Disk SSD, throughput baca maksimum dan throughput operasi tulis maksimum tidak saling bergantung, sehingga batas-batas ini bersifat konstan.

Ukuran volume logis

Persistent Disk dapat berukuran hingga 64 TiB, dan Anda dapat membuat satu volume logis hingga 257 TiB menggunakan pengelolaan volume logis di dalam VM Anda. Ukuran volume yang lebih besar akan memengaruhi performa dalam hal berikut:

  • Tidak semua sistem file lokal berfungsi dengan baik pada skala ini. Operasi umum, seperti pemasangan dan pemeriksaan sistem file mungkin memerlukan waktu lebih lama dari yang diperkirakan.
  • Performa Persistent Disk maksimum dicapai pada ukuran yang lebih kecil. Disk membutuhkan waktu lebih lama untuk membaca atau menulis sepenuhnya dengan penyimpanan sebesar ini di satu VM. Jika aplikasi Anda mendukungnya, pertimbangkan untuk menggunakan beberapa VM untuk total throughput sistem yang lebih besar.
  • Mengambil snapshot Persistent Disk dalam jumlah besar mungkin memerlukan waktu lebih lama dari yang diperkirakan, dan mungkin memberikan tampilan yang tidak konsisten dari volume logis Anda tanpa koordinasi yang cermat dengan aplikasi Anda.

Beberapa disk terpasang ke satu instance VM

Batas performa disk saat Anda memiliki beberapa disk yang terpasang ke VM bergantung pada apakah disk tersebut berjenis sama atau berbeda.

Beberapa disk dari jenis yang sama

Jika Anda memiliki beberapa disk dari jenis yang sama yang terpasang ke instance VM dalam mode yang sama (misalnya, baca/tulis), batas performanya sama dengan batas disk tunggal yang memiliki gabungan ukuran disk tersebut. Jika Anda menggunakan semua disk hingga 100%, batas performa agregat akan dibagi secara merata di antara disk, terlepas dari ukuran disk relatif.

Misalnya, Anda memiliki disk pd-standard sebesar 200 GB dan disk pd-standard sebesar 1.000 GB. Jika Anda tidak menggunakan disk 1.000 GB, disk 200 GB dapat mencapai batas performa disk standar sebesar 1.200 GB. Jika Anda menggunakan kedua disk tersebut hingga 100%, setiap disk akan memiliki batas performa disk pd-standard 600 GB (1.200 GB / 2 disk = 600 GB disk).

Beberapa jenis disk yang berbeda

Jika Anda memasang berbagai jenis disk ke VM, performa maksimum yang dimungkinkan adalah batas performa disk tercepat yang didukung VM. Performa kumulatif disk yang terpasang tidak akan melebihi batas performa disk tercepat yang didukung VM.

Mengoptimalkan disk Anda untuk workload yang berorientasi IOPS atau throughput

Rekomendasi performa bergantung pada apakah Anda ingin memaksimalkan IOPS atau throughput.

Workload berorientasi IOPS

Database, baik SQL maupun NoSQL, memiliki pola penggunaan akses acak ke data. Google merekomendasikan nilai berikut untuk workload berorientasi IOPS:

  • Nilai kedalaman antrean I/O 1 untuk setiap 400 hingga 800 IOPS, hingga batas 64 pada volume besar

  • Satu CPU kosong untuk setiap 2.000 IOPS operasi baca acak dan 1 CPU kosong untuk setiap 2.500 IOPS penulisan acak

  • Jika tersedia untuk jenis mesin VM Anda, gunakan disk Google Cloud Hyperdisk Ekstrem, yang memungkinkan Anda mengubah IOPS yang disediakan.

Nilai readahead yang lebih rendah biasanya disarankan dalam dokumen praktik terbaik untuk MongoDB, Apache Cassandra, dan aplikasi database lainnya.

Workload berorientasi throughput

Operasi streaming, seperti tugas Hadoop, mendapatkan manfaat dari pembacaan berurutan yang cepat, dan ukuran I/O yang lebih besar dapat meningkatkan performa streaming.

  • Gunakan ukuran I/O 256 KB atau yang lebih besar.

  • Jika tersedia untuk jenis mesin VM Anda, gunakan disk Throughput Hyperdisk, yang memungkinkan Anda mengubah throughput yang disediakan.

  • Untuk Persistent Disk standar, gunakan 8 aliran I/O berurutan paralel atau lebih jika memungkinkan. Persistent Disk Standar dirancang guna mengoptimalkan performa I/O untuk akses disk berurutan, mirip dengan hard drive HDD fisik.

  • Pastikan aplikasi Anda dioptimalkan untuk lokalitas data sementara yang wajar pada disk besar.

    Jika aplikasi Anda mengakses data yang didistribusikan di berbagai bagian disk dalam jangka waktu singkat (ratusan GB per vCPU), Anda tidak akan dapat mencapai IOPS yang optimal. Untuk performa terbaik, optimalkan lokalitas data sementara, dengan mempertimbangkan faktor seperti fragmentasi disk dan keacakan bagian disk yang diakses.

  • Untuk Persistent Disk SSD, pastikan penjadwal I/O di sistem operasi dikonfigurasi untuk memenuhi kebutuhan spesifik Anda.

    Pada sistem berbasis Linux, periksa apakah penjadwal I/O disetel ke none. Penjadwal I/O ini tidak mengurutkan ulang permintaan dan ideal untuk perangkat I/O acak yang cepat.

    1. Pada command line, pastikan jadwal I/O yang digunakan oleh mesin Linux Anda:

      cat /sys/block/sda/queue/scheduler
      

      Outputnya mirip dengan berikut ini:

      [mq-deadline] none
      

      Penjadwal I/O yang saat ini aktif ditampilkan dalam tanda kurung siku ([]).

    2. Jika penjadwal I/O tidak ditetapkan ke none, lakukan salah satu langkah berikut:

      • Untuk mengubah penjadwal I/O default ke none, tetapkan elevator=none dalam entri GRUB_CMDLINE_LINUX file konfigurasi GRUB. Biasanya file ini terletak di /etc/default/grub, tetapi pada beberapa distribusi sebelumnya, file mungkin terletak di direktori yang berbeda.
      GRUB_CMDLINE_LINUX="elevator=none vconsole.keymap=us console=ttyS0,38400n8 vconsole.font=latarcyrheb-sun16
      

      Setelah memperbarui file konfigurasi GRUB, konfigurasikan bootloader pada sistem agar dapat melakukan booting di Compute Engine.

      • Atau, Anda dapat mengubah penjadwal I/O saat runtime:
      echo 'none' > sudo /sys/block/sda/queue/scheduler
      

      Jika Anda menggunakan metode ini, sistem akan beralih kembali ke penjadwal I/O default saat memulai ulang. Jalankan perintah cat lagi untuk memverifikasi penjadwal I/O Anda.

Perubahan workload yang dapat meningkatkan performa disk

Perilaku beban kerja tertentu dapat meningkatkan performa operasi I/O pada disk yang terpasang.

Menggunakan antrean I/O berkedalaman lebih

Persistent Disk memiliki latensi lebih tinggi daripada disk yang terpasang secara lokal seperti disk SSD Lokal karena merupakan perangkat yang terhubung ke jaringan. API ini dapat memberikan IOPS dan throughput yang sangat tinggi, tetapi Anda harus memastikan bahwa permintaan I/O yang memadai dilakukan secara paralel. Jumlah permintaan I/O yang dilakukan secara paralel disebut sebagai kedalaman antrean I/O.

Tabel di bawah menunjukkan kedalaman antrean I/O yang direkomendasikan untuk memastikan Anda dapat mencapai tingkat performa tertentu. Perhatikan bahwa tabel di bawah ini menggunakan sedikit perkiraan latensi yang lebih tinggi untuk menampilkan rekomendasi konservatif. Contoh ini mengasumsikan bahwa Anda menggunakan ukuran I/O 16 KB.

Membuat I/O yang cukup menggunakan ukuran I/O besar

  • Menggunakan ukuran I/O besar

    Untuk memastikan batas dan latensi IOPS tidak menghambat performa aplikasi Anda, gunakan ukuran I/O minimum 256 KB atau yang lebih tinggi.

    Menggunakan ukuran stripe besar untuk aplikasi sistem file yang terdistribusi. Workload I/O acak yang menggunakan ukuran jalur besar (4 MB atau lebih besar) mencapai performa yang baik pada Persistent Disk standar karena seberapa dekat workload yang meniru beberapa akses stream disk berurutan.

  • Memastikan aplikasi Anda menghasilkan I/O yang cukup

    Pastikan aplikasi Anda menghasilkan I/O yang cukup untuk memanfaatkan batas IOPS dan throughput disk sepenuhnya. Untuk lebih memahami pola I/O workload Anda, tinjau penggunaan persistent disk dan metrik performa di Cloud Monitoring.

  • Pastikan tersedia CPU yang cukup di instance yang menghasilkan I/O

    Jika instance VM Anda kekurangan CPU, aplikasi tidak akan dapat mengelola IOPS yang dijelaskan sebelumnya. Sebaiknya Anda memiliki satu CPU yang tersedia untuk setiap 2.000–2.500 IOPS traffic yang diharapkan.

Membatasi pemuatan I/O berat hingga durasi maksimum

Durasi mengacu pada rentang alamat blok logis yang berdekatan pada satu disk fisik. Pemuatan I/O berat mencapai performa maksimum saat dibatasi pada durasi maksimum tertentu, yang bergantung pada jenis mesin VM tempat disk dipasang, seperti yang tercantum dalam tabel berikut.

Jenis mesin Durasi maksimum yang direkomendasikan
  • m2-megamem-416
  • VM C2D
25 TB
Semua jenis mesin lainnya 50 TB

Durasi pada Persistent Disk terpisah yang bertambah hingga 50 TB atau kurang dapat dianggap sama dengan satu durasi 50 TB untuk tujuan performa.

Perubahan sistem operasi untuk meningkatkan performa disk

Dalam beberapa kasus, Anda dapat mengaktifkan atau menonaktifkan fitur pada tingkat sistem operasi, atau mengonfigurasi disk yang terpasang dengan cara tertentu untuk meningkatkan performa disk.

Menghindari penggunaan sistem file ext3 di Linux

Menggunakan sistem file ext3 di VM Linux dapat menghasilkan performa yang sangat buruk untuk beban tulis yang berat. Gunakan ext4 jika memungkinkan. Driver sistem file ext4 kompatibel dengan sistem lama ext3/ext2 dan mendukung pemasangan sistem file ext3. Sistem file ext4 adalah setelan default di sebagian besar sistem operasi Linux.

Jika tidak dapat bermigrasi ke ext4, sebagai solusi, Anda dapat memasang sistem file ext3 dengan opsi pemasangan data=journal. Hal ini meningkatkan IOPS tulis dengan mengorbankan throughput operasi tulis. Bermigrasi ke ext4 dapat menghasilkan peningkatan hingga 7 kali lipat dalam beberapa benchmark.

Menonaktifkan inisialisasi lambat dan aktifkan perintah DISCARD

Persistent Disk mendukung operasi penghapusan atau perintah TRIM, yang memungkinkan sistem operasi memberi tahu disk saat blok tidak lagi digunakan. Dengan penghapusan dukungan, sistem operasi dapat menandai blok disk sebagai tidak diperlukan lagi, tanpa menimbulkan biaya untuk mengosongkan blok.

Pada sebagian besar sistem operasi Linux, Anda mengaktifkan operasi penghapusan saat memasang Persistent Disk di VM Anda. VM Windows Server 2012 R2 akan mengaktifkan operasi penghapusan secara default saat Anda memasang Persistent Disk.

Mengaktifkan operasi penghapusan dapat meningkatkan performa runtime umum, dan juga dapat mempercepat performa disk Anda saat pertama kali dipasang. Memformat seluruh volume disk dapat menghabiskan waktu, jadi pemformatan lambat merupakan praktik yang umum. Kelemahan dari pemformatan lambat adalah biaya sering kali dibayarkan saat volume pertama kali dipasang. Dengan menonaktifkan inisialisasi lambat dan mengaktifkan operasi penghapusan, Anda bisa mendapatkan format cepat dan operasi pemasangan.

  • Nonaktifkan inisialisasi lambat dan aktifkan operasi penghapusan saat memformat disk dengan meneruskan parameter berikut ke mkfs.ext4:

    -E lazy_itable_init=0,lazy_journal_init=0,discard
    

    Parameter lazy_journal_init=0 tidak berfungsi pada instance dengan image CentOS 6 atau RHEL 6. Untuk VM yang menggunakan sistem operasi tersebut, formatlah Persistent Disk tanpa parameter tersebut.

    -E lazy_itable_init=0,discard
    
  • Aktifkan operasi penghapusan saat memasang disk dengan meneruskan flag berikut ke perintah mount:

    -o discard
    

Persistent Disk akan berfungsi baik jika operasi penghapusan diaktifkan. Namun, Anda juga dapat menjalankan fstrim sebagai tambahan atau pengganti dari menggunakan operasi penghapusan. Jika Anda tidak menggunakan operasi penghapusan, jalankan fstrim sebelum membuat snapshot boot disk. Dengan memangkas sistem file, Anda dapat membuat image snapshot yang lebih kecil, sehingga mengurangi biaya penyimpanan snapshot.

Menyesuaikan nilai readahead

Untuk meningkatkan performa I/O, sistem operasi menggunakan teknik seperti readahead. Dalam hal ini, lebih banyak file yang diminta yang akan dibaca ke dalam memori dengan asumsi bahwa operasi baca berikutnya mungkin membutuhkan data tersebut. Readahead yang lebih tinggi meningkatkan throughput dengan mengorbankan memori dan IOPS. Readahead yang lebih rendah meningkatkan IOPS dengan mengorbankan throughput.

Pada sistem Linux, Anda dapat memperoleh dan menetapkan nilai readahead dengan perintah blockdev:

$ sudo blockdev --getra /dev/DEVICE_ID
$ sudo blockdev --setra VALUE /dev/DEVICE_ID

Nilai readahead adalah <desired_readahead_bytes> / 512 byte.

Misalnya, untuk readahead 8 MB, 8 MB adalah 8388608 byte (8 * 1024 * 1024).

8388608 bytes / 512 bytes = 16384

Anda menyetel blockdev ke 16384:

$ sudo blockdev --setra 16384 /dev/DEVICE_ID

Mengubah VM Anda atau membuat VM baru

Ada batasan yang terkait dengan setiap jenis mesin VM, yang dapat memengaruhi performa yang bisa Anda dapatkan dari disk yang terpasang. Batasan ini mencakup:

  • Performa Persistent Disk akan meningkat seiring dengan bertambahnya jumlah vCPU yang tersedia.
  • Hyperdisk tidak didukung untuk semua jenis mesin.
  • Tarif traffic keluar jaringan akan meningkat seiring dengan bertambahnya jumlah vCPU yang tersedia.

Memastikan CPU Anda kosong

Pembacaan dan penulisan ke persistent disk memerlukan siklus CPU dari VM Anda. Untuk mencapai level IOPS yang sangat tinggi dan konsisten, Anda harus memiliki CPU yang kosong untuk memproses I/O.

Untuk meningkatkan jumlah vCPU yang tersedia dengan VM, Anda dapat membuat VM baru, atau mengedit jenis mesin instance VM.

Membuat VM baru untuk mendapatkan fungsi baru

Jenis disk yang lebih baru tidak didukung pada semua seri mesin atau jenis mesin. Hyperdisk menyediakan IOPS atau kecepatan throughput yang lebih tinggi untuk workload Anda, tetapi saat ini hanya tersedia dengan beberapa seri mesin, dan memerlukan setidaknya 64 vCPU.

Rangkaian mesin VM baru biasanya berjalan pada CPU yang lebih baru, yang dapat menawarkan performa yang lebih baik daripada pendahulunya. Selain itu, CPU yang lebih baru dapat mendukung fungsi tambahan untuk meningkatkan performa workload Anda, seperti Advanced Matrix Extensions (AMX) atau Intel Advanced Vector Extensions (AVX-512).

Langkah selanjutnya