Otimizar o desempenho

Nesta página, descrevemos como otimizar a performance dos volumes do Google Cloud NetApp Volumes ajustando as configurações de volume e do lado do cliente. Esses ajustes melhoram a capacidade de processamento, reduzem a latência e melhoram a eficiência geral da transferência de dados para seus aplicativos.

Antes de começar

Antes de fazer mudanças nos volumes para otimizar a performance, revise as considerações de performance.

Ajustar as configurações de volume

É possível otimizar a performance ajustando as seguintes configurações de volume:

  • Aumentar a capacidade do volume: você pode aumentar a capacidade do volume do nível de serviço Premium, Extreme ou Standard para melhorar a capacidade máxima de processamento do volume Para volumes do nível de serviço Flex File, aumente a capacidade do pool de armazenamento. Para o desempenho personalizado do Flex Unified ou Flex File, aumente a capacidade de processamento e as IOPS do pool de armazenamento.

  • Fazer upgrade do nível de serviço: é possível mover um volume do nível de serviço Premium para um pool de armazenamento com um nível de serviço Extreme para melhorar a capacidade de processamento.

  • Usar pools de QoS manuais para atribuir maior capacidade de processamento: é possível diminuir a capacidade de processamento atribuída de volumes maiores com requisitos de capacidade de processamento baixos e aumentar a capacidade de processamento de volumes menores que precisam de maior performance até a capacidade de processamento do pool disponível.

O aumento da capacidade do volume e o upgrade dos níveis de serviço não são destrutivos para cargas de trabalho de E/S em processo no volume e não afetam o acesso ao volume de forma alguma.

Ajustar o cliente

É possível melhorar a performance ajustando as seguintes configurações no cliente:

  • Colocar clientes juntos: os resultados de latência são afetados diretamente pelas capacidades e localização do cliente. Para melhores resultados, coloque o cliente na mesma região do volume ou o mais próximo possível. Teste o impacto zonal testando a latência de um cliente em cada zona e use a zona com a menor latência.

  • Configurar a largura de banda da rede do Compute Engine: os recursos de rede das máquinas virtuais do Compute Engine dependem do tipo de instância usado. Normalmente, instâncias maiores podem gerar mais capacidade de processamento de rede. Recomendamos que você selecione uma máquina virtual do cliente com uma capacidade de largura de banda de rede adequada, selecione a interface de rede da NIC virtual do Google (gVNIC) e ative a performance Tier_1. Para mais informações, consulte a documentação do Compute Engine sobre largura de banda da rede.

  • Abrir várias sessões TCP: se o aplicativo exigir alta capacidade de processamento, você poderá saturar a sessão única do protocolo de controle de transmissão (TCP) que está na base de uma sessão normal de NFS e SMB. Nesses casos, aumente o número de sessões TCP usadas pela conexão NFS e SMB.

    Use uma das guias a seguir para ajustar o cliente com base no tipo de cliente:

    Linux

    Tradicionalmente, um cliente NFS usa uma única sessão TCP para todos os sistemas de arquivos montados em NFS que compartilham um endpoint de armazenamento. O uso da nconnect opção de montagem permite aumentar o número de sessões TCP compatíveis até um máximo de 16.

    Recomendamos as práticas recomendadas a seguir para ajustar o tipo de cliente Linux para aproveitar ao máximo o nconnect:

    • Aumentar o número de sessões TCP com nconnect: cada sessão TCP adicional adiciona uma fila para 128 solicitações pendentes, melhorando a simultaneidade potencial.

    • Definir o parâmetro sunrpc.max_tcp_slot_table_entries: sunrpc.max_tcp_slot_table_entries é um ajuste no nível da conexão parâmetro que pode ser modificado para controlar a performance. Recomendamos definir sunrpc.max_tpc_slot_table_enteries como 128 solicitações ou por conexão e não exceder 10.000 slots para todos os clientes NFS em um único projeto que se conecta aos NetApp Volumes. Para definir o parâmetro sunrpc.max_tcp_slot_table_entries, adicione o parâmetro ao arquivo /etc/sysctl.conf e recarregue o arquivo de parâmetros usando o comando sysctl -p.

    • Ajustar o valor máximo compatível por sessão para 180: ao contrário do NFSv3, os clientes NFSv4.1 definem a relação entre o cliente e o servidor em sessões. Embora o NetApp Volumes ofereça suporte a até 128 solicitações pendentes por conexão usando o NFSv3, o NFSv4.1 é limitado a 180 solicitações pendentes por sessão. Os clientes Linux NFSv4.1 são padrão para 64 max_session_slots por sessão, mas é possível ajustar esse valor conforme necessário. Recomendamos mudar o valor compatível máximo por sessão para 180.

      Para ajustar max_session_slots, crie um arquivo de configuração em /etc/modprobe.d. Verifique se não há aspas (" ") inline. Caso contrário, a opção não terá efeito.

      $ echo "options nfs max_session_slots=180" > /etc/modprobe/d/nfsclient/conf
      $ reboot
      
      Use the systool -v -m nfs command to see the current maximum in use
      by the client. For the command to work, at least one NFSv4.1 mount
      must be in place.
      
      $ systool -v -v nfs
      {
      Module = "nfs"
      
      Parameters:
      
      Max_session_slots = "63" <-
      
      }
      

    O gráfico de comparação do NFS nconnect a seguir demonstra o impacto que o uso da configuração do nconnect pode ter em uma carga de trabalho do NFS. Essas informações foram capturadas usando o Fio com as seguintes configurações:

    • Carga de trabalho de leitura de 100%

    • Tamanho do bloco de 8 KiB em um único volume

    • Máquina virtual n2-standard-32 usando o sistema operacional Red Hat 9

    • Conjunto de trabalho de 6 TiB

    O uso de um valor nconnect de 16 resultou em cinco vezes mais performance do que quando não estava ativado.

    Comparação de nconnect do NFS usando uma única máquina virtual Red Hat 9 com um tamanho de bloco de 8 KiB.

    Windows

    Para clientes baseados no Windows, o cliente pode usar o SMB Multichannel com o Receive Side Scaling (RSS) para abrir várias conexões TCP. Para alcançar essa configuração, a máquina virtual precisa ter um adaptador de rede alocado que ofereça suporte ao RSS. Recomendamos definir o RSS para quatro ou oito valores. No entanto, qualquer valor acima de um deve aumentar a capacidade de processamento.

    O gráfico a seguir mostra a diferença que o uso da configuração do RSS pode ter em uma carga de trabalho do SMB. Essas informações foram capturadas usando o Fio com as seguintes configurações:

    • Carga de trabalho de leitura de 100%

    • Tamanho do bloco de 8 KiB em um único volume

    • Máquina virtual n2-standard-32 única executando um sistema operacional Windows 2022

    • Conjunto de trabalho de 6 TiB

    Oito jobs foram executados com apenas a opção RSS do cliente SMB mudando entre as execuções de teste. O uso de valores de RSS de 4, 8 e 16 aumentou a performance em duas vezes em comparação com o uso de um valor de 1. Cada instância de RSS foi executada nove vezes com um parâmetro numjobs de 8. O parâmetro iodepth foi aumentado em cinco cada execução até que a capacidade de processamento máxima fosse atingida.

    Comparação de RSS do SMB de uma única VM do Windows 2022 com um tamanho de bloco de 8 KiB

Cargas de trabalho de computação de alto desempenho e alta simultaneidade

Para cargas de trabalho NFS de alta simultaneidade e grande escala, como as encontradas em ambientes de computação de alto desempenho (HPC) ou EDA, considere aplicar as seguintes otimizações do lado do cliente para melhorar o desempenho e a estabilidade e evitar problemas como tempestades de metadados ou travamentos de clientes:

  • Opções de montagem do NFS: ao montar o compartilhamento NFS do NetApp Volumes, inclua as seguintes opções no comando /etc/fstab ou de montagem:

    • actimeo=600: aumenta o tempo em que os atributos são armazenados em cache no cliente, reduzindo as chamadas GETATTR.
    • nconnect=8: usa várias conexões TCP por montagem, melhorando a largura de banda.

    Exemplo de comando de montagem:

    sudo mount -t nfs -o rw,hard,intr,rsize=1048576,wsize=1048576,vers=3,tcp,actimeo=600,nconnect=8 SERVER:/SHARE /mnt/netapp
    
  • Configurações keepaliveTCP: ajuste o keepalive tempo do TCP do sistema para detectar conexões sem resposta mais rapidamente. Isso pode ser definido usando sysctl:

    sudo sysctl -w net.ipv4.tcp_keepalive_time=60
    

    Para tornar essa mudança persistente nas reinicializações, adicione net.ipv4.tcp_keepalive_time = 60 a /etc/sysctl.conf e recarregue com sudo sysctl -p.

QoS manual

A qualidade de serviço (QoS) manual nos volumes do NetApp Volumes permite ajustar a performance do volume para atender aos requisitos da carga de trabalho e controlar os custos de armazenamento.

O QoS manual oferece os seguintes benefícios:

  • Otimização de custos: dimensione a performance do volume dentro da capacidade do pool de armazenamento para otimizar os custos da nuvem.

  • Ajuste instantâneo da capacidade de processamento: ajuste a capacidade de processamento do volume sem inatividade.

  • Redução de custos de recuperação de desastres: diminua o QoS para volumes replicados para reduzir os custos de recuperação de desastres para pools de destino.

  • Performance aprimorada para clones ou caches: aumente a performance de volumes de clone ou cache com tamanhos alocados pequenos.

  • Gerenciamento flexível de cargas de trabalho: use pools de armazenamento maiores como contêineres para várias cargas de trabalho, ajustando a capacidade de processamento de cada volume conforme necessário.

Considerações

  • É possível gerenciar o QoS manual usando a Google Cloud CLI, a API NetApp Volumes ou o Terraform. O Google Cloud console não é compatível.

  • O QoS manual é compatível com os níveis de serviço Flex Unified, Standard, Premium e Extreme e não está disponível para o nível de serviço Flex File.

Configurar limites de QoS manual

Para volumes em um pool de armazenamento de QoS manual, é possível definir a capacidade de processamento e a capacidade de forma independente. A capacidade de processamento geral de todos os volumes em um pool de QoS manual é limitada pela capacidade de processamento total do pool. A capacidade de processamento do pool é determinada pela capacidade alocada e pelo nível de serviço. Por exemplo, um pool Premium de 40 TiB pode atingir uma capacidade de processamento máxima de 2.560 MiBps a 64 MiBps por TiB, enquanto um pool Extreme de 200 TiB pode oferecer suporte a volumes com uma capacidade de processamento combinada de 25.600 MiBps.

Depois que o pool de QoS manual for configurado, será possível definir o limite de capacidade de processamento necessário para cada volume nele. O limite máximo de capacidade de processamento para um único volume é de 4, 5 GiBps ou 30 GiBps para volumes de grande capacidade.

Os comandos ou APIs de pool e volume mostram os valores de capacidade de processamento disponíveis e atribuídos para o pool, ajudando você a gerenciar a capacidade de processamento total. Para criar um pool de QoS manual e definir a capacidade de processamento do volume, consulte Criar um pool de armazenamento e Criar um volume.

Criar um pool de armazenamento

gcloud

Crie um pool de armazenamento usando o QoS manual:

    gcloud netapp storage-pools create POOL_NAME \
       --project=PROJECT_ID \
       --location=LOCATION \
       --capacity=CAPACITY \
       --service-level=SERVICE_LEVEL \
       --qos-type=QOS_TYPE \
       --network=name=NETWORK_NAME

Substitua as seguintes informações:

  • POOL_NAME: o nome do pool que você quer criar. O nome do pool precisa ser exclusivo por local.

  • PROJECT_ID: o nome do projeto em que você quer criar o pool de armazenamento.

  • LOCATION: o local do pool que você quer criar.

  • CAPACITY: a capacidade do pool em GiB.

  • SERVICE_LEVEL: o nível de serviço do pool de armazenamento: Standard, Premium ou Extreme.

  • QOS_TYPE: o tipo de QoS do pool de armazenamento: automático ou manual.

  • NETWORK_NAME: o nome da VPC.

Editar um pool de armazenamento

gcloud

Edite um pool de armazenamento de QoS automático atual para usar o QoS manual:

    gcloud netapp storage-pools update POOL_NAME \
       --project=PROJECT_ID \
       --location=LOCATION \
       --qos-type=QOS_TYPE

Substitua as seguintes informações:

  • POOL_NAME: o nome do pool que você quer atualizar.

  • PROJECT_ID: o nome do projeto.

  • LOCATION: o local do pool.

  • QOS_TYPE: o tipo de QoS atualizado para o pool de armazenamento. Somente a configuração manual é compatível.

Criar um volume

gcloud

Crie um volume com o limite de capacidade de processamento de QoS manual especificado usando o seguinte comando:

gcloud netapp volumes create VOLUME_NAME \
  --project=PROJECT_ID \
  --location=LOCATION \
  --storage-pool=STORAGE_POOL \
  --capacity=CAPACITY \
  --protocols=PROTOCOLS \
  --share-name=SHARE_NAME \
  --throughput-mibps=THROUGHPUT_MIBPS

Substitua as seguintes informações:

  • VOLUME_NAME: o nome do volume. Esse nome precisa ser exclusivo por local.

  • PROJECT_ID: o nome do projeto em que o volume será criado.

  • LOCATION: o local do volume.

  • STORAGE_POOL: o pool de armazenamento em que o volume será criado.

  • CAPACITY: a capacidade do volume. Ele define a capacidade que os clientes NAS veem.

  • PROTOCOLS: escolha os protocolos NAS com que o volume é exportado. As opções válidas são NFSv3, NFSv4, SMB e as seguintes combinações:

    • nfsv3,nfsv4
    • nfsv3,smb
    • nfsv4,smb

    Dependendo do tipo de protocolo escolhido, recomendamos que você adicione os parâmetros específicos do protocolo, como export-policy ou smb-settings.

  • SHARE_NAME: o caminho de exportação NFS ou o nome de compartilhamento SMB do volume.

  • THROUGHPUT_MIBPS: o limite de capacidade de processamento do volume em MiBps.

Para mais informações sobre outras flags opcionais, consulte a documentação do SDK Google Cloud sobre a criação de volumes.

A seguir

Leia sobre a migração de volume.