Ajustar a performance da CLI gcloud para buckets zonais

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

Esta página descreve essas configurações padrão e explica como usar a CLI gcloud para ajustar ainda mais a simultaneidade, o escalonamento de processos e os recursos de ativação (como o isolamento de NIC) para ajudar a melhorar a performance de cargas de trabalho específicas. Para ajustar a performance ao ativar buckets zonais como um sistema de arquivos, consulte Performance do Cloud Storage FUSE para o Rapid Bucket.

Antes de configurar as definições de performance, certifique-se de que cria um bucket zonal. Se você planeja fazer o download de objetos para um volume de armazenamento anexado (como o Hyperdisk ou o SSD local), certifique-se de formatar e ativar o volume no seu ambiente. 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 nesta seção se aplicam especificamente ao ler 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 padrão de simultaneidade.

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ê está fazendo o download de um ou vários objetos. As tabelas a seguir mapeiam os valores padrão dessas propriedades:

Downloads de objeto único

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

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 padrões:

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

Ajustar configurações de simultaneidade e divisão

Esta seção descreve como configurar as definições de simultaneidade e divisão usando a CLI gcloud e fornece valores recomendados para ambientes de hardware comuns.

Como aplicar uma configuração

Para configurar e aplicar definiçõ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 os marcadores de posição por valores adequados à sua carga de trabalho:

    • 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. Faça o download de objetos para o caminho de armazenamento local executando o gcloud storage cp comando:

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

    Substitua:

    • BUCKET_NAME: o nome do bucket zonal.
    • SOURCE_PATH: o diretório de origem ou o caminho do objeto no bucket.
    • 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

Para escolher valores adequados para os marcadores de posição nas etapas anteriores, revise as diretrizes a seguir:

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, as máquinas com 80 ou mais vCPUs poderão definir storage/process_count como 64. Para máquinas com menos de 80 vCPUs, defina storage/process_count como 80% dos núcleos 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 de alta capacidade ajuda a reduzir 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.

Cada fatia é baixada de forma independente e paralela com base na capacidade total do worker (storage/process_count × storage/thread_count).

Saturação do worker

Para ajudar a 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 para 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), utilizando 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). 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