Ottimizzare le prestazioni di gcloud CLI per i bucket zonali

Quando leggi oggetti da bucket zonali in Rapid Bucket utilizzando Google Cloud CLI, la CLI applica automaticamente le configurazioni predefinite di concorrenza e suddivisione in base alle risorse di sistema disponibili.

Questo documento descrive queste configurazioni predefinite e spiega come ottimizzare le prestazioni dell'interfaccia alla gcloud CLI per carichi di lavoro specifici configurando la concorrenza, lo scaling dei processi e le funzionalità di attivazione, come l'isolamento NIC.

Prima di modificare le impostazioni delle prestazioni, devi creare un bucket zonale. Se scarichi oggetti in un volume di archiviazione collegato, ad esempio Hyperdisk o SSD locale, formatta e monta il volume nel tuo ambiente. Se prevedi di montare i bucket zonali come file system anziché utilizzare gcloud CLI, consulta Prestazioni di Cloud Storage FUSE per Rapid Bucket. Per i concetti generali di suddivisione, vedi Download di oggetti suddivisi.

Configurazioni predefinite di concorrenza e suddivisione

Le configurazioni predefinite descritte in questa sezione si applicano in modo specifico quando leggi oggetti da bucket di zona in Rapid Bucket utilizzando gcloud CLI versione 583.0.0 o successive. Per i bucket Cloud Storage standard, gcloud CLI applica le proprie impostazioni di concorrenza predefinite.

Per i bucket di zona, gcloud CLI imposta automaticamente i parametri di concorrenza e suddivisione predefiniti in base al numero di core della CPU virtuale (vCPU) disponibili e al download di un singolo oggetto o di più oggetti. Questi valori predefiniti configurano le seguenti proprietà:

Le sezioni seguenti elencano i valori predefiniti per i download di singoli oggetti e di più oggetti.

Download di un singolo oggetto

Quando scarichi un singolo oggetto, gcloud CLI applica i seguenti valori predefiniti:

vCPU disponibili Conteggio processi Conteggio thread Soglia di suddivisione Componenti massimi Dimensioni del componente
≥ 8 8 2 50 MiB 16 5 MiB
< 8 4 2 50 MiB 8 5 MiB

Download di più oggetti

Quando scarichi più oggetti contemporaneamente, la gcloud CLI applica i seguenti valori predefiniti:

vCPU disponibili Conteggio processi Conteggio thread Soglia di suddivisione Componenti massimi Dimensioni del componente
≥ 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

Configurare le proprietà di concorrenza e suddivisione

Per configurare e applicare le impostazioni di ottimizzazione personalizzate, completa i seguenti passaggi:

  1. Installa o aggiorna Google Cloud CLI alla versione 583.0.0 o successiva.

  2. Nel tuo ambiente di sviluppo, esegui il comando gcloud config configurations create per creare e attivare un profilo di configurazione:

    gcloud config configurations create CONFIGURATION_NAME

    Sostituisci CONFIGURATION_NAME con un nome per il profilo di configurazione, ad esempio rapid-perf.

  3. Esegui il comando gcloud config set per configurare le proprietà di concorrenza e suddivisione:

    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

    Sostituisci quanto segue:

    • THREAD_COUNT: il numero di thread per processo di lavoro, ad esempio 1.
    • PROCESS_COUNT: il numero di processi di lavoro, ad esempio 64.
    • THRESHOLD_SIZE: la soglia minima per le dimensioni degli oggetti per attivare lo slicing, ad esempio 128 MiB per i carichi di lavoro di più gigabyte (o 32 MiB per gli oggetti più piccoli).
    • COMPONENT_SIZE: le dimensioni target di ogni sezione di download, ad esempio 128 MiB per carichi di lavoro di più gigabyte (o 32 MiB per oggetti più piccoli).
    • MAX_COMPONENTS: il numero massimo di componenti di slice per oggetto, ad esempio 16.

    Per saperne di più su queste proprietà, consulta la sezione Ottimizzazione dei suggerimenti.

  4. Per scaricare gli oggetti nel percorso di archiviazione locale, esegui il comando gcloud storage cp:

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

    Sostituisci quanto segue:

    • BUCKET_NAME: il nome del bucket a livello di zona.
    • SOURCE_PATH: la directory di origine o il percorso dell'oggetto nel bucket.
    • LOCAL_DESTINATION_PATH: il percorso della directory locale (ad esempio ./data/) o il punto di montaggio del volume di archiviazione locale (ad esempio /mnt/hyperdisk/data/).

Suggerimenti per l'ottimizzazione

Utilizza i seguenti consigli per ottimizzare la concorrenza, lo slicing e le risorse di sistema per i tuoi workload.

Conteggio processi

Imposta la proprietà storage/process_count per scalare i processi worker paralleli in base ai core della CPU disponibili. Limita il conteggio dei processi a un massimo dell'80% dei core CPU disponibili:

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

Dove:

  • target_cores: il numero di core CPU o processi di lavoro che vuoi allocare per il trasferimento (ad esempio 64).
  • available_cores: il numero totale di CPU virtuali (vCPU) disponibili sulla tua macchina (ad esempio eseguendo nproc su Linux).

Ad esempio, se il target è 64 processi worker su una macchina con 80 o più vCPU, imposta storage/process_count su 64. Su una macchina con meno di 80 vCPU, imposta storage/process_count sull'80% delle vCPU disponibili (ad esempio, 51 su una VM con 64 vCPU).

Conteggio thread

Imposta la proprietà storage/thread_count per controllare il numero di thread per processo worker. Sulle macchine con 48 o più vCPU, imposta storage/thread_count su 1.

Limitare ogni processo worker a un singolo thread sulle macchine con 48 o più vCPU riduce la contesa dei thread Python Global Interpreter Lock (GIL) e gRPC.

Soglia di suddivisione

Imposta la proprietà storage/sliced_object_download_threshold per specificare la dimensione minima dell'oggetto necessaria per attivare i download suddivisi.

Ti consigliamo di impostare storage/sliced_object_download_threshold su un valore maggiore o uguale a storage/sliced_object_download_component_size.

Sezioni per oggetto

Imposta le proprietà storage/sliced_object_download_component_size e storage/sliced_object_download_max_components per controllare il numero di sezioni parallele generate per oggetto. gcloud CLI calcola le sezioni per oggetto utilizzando la seguente formula:

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

Se un oggetto è abbastanza grande da superare il valore max_components se suddiviso in base al valore component_size, gcloud CLI ignora il valore component_size e divide l'oggetto in max_components parti uguali. Ad esempio, il download di un oggetto da 100 GiB con component_size=128 MiB e max_components=16 produce 16 segmenti da 6,25 GiB ciascuno.

gcloud CLI scarica ogni slice in modo indipendente e in parallelo in base alla capacità totale dei worker (storage/process_count × storage/thread_count).

Saturazione dei worker

Per mantenere un elevato utilizzo dei worker durante un trasferimento, devi regolare il conteggio dei processi, il conteggio dei thread, la dimensione dei componenti e il numero massimo di componenti. Questi aggiustamenti assicurano che i trasferimenti tipici generino un numero totale di segmenti sufficiente a raggiungere o superare la capacità totale dei lavoratori:

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

Ad esempio, considera il download di quattro oggetti utilizzando 64 processi worker (process_count=64 e thread_count=1):

  • Quattro oggetti da 2 GiB: l'impostazione component_size=128 MiB genera 16 sezioni per oggetto (4 × 16 = 64 sezioni), che utilizzano completamente tutti i 64 processi di lavoro.
  • Quattro oggetti da 512 MiB: l'impostazione component_size=32 MiB genera 16 sezioni per oggetto (4 × 16 = 64 sezioni), che utilizzano completamente tutti i 64 processi worker. Al contrario, l'utilizzo di component_size=128 MiB su oggetti da 512 MiB produce solo 4 segmenti per oggetto (16 segmenti totali), lasciando 48 processi di lavoro inattivi.

Isolamento NIC

Sulle macchine Linux con più di 16 core CPU, puoi attivare l'isolamento della scheda di interfaccia di rete (NIC) impostando la proprietà storage/use_nic_isolation su True:

gcloud config set storage/use_nic_isolation True

Quando abiliti questa proprietà, gcloud CLI imposta l'affinità della CPU (os.sched_setaffinity()). Questa configurazione isola il 10% dei core della CPU per le richieste di interruzione hardware di rete (IRQ) e riserva i core rimanenti per l'elaborazione dei dati.

Passaggi successivi