Ottimizzare le prestazioni di gcloud CLI per i bucket zonali

Quando Google Cloud CLI legge gli oggetti dai bucket a livello di zona in Rapid Bucket, applica automaticamente le configurazioni predefinite di concorrenza e suddivisione in base alle risorse di sistema disponibili.

Questa pagina descrive queste configurazioni predefinite e spiega come utilizzare gcloud CLI per ottimizzare ulteriormente la concorrenza, il ridimensionamento dei processi e le funzionalità di attivazione (come l'isolamento NIC) per migliorare il rendimento di workload specifici. Per ottimizzare il rendimento durante il montaggio dei bucket a livello di zona come file system, consulta Rendimento di Cloud Storage FUSE per Rapid Bucket.

Prima di configurare le impostazioni di rendimento, assicurati di creare un bucket a livello di zona. Se prevedi di scaricare oggetti in un volume di archiviazione collegato (come Hyperdisk o SSD locale), assicurati di formattare e montare il volume nel tuo ambiente. Per i concetti generali di suddivisione, consulta Download di oggetti suddivisi.

Configurazioni predefinite di concorrenza e suddivisione

Le configurazioni predefinite in questa sezione si applicano in modo specifico alla lettura di oggetti da bucket a livello 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 a livello di zona, gcloud CLI imposta automaticamente i parametri predefiniti di concorrenza e suddivisione in base al numero di core della CPU virtuale (vCPU) disponibili e al fatto che tu stia scaricando un singolo oggetto o più oggetti. Le seguenti tabelle mappano i valori predefiniti per queste proprietà:

Download di un singolo oggetto

Quando scarichi un singolo oggetto, gcloud CLI applica le seguenti impostazioni predefinite:

vCPU disponibili Numero di processi Numero di thread Soglia di suddivisione Componenti massimi Dimensione 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, gcloud CLI applica le seguenti impostazioni predefinite:

vCPU disponibili Numero di processi Numero di thread Soglia di suddivisione Componenti massimi Dimensione 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

Ottimizzare le configurazioni di concorrenza e suddivisione

Questa sezione descrive come configurare le impostazioni di concorrenza e suddivisione utilizzando gcloud CLI e fornisce i valori consigliati per gli ambienti hardware comuni.

Come applicare una configurazione

Per configurare e applicare le impostazioni di ottimizzazione personalizzate:

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

  2. Nell'ambiente di sviluppo, esegui il gcloud config configurations create comando 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 i segnaposto con i valori adatti al tuo workload:

    • THREAD_COUNT: il numero di thread per processo worker, ad esempio 1.
    • PROCESS_COUNT: il numero di processi worker, ad esempio 64.
    • THRESHOLD_SIZE: la soglia minima di dimensione dell'oggetto per attivare la suddivisione, ad esempio 128 MiB per i workload multi-gigabyte (o 32 MiB per gli oggetti più piccoli).
    • COMPONENT_SIZE: la dimensione target di ogni suddivisione di download, ad esempio 128 MiB per i workload multi-gigabyte (o 32 MiB per gli oggetti più piccoli).
    • MAX_COMPONENTS: il numero massimo di componenti di suddivisione per oggetto, ad esempio 16.

    Per maggiori informazioni su queste proprietà, consulta Suggerimenti per l'ottimizzazione.

  4. Scarica gli oggetti nel percorso di archiviazione locale eseguendo il gcloud storage cp comando:

    gcloud storage cp -r gs://BUCKET_NAME/SOURCE_PATH/ /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.
    • 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

Per scegliere i valori appropriati per i segnaposto nei passaggi precedenti, consulta le seguenti linee guida:

Numero di processi

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

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

Dove:

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

Ad esempio, se la tua destinazione è di 64 processi worker, le macchine con 80 o più vCPU possono impostare storage/process_count su 64. Per le macchine con meno di 80 vCPU, imposta storage/process_count sull'80% dei core disponibili (ad esempio, 51 su una VM con 64 vCPU).

Numero di 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 un numero elevato di core aiuta a ridurre 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 richiesta per attivare i download suddivisi.

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

Suddivisioni per oggetto

Imposta le proprietà storage/sliced_object_download_component_size e storage/sliced_object_download_max_components per controllare il numero di suddivisioni parallele generate per oggetto. gcloud CLI calcola le suddivisioni 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 modo uniforme in suddivisioni max_components. Ad esempio, il download di un oggetto da 100 GiB con component_size=128 MiB e max_components=16 produce 16 suddivisioni da 6,25 GiB ciascuna.

Ogni suddivisione viene scaricata 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, regola il numero di processi, il numero di thread, la dimensione dei componenti e i componenti massimi in modo che i trasferimenti tipici generino un numero totale di suddivisioni pari o superiore alla capacità totale dei worker:

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 di component_size=128 MiB genera 16 suddivisioni per oggetto (4 × 16 = 64 suddivisioni), utilizzando completamente tutti i 64 processi worker.
  • Quattro oggetti da 512 MiB: l'impostazione di component_size=32 MiB genera 16 suddivisioni per oggetto (4 × 16 = 64 suddivisioni). Al contrario, l'utilizzo di component_size=128 MiB su oggetti da 512 MiB produce solo 4 suddivisioni per oggetto (16 suddivisioni totali), lasciando inattivi 48 processi worker.

Isolamento NIC

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

gcloud config set storage/use_nic_isolation True

Quando attivi 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 interrupt hardware di rete (IRQ) e riserva i core rimanenti per l'elaborazione dei dati.

Passaggi successivi