Ajustar a performance da CLI gcloud para buckets zonais

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

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 isolamento de NIC.

Antes de ajustar as configurações de performance, crie um bucket zonal. Se você baixar 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 Performance do Cloud Storage FUSE para Rapid Bucket. Para conceitos gerais de segmentação, consulte Downloads de objetos segmentados.

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

As configurações padrão descritas nesta seção se aplicam especificamente quando você lê objetos de buckets zonais no 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 segmentação com base no número de núcleos de CPU virtual (vCPU) disponíveis e se você baixa 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 um único objeto e de vários objetos.

Downloads de um único objeto

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 segmentação Máximo de componentes 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 segmentação Máximo de componentes 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 segmentaçã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 comando gcloud config configurations create 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 a simultaneidade e as propriedades de segmentaçã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 linhas de execução 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 o fatiamento, 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 no caminho de armazenamento local, execute o comando gcloud storage cp:

    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, o particionamento 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 sua transferência (como 64).
  • available_cores: o número total de CPUs virtuais (vCPUs) disponíveis na sua máquina. Por exemplo, execute nproc no Linux.

Por exemplo, se a meta 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 linhas de execução 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 linha de execução em máquinas com 48 ou mais vCPUs reduz a disputa de linha de execução do bloqueio global do interpretador (GIL, na sigla em inglês) do Python e do gRPC.

Limite de segmentação

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

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

Setores por objeto

Defina as propriedades storage/sliced_object_download_component_size e storage/sliced_object_download_max_components para controlar o número de intervalos paralelos gerados 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 max_components partes. Por exemplo, o download de um objeto de 100 GiB com component_size=128 MiB e max_components=16 produz 16 partes de 6,25 GiB cada.

A CLI gcloud faz o download de cada fração de forma independente e paralela com base na capacidade total de trabalhadores (storage/process_count × storage/thread_count).

Saturação de worker

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

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

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

  • Quatro objetos de 2 GiB: a definição de component_size=128 MiB gera 16 segmentos por objeto (4 × 16 = 64 segmentos), o que utiliza totalmente todos os 64 processos de trabalho.
  • Quatro objetos de 512 MiB: a configuração component_size=32 MiB gera 16 divisões por objeto (4 × 16 = 64 divisões), o que utiliza totalmente todos os 64 processos de trabalho. Por outro lado, usar component_size=128 MiB em objetos de 512 MiB produz apenas quatro frações por objeto (16 frações no total), deixando 48 processos de worker inativos.

Isolamento da placa de rede

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 de CPU (os.sched_setaffinity()). Essa configuração isola 10% dos núcleos de CPU para solicitações de interrupção de hardware de rede (IRQs) e reserva os núcleos restantes para processamento de dados.

A seguir