Menyesuaikan performa gcloud CLI untuk bucket zonal

Saat Google Cloud CLI membaca objek dari bucket zonal di Rapid Bucket, Google Cloud CLI akan otomatis menerapkan konfigurasi irisan dan konkurensi default berdasarkan resource sistem yang tersedia.

Halaman ini menjelaskan konfigurasi default ini dan menjelaskan cara menggunakan gcloud CLI untuk lebih menyetel konkurensi, penskalaan proses, dan fitur keikutsertaan (seperti isolasi NIC) untuk membantu meningkatkan performa bagi workload tertentu. Untuk menyesuaikan performa saat memasang bucket zonal sebagai sistem file, lihat Performa Cloud Storage FUSE untuk Bucket Cepat.

Sebelum mengonfigurasi setelan performa, pastikan Anda membuat bucket zonal. Jika Anda berencana mendownload objek ke volume penyimpanan yang terpasang (seperti Hyperdisk atau SSD Lokal), pastikan Anda memformat dan memasang volume di lingkungan Anda. Untuk konsep slice umum, lihat Download objek menggunakan metode slice.

Konfigurasi konkurensi dan pengirisan default

Konfigurasi default di bagian ini berlaku secara khusus saat membaca objek dari bucket zonal di Bucket Cepat menggunakan gcloud CLI versi 583.0.0 atau yang lebih baru. Untuk bucket Cloud Storage standar, gcloud CLI menerapkan setelan serentak defaultnya sendiri.

Untuk bucket zona, gcloud CLI akan otomatis menetapkan parameter konkurensi dan slicing default berdasarkan jumlah core CPU virtual (vCPU) yang tersedia dan apakah Anda mendownload satu atau beberapa objek. Tabel berikut memetakan nilai default untuk properti ini:

Download objek tunggal

Saat mendownload satu objek, gcloud CLI menerapkan default berikut:

vCPU yang tersedia Jumlah proses Jumlah thread Nilai minimum pengirisan Komponen maks Ukuran komponen
≥ 8 8 2 50 MiB 16 5 MiB
< 8 4 2 50 MiB 8 5 MiB

Download multi-objek

Saat mendownload beberapa objek secara bersamaan, gcloud CLI menerapkan default berikut:

vCPU yang tersedia Jumlah proses Jumlah thread Nilai minimum pengirisan Komponen maks Ukuran komponen
≥ 48 min(96, available_cores * 0.75) 1 10 MiB 5 5 MiB
4 to 47 16 4 10 MiB 10 5 MiB
< 4 2 10 50 MiB 10 5 MiB

Menyesuaikan konfigurasi konkurensi dan pengirisan

Bagian ini menjelaskan cara mengonfigurasi setelan konkurensi dan pengirisan menggunakan gcloud CLI dan memberikan nilai yang direkomendasikan untuk lingkungan hardware umum.

Cara menerapkan konfigurasi

Untuk mengonfigurasi dan menerapkan setelan penyetelan kustom, selesaikan langkah-langkah berikut:

  1. Instal atau update Google Cloud CLI ke versi 583.0.0 atau yang lebih baru.

  2. Di lingkungan pengembangan Anda, jalankan perintah gcloud config configurations create untuk membuat dan mengaktifkan profil konfigurasi:

    gcloud config configurations create CONFIGURATION_NAME

    Ganti CONFIGURATION_NAME dengan nama untuk profil konfigurasi Anda, seperti rapid-perf.

  3. Jalankan perintah gcloud config set untuk mengonfigurasi properti konkurensi dan pengirisan:

    gcloud config set storage/thread_count THREAD_COUNT
    gcloud config set storage/process_count PROCESS_COUNT
    gcloud config set storage/sliced_object_download_threshold THRESHOLD_SIZE
    gcloud config set storage/sliced_object_download_component_size COMPONENT_SIZE
    gcloud config set storage/sliced_object_download_max_components MAX_COMPONENTS

    Ganti placeholder dengan nilai yang sesuai untuk beban kerja Anda:

    • THREAD_COUNT: jumlah thread per proses pekerja, seperti 1.
    • PROCESS_COUNT: jumlah proses pekerja, seperti 64.
    • THRESHOLD_SIZE: nilai minimum ukuran objek untuk memicu pengirisan, seperti 128 MiB untuk beban kerja multi-gigabyte (atau 32 MiB untuk objek yang lebih kecil).
    • COMPONENT_SIZE: ukuran target setiap irisan download, seperti 128 MiB untuk beban kerja multi-gigabyte (atau 32 MiB untuk objek yang lebih kecil).
    • MAX_COMPONENTS: jumlah maksimum komponen irisan per objek, seperti 16.

    Untuk mengetahui informasi selengkapnya tentang properti ini, lihat Menyesuaikan rekomendasi.

  4. Download objek ke jalur penyimpanan lokal Anda dengan menjalankan perintah gcloud storage cp:

    gcloud storage cp -r gs://BUCKET_NAME/SOURCE_PATH/ /DESTINATION_PATH/

    Ganti kode berikut:

    • BUCKET_NAME: nama bucket zonal Anda.
    • SOURCE_PATH: jalur objek atau direktori sumber di bucket Anda.
    • DESTINATION_PATH: jalur direktori lokal Anda, seperti ./data/, atau direktori pemasangan volume penyimpanan lokal Anda, seperti /mnt/hyperdisk/data/.

Menyesuaikan rekomendasi

Untuk memilih nilai yang sesuai untuk placeholder di langkah sebelumnya, tinjau panduan berikut:

Jumlah proses

Tetapkan properti storage/process_count untuk menskalakan proses worker paralel berdasarkan core CPU yang tersedia. Batasi jumlah proses hingga maksimum 80% dari core CPU yang tersedia:

storage/process_count = min(target_cores, 0.8 * available_cores)

Dengan:

  • target_cores: jumlah core CPU atau proses pekerja yang ingin Anda alokasikan untuk transfer (seperti 64).
  • available_cores: jumlah total CPU virtual (vCPU) yang tersedia di mesin Anda (misalnya, dengan menjalankan nproc di Linux).

Misalnya, jika target Anda adalah 64 proses pekerja, mesin dengan 80 vCPU atau lebih dapat menetapkan storage/process_count ke 64. Untuk mesin dengan kurang dari 80 vCPU, tetapkan storage/process_count ke 80% dari inti yang tersedia (misalnya, 51 pada VM 64 vCPU).

Jumlah thread

Tetapkan properti storage/thread_count untuk mengontrol jumlah thread per proses pekerja. Pada mesin dengan 48 vCPU atau lebih, tetapkan storage/thread_count ke 1.

Membatasi setiap proses pekerja ke satu thread pada mesin dengan core tinggi akan membantu mengurangi pertentangan thread Python Global Interpreter Lock (GIL) dan gRPC.

Nilai minimum pengirisan

Tetapkan properti storage/sliced_object_download_threshold untuk menentukan ukuran objek minimum yang diperlukan untuk memicu download yang diiris.

Sebaiknya tetapkan storage/sliced_object_download_threshold ke nilai yang sama dengan atau lebih besar dari storage/sliced_object_download_component_size.

Slice per objek

Tetapkan properti storage/sliced_object_download_component_size dan storage/sliced_object_download_max_components untuk mengontrol jumlah slice paralel yang dibuat per objek. gcloud CLI menghitung slice per objek menggunakan formula berikut:

Slices per object = min(object_size / component_size, max_components)

Jika objek cukup besar sehingga mengirisnya berdasarkan nilai component_size akan melebihi nilai max_components, gcloud CLI akan mengabaikan nilai component_size dan membagi objek secara merata menjadi max_components irisan. Misalnya, mendownload objek 100 GiB dengan component_size=128 MiB dan max_components=16 menghasilkan 16 slice dengan masing-masing berukuran 6,25 GiB.

Setiap slice didownload secara independen dan paralel berdasarkan total kapasitas pekerja Anda (storage/process_count × storage/thread_count).

Saturasi pekerja

Untuk membantu mempertahankan pemanfaatan pekerja yang tinggi selama transfer, sesuaikan jumlah proses, jumlah thread, ukuran komponen, dan komponen maks sehingga transfer umum Anda menghasilkan total slice yang cukup untuk sama dengan atau melebihi total kapasitas pekerja Anda:

Total slices across all objects >= storage/process_count * storage/thread_count

Misalnya, pertimbangkan untuk mendownload empat objek menggunakan 64 proses pekerja (process_count=64 dan thread_count=1):

  • Empat objek 2 GiB: setelan component_size=128 MiB menghasilkan 16 slice per objek (4 × 16 = 64 slice), yang sepenuhnya memanfaatkan semua 64 proses pekerja.
  • Empat objek 512 MiB: menyetel component_size=32 MiB menghasilkan 16 slice per objek (4 × 16 = 64 slice). Sebaliknya, penggunaan component_size=128 MiB pada objek 512 MiB hanya menghasilkan 4 slice per objek (total 16 slice), sehingga 48 proses pekerja tidak digunakan.

Isolasi NIC

Di komputer Linux dengan lebih dari 16 core CPU, Anda dapat mengaktifkan isolasi kartu antarmuka jaringan (NIC) dengan menyetel properti storage/use_nic_isolation ke True:

gcloud config set storage/use_nic_isolation True

Saat Anda mengaktifkan properti ini, gcloud CLI akan menetapkan afinitas CPU (os.sched_setaffinity()). Konfigurasi ini mengisolasi 10% inti CPU untuk permintaan interupsi hardware (IRQ) jaringan dan mencadangkan inti yang tersisa untuk pemrosesan data.

Langkah berikutnya