Otimizar o desempenho

Nesta página, descrevemos como otimizar a performance do Google Cloud NetApp Volumes ajustando as configurações de volume e do lado do cliente. Esses ajustes aumentam 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 seus volumes para otimizar a performance, confira as considerações sobre performance.

Ajustar as configurações de volume

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

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

  • Faça upgrade do nível de serviço: é possível mover um volume de nível de serviço Premium para um pool de armazenamento com nível de serviço Extreme e melhorar a capacidade de transferência.

  • Use 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 baixa capacidade de processamento e aumentar a capacidade de processamento de volumes menores que precisam de maior desempenho até a capacidade de processamento disponível do pool.

Aumentar a capacidade do volume e fazer upgrade dos níveis de serviço não interrompe as cargas de trabalho de E/S em processo no volume e não afeta o acesso a ele de forma alguma.

Ajustar o cliente

Para melhorar a performance, ajuste as seguintes configurações no cliente:

  • Coloque os clientes no mesmo local: os resultados de latência são diretamente afetados pelas capacidades e pela localização do cliente. Para ter os melhores resultados, coloque o cliente na mesma região do volume ou o mais perto 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 rede. Recomendamos que você selecione uma máquina virtual cliente com uma capacidade de largura de banda de rede adequada, selecione a interface de rede NIC virtual do Google (gVNIC) e ative o desempenho Tier_1. Para mais informações, consulte a documentação do Compute Engine sobre largura de banda de rede.

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

    Use uma das seguintes guias para ajustar seu cliente com base no tipo dele:

    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. Usar a opção de montagem nconnect permite aumentar o número de sessões TCP compatíveis até um máximo de 16.

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

    • Aumente 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 parâmetro de ajuste no nível da conexão que pode ser modificado para controlar o desempenho. Recomendamos definir sunrpc.max_tpc_slot_table_enteries como 128 solicitações ou por conexão e não ultrapassar 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 ao arquivo /etc/sysctl.conf e recarregue o arquivo de parâmetros usando o comando sysctl -p.

    • Ajuste 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 usam 64 max_session_slots por sessão como padrã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 (" ") em linha. Caso contrário, a opção não vai entrar em vigor.

      $ 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 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 100%

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

    • n2-standard-32 máquina virtual usando o SO Red Hat 9

    • Conjunto de trabalho de 6 TiB

    Usar um valor nconnect de 16 resultou em uma performance cinco vezes maior 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 conseguir essa configuração, a máquina virtual precisa ter um adaptador de rede alocado que seja compatível com RSS. Recomendamos definir o RSS como quatro ou oito valores. No entanto, qualquer valor acima de um deve aumentar a capacidade de transmissão.

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

    • Carga de trabalho de leitura 100%

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

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

    • Conjunto de trabalho de 6 TiB

    Oito jobs foram executados com apenas a opção de RSS do cliente SMB mudando entre as execuções de teste. Usar valores de RSS de 4, 8 e 16 aumentou o desempenho 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 a cada execução até atingir a taxa de transferência máxima.

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

Computação de alto desempenho e cargas de trabalho de alta simultaneidade

Para cargas de trabalho NFS de grande escala e alta simultaneidade, 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 do cliente:

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

    • 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 de TCP keepalive: ajuste o tempo de TCP keepalive 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 manter essa mudança nas reinicializações, adicione net.ipv4.tcp_keepalive_time = 60 a /etc/sysctl.conf e recarregue com sudo sysctl -p.

QoS manual

Com a qualidade de serviço (QoS) manual no NetApp Volumes, é possível ajustar o desempenho 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 de volume na capacidade do pool de armazenamento para otimizar os custos da nuvem.

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

  • Redução de custos de recuperação de desastres: diminua a qualidade de serviço para volumes replicados e reduza os custos de recuperação de desastres para pools de destino.

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

  • Gerenciamento flexível de carga 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 a qualidade de serviço manual usando a Google Cloud CLI, a API NetApp Volumes ou o Terraform. O console do Google Cloud não é compatível.

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

Configurar limites manuais de QoS

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 é configurado, é possível definir o limite de capacidade de processamento necessário para cada volume dentro dele. 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 total. Para criar um pool de QoS manual e definir a capacidade de processamento de volume, consulte Criar um pool de armazenamento e Criar um volume.

Criar um pool de armazenamento

gcloud

Crie um pool de armazenamento usando a 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 seu pool de armazenamento: Standard, Premium ou Extreme.

  • QOS_TYPE: o tipo de QoS do seu 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 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 seu 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. O 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 do 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 do 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.