Menyesuaikan performa gcloud CLI untuk bucket zonal

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

Dokumen ini menjelaskan konfigurasi default ini dan menjelaskan cara menyesuaikan performa gcloud CLI untuk workload tertentu dengan mengonfigurasi konkurensi, penskalaan proses, dan fitur keikutsertaan, seperti isolasi NIC.

Sebelum menyesuaikan setelan performa, Anda harus membuat bucket zona. Jika Anda mendownload objek ke volume penyimpanan yang terpasang, seperti Hyperdisk atau SSD Lokal, format dan pasang volume di lingkungan Anda. Jika Anda berencana memasang bucket zona sebagai sistem file, bukan menggunakan gcloud CLI, lihat Performa Cloud Storage FUSE untuk Rapid Bucket. Untuk mengetahui konsep pemotongan umum, lihat Download objek menggunakan metode slice.

Konfigurasi konkurensi dan pemisahan default

Konfigurasi default yang dijelaskan di bagian ini berlaku secara khusus saat Anda membaca objek dari bucket zona di Rapid Bucket menggunakan gcloud CLI versi 583.0.0 atau yang lebih baru. Untuk bucket Cloud Storage standar, gcloud CLI menerapkan setelan serentak default-nya sendiri.

Untuk bucket zona, gcloud CLI otomatis menetapkan parameter konkurensi dan pemotongan default berdasarkan jumlah core CPU virtual (vCPU) yang tersedia dan apakah Anda mendownload satu objek atau beberapa objek. Setelan default ini mengonfigurasi properti berikut:

Bagian berikut mencantumkan nilai default untuk download objek tunggal dan multi-objek.

Download objek tunggal

Saat Anda mendownload satu objek, gcloud CLI akan menerapkan nilai default berikut:

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

Download multi-objek

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

vCPU yang tersedia Jumlah proses Jumlah thread Nilai minimum pemotongan Komponen maksimal 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

Mengonfigurasi properti konkurensi dan pemisahan

Untuk mengonfigurasi dan menerapkan setelan penyesuaian 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, misalnya rapid-perf.

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

    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 kode berikut:

    • THREAD_COUNT: jumlah thread per proses worker, seperti 1.
    • PROCESS_COUNT: jumlah proses worker, seperti 64.
    • THRESHOLD_SIZE: nilai minimum ukuran objek minimum untuk memicu pemotongan, seperti 128 MiB untuk workload multi-gigabyte (atau 32 MiB untuk objek yang lebih kecil).
    • COMPONENT_SIZE: ukuran target setiap slice download, seperti 128 MiB untuk workload 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 Rekomendasi penyesuaian.

  4. Untuk mendownload objek ke jalur penyimpanan lokal, jalankan perintah gcloud storage cp:

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

    Ganti kode berikut:

    • BUCKET_NAME: nama bucket zona Anda.
    • SOURCE_PATH: direktori sumber atau jalur objek di bucket Anda.
    • LOCAL_DESTINATION_PATH: jalur direktori lokal Anda (seperti ./data/) atau direktori pemasangan volume penyimpanan lokal Anda (seperti /mnt/hyperdisk/data/).

Menyesuaikan rekomendasi

Gunakan rekomendasi berikut untuk menyesuaikan konkurensi, pemotongan, dan resource sistem untuk workload Anda.

Jumlah proses

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

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

Dengan:

  • target_cores: jumlah core CPU atau proses worker 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 worker pada mesin dengan 80 vCPU atau lebih, tetapkan storage/process_count ke 64. Pada mesin dengan kurang dari 80 vCPU, tetapkan storage/process_count ke 80% vCPU yang tersedia (misalnya, 51 pada VM 64 vCPU).

Jumlah thread

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

Membatasi setiap proses worker ke satu thread pada mesin dengan 48 vCPU atau lebih akan mengurangi pertentangan thread Python Global Interpreter Lock (GIL) dan gRPC.

Nilai minimum pemotongan

Tetapkan properti storage/sliced_object_download_threshold untuk menentukan ukuran objek minimum yang diperlukan untuk memicu download yang dibagi-bagi.

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

Irisan per objek

Tetapkan properti storage/sliced_object_download_component_size dan storage/sliced_object_download_max_components untuk mengontrol jumlah slice paralel yang dihasilkan 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 pemotongannya berdasarkan nilai component_size akan melebihi nilai max_components, gcloud CLI akan mengabaikan nilai component_size dan membagi objek secara merata menjadi max_components bagian. Misalnya, mendownload objek 100 GiB dengan component_size=128 MiB dan max_components=16 menghasilkan 16 slice yang masing-masing berukuran 6,25 GiB.

gcloud CLI mendownload setiap slice secara independen dan paralel berdasarkan total kapasitas worker Anda (storage/process_count × storage/thread_count).

Saturasi worker

Untuk mempertahankan pemakaian worker yang tinggi selama transfer, Anda harus menyesuaikan jumlah proses, jumlah thread, ukuran komponen, dan komponen maksimum. Penyesuaian ini memastikan bahwa transfer standar menghasilkan total slice yang cukup untuk menyamai atau melebihi total kapasitas worker Anda:

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

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

  • Empat objek 2 GiB: menyetel component_size=128 MiB akan menghasilkan 16 slice per objek (4 × 16 = 64 slice), yang sepenuhnya memanfaatkan 64 proses worker.
  • Empat objek 512 MiB: menetapkan component_size=32 MiB akan menghasilkan 16 slice per objek (4 × 16 = 64 slice), yang sepenuhnya memanfaatkan 64 proses worker. Sebaliknya, menggunakan component_size=128 MiB pada objek 512 MiB hanya menghasilkan 4 slice per objek (total 16 slice), sehingga 48 proses worker tidak ada aktivitas.

Isolasi NIC

Di mesin Linux dengan lebih dari 16 core CPU, Anda dapat mengaktifkan isolasi kartu antarmuka jaringan (NIC) dengan menetapkan 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% core CPU untuk permintaan interupsi hardware (IRQ) jaringan dan mencadangkan core yang tersisa untuk pemrosesan data.

Langkah berikutnya