Ajustar a performance da CLI gcloud para buckets zonais

Ao ler objetos de buckets zonais no Rapid Bucket usando a Google Cloud CLI, a CLI aplica automaticamente configurações padrão de simultaneidade e divisão com base nos recursos de sistema disponíveis.

Este documento descreve essas configurações padrão e explica como ajustar o desempenho da CLI gcloud para cargas de trabalho específicas configurando simultaneidade, escalonamento de processos e recursos opcionais, como o isolamento de NIC.

Antes de ajustar as configurações de desempenho, você deve criar um bucket zonal. Se você fizer o download de objetos para um volume de armazenamento anexado, como Hyperdisk ou SSD local, formate e ative o volume no seu ambiente. Se você planeja ativar buckets zonais como um sistema de arquivos em vez de usar a CLI gcloud, consulte Desempenho do Cloud Storage FUSE para o Rapid Bucket. Para conceitos gerais de divisão, consulte Downloads de objetos divididos.

Configurações padrão de simultaneidade e divisão

As configurações padrão descritas nesta seção se aplicam especificamente quando você lê objetos de buckets zonais em Rapid Bucket usando a CLI gcloud versão 583.0.0 ou mais recente. Para buckets padrão do Cloud Storage, a CLI gcloud aplica as próprias configurações de simultaneidade padrão.

Para buckets zonais, a CLI gcloud define automaticamente os parâmetros padrão de simultaneidade e divisão com base no número de núcleos de CPU virtual (vCPU) disponíveis e se você faz o download de um ou vários objetos. Esses padrões configuram as seguintes propriedades:

As seções a seguir listam os valores padrão para downloads de objeto único e de vários objetos.

Downloads de objeto único

Ao fazer o download de um único objeto, a CLI gcloud aplica os seguintes valores padrão:

vCPUs disponíveis Contagem de processos Contagem de threads Limite de divisão Componentes máximos Tamanho do componente
≥ 8 8 2 50 MiB 16 5 MiB
< 8 4 2 50 MiB 8 5 MiB

Downloads de vários objetos

Ao fazer o download de vários objetos simultaneamente, a CLI gcloud aplica os seguintes valores padrão:

vCPUs disponíveis Contagem de processos Contagem de threads Limite de divisão Componentes máximos Tamanho do 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

Configurar propriedades de simultaneidade e divisão

Para configurar e aplicar configurações de ajuste personalizadas, siga estas etapas:

  1. Instale ou atualize a Google Cloud CLI para a versão 583.0.0 ou mais recente.

  2. No ambiente de desenvolvimento, execute o gcloud config configurations create comando para criar e ativar um perfil de configuração:

    gcloud config configurations create CONFIGURATION_NAME

    Substitua CONFIGURATION_NAME por um nome para o perfil de configuração, como rapid-perf.

  3. Execute o comando gcloud config set para configurar as propriedades de simultaneidade e divisão:

    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

    Substitua:

    • THREAD_COUNT: o número de threads por processo de worker, como 1.
    • PROCESS_COUNT: o número de processos de worker, como 64.
    • THRESHOLD_SIZE: o limite mínimo de tamanho do objeto para acionar a divisão, como 128 MiB para cargas de trabalho de vários gigabytes (ou 32 MiB para objetos menores).
    • COMPONENT_SIZE: o tamanho de destino de cada fração de download, como 128 MiB para cargas de trabalho de vários gigabytes (ou 32 MiB para objetos menores).
    • MAX_COMPONENTS: o número máximo de componentes de fração por objeto, como 16.

    Para mais informações sobre essas propriedades, consulte Recomendações de ajuste.

  4. Para fazer o download de objetos para o caminho de armazenamento local, execute o gcloud storage cp comando:

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

    Substitua:

    • BUCKET_NAME: o nome do bucket zonal.
    • SOURCE_PATH: o diretório de origem ou o caminho do objeto no bucket.
    • LOCAL_DESTINATION_PATH: o caminho do diretório local (como ./data/) ou o ponto de montagem do volume de armazenamento local (como /mnt/hyperdisk/data/).

Recomendações de ajuste

Use as recomendações a seguir para ajustar a simultaneidade, a divisão e os recursos do sistema para suas cargas de trabalho.

Contagem de processos

Defina a propriedade storage/process_count para escalonar processos de worker paralelos com base nos núcleos de CPU disponíveis. Limite a contagem de processos a um máximo de 80% dos núcleos de CPU disponíveis:

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

Em que:

  • target_cores: o número de núcleos de CPU ou processos de worker que você quer alocar para a transferência (como 64).
  • available_cores: o número total de CPUs virtuais (vCPUs) disponíveis na máquina (por exemplo, executando nproc no Linux).

Por exemplo, se o destino for 64 processos de worker em uma máquina com 80 ou mais vCPUs, defina storage/process_count como 64. Em uma máquina com menos de 80 vCPUs, defina storage/process_count como 80% das vCPUs disponíveis (por exemplo, 51 em uma VM de 64 vCPUs).

Contagem de threads

Defina a propriedade storage/thread_count para controlar o número de threads por processo de worker. Em máquinas com 48 ou mais vCPUs, defina storage/thread_count como 1.

Restringir cada processo de worker a uma única thread em máquinas com 48 ou mais vCPUs reduz a contenção de threads do Python Global Interpreter Lock (GIL) e do gRPC.

Limite de divisão

Defina a propriedade storage/sliced_object_download_threshold para especificar o tamanho mínimo do objeto necessário para acionar downloads divididos.

Recomendamos definir storage/sliced_object_download_threshold como um valor igual ou maior que storage/sliced_object_download_component_size.

Fatias por objeto

Defina as propriedades storage/sliced_object_download_component_size e storage/sliced_object_download_max_components para controlar o número de fatias paralelas geradas por objeto. A CLI gcloud calcula as fatias por objeto usando a seguinte fórmula:

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

Se um objeto for grande o suficiente para que a divisão pelo valor component_size exceda o valor max_components, a CLI gcloud vai ignorar o valor component_size e dividir o objeto igualmente em fatias max_components. Por exemplo, o download de um objeto de 100 GiB com component_size=128 MiB e max_components=16 produz 16 fatias de 6,25 GiB cada.

A CLI gcloud faz o download de cada fatia de forma independente e paralela com base na capacidade total do worker (storage/process_count × storage/thread_count).

Saturação do worker

Para manter a alta utilização do worker durante uma transferência, ajuste a contagem de processos, a contagem de threads, o tamanho do componente e os componentes máximos. Esses ajustes garantem que as transferências típicas gerem fatias totais suficientes para igualar ou exceder a capacidade total do worker:

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

Por exemplo, considere o download de quatro objetos usando 64 processos de worker (process_count=64 e thread_count=1):

  • Quatro objetos de 2 GiB: definir component_size=128 MiB gera 16 fatias por objeto (4 × 16 = 64 fatias), que utilizam totalmente todos os 64 processos de worker.
  • Quatro objetos de 512 MiB: definir component_size=32 MiB gera 16 fatias por objeto (4 × 16 = 64 fatias), que utilizam totalmente todos os 64 processos de worker. Por outro lado, usar component_size=128 MiB em objetos de 512 MiB produz apenas 4 fatias por objeto (16 fatias no total), deixando 48 processos de worker inativos.

Isolamento de NIC

Em máquinas Linux com mais de 16 núcleos de CPU, é possível ativar o isolamento da placa de interface de rede (NIC) definindo a propriedade storage/use_nic_isolation como True:

gcloud config set storage/use_nic_isolation True

Quando você ativa essa propriedade, a CLI gcloud define a afinidade da CPU (os.sched_setaffinity()). Essa configuração isola 10% dos núcleos da CPU para solicitações de interrupção de hardware de rede (IRQs) e reserva os núcleos restantes para processamento de dados.

A seguir