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 as configurações padrão de simultaneidade e divisão com base nos recursos do sistema disponíveis.

Neste documento, descrevemos essas configurações padrão e explicamos como ajustar o desempenho da CLI gcloud para cargas de trabalho específicas configurando simultaneidade, escalonamento de processos e recursos de ativação, como isolamento de placa de rede (NIC).

Antes de ajustar as configurações de desempenho, crie um bucket zonal. Se você fizer o download de objetos para um volume de armazenamento anexado, como Hyperdisk ou SSD local, formate e monte o volume no seu ambiente. Se você planeja montar 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 fatiamento, consulte Downloads de objetos fatiados.

Configurações padrão de simultaneidade e fatiamento

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 fatiamento 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 definem 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

Quando você faz 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 fatiamento 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

Quando você faz 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 fatiamento 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 fatiamento

Para configurar e aplicar as configurações de ajuste personalizado, 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 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 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 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 Como ajustar as recomendações.

  4. Para fazer o download de objetos para o 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 fatiamento 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 no máximo 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 sua 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 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 contenção de linhas de execução do Global Interpreter Lock (GIL) do Python e do gRPC.

Limite de fatiamento

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

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 frações paralelas geradas por objeto. A CLI gcloud calcula as frações 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 de maneira uniforme 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 frações de 6,25 GiB cada.

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

Saturação de workers

Para manter uma alta utilização de workers durante uma transferência, ajuste a contagem de processos, a contagem de linhas de execução, o tamanho do componente e o máximo de componentes. 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), o que utiliza 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), o que utiliza totalmente todos os 64 processos de worker. Por outro lado, o uso de 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 ociosos.

Isolamento de NIC

Em máquinas Linux com mais de 16 núcleos de CPU, é possível ativar o isolamento da placa de rede (NIC, na sigla em inglês) 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