Como otimizar o desempenho do disco permanente


Os discos permanentes poderão proporcionar o desempenho descrito no gráfico do tipo de disco se a VM impulsionar um uso suficiente para atingir os limites de desempenho. Após o dimensionamento dos volumes de disco permanente para atender às necessidades de desempenho, o app e o sistema operacional poderão precisar de alguns ajustes.

Nas seções a seguir, descrevemos as características da VM e da carga de trabalho que afetam o desempenho do disco. e discutir alguns elementos-chave que podem ser ajustados para um melhor desempenho. Algumas sugestões e como aplicar algumas a tipos específicos de cargas de trabalho.

Fatores que afetam o desempenho do disco

Nas seções a seguir, descrevemos os fatores que afetam o desempenho do disco de uma VM.

Limite de saída de rede na capacidade de gravação

Sua VM tem um limite de saída de rede que depende do tipo de máquina da VM.

O Compute Engine armazena dados em discos permanentes com várias gravações paralelas para garantir a redundância integrada. Além disso, cada solicitação de gravação tem uma sobrecarga que usa largura de banda de gravação adicional.

O tráfego de gravação máximo que uma instância de VM pode emitir é o limite de saída da rede dividido por um multiplicador de largura de banda que considera a replicação e sobrecarga.

Os limites de saída de rede estão listados na coluna Largura de banda máxima de saída (Gbps) nas tabelas de tipos de máquina para as famílias de máquinas uso geral, compute-optimized, compute-optimized, memory-optimized, and accelerator-optimized.

O multiplicador de largura de banda é de aproximadamente 1,16x no uso total da rede, o que significa que 16% dos bytes gravados são sobrecargas. No Persistent Disk regional, o multiplicador de largura de banda é aproximadamente 2,32x para compensar a sobrecarga de replicação adicional.

Em uma situação em que as operações de leitura e gravação do Persistent Disk competem com a largura de banda de saída da rede, 60% da largura de banda máxima de saída da rede, definida pelo tipo de máquina, é alocado para as gravações do Persistent Disk. Os 40% restantes estão disponíveis para todos os outros tráfegos de saída de rede. Consulte a largura de banda de saída Para mais detalhes sobre outros tráfegos de saída da rede.

O exemplo a seguir mostra como calcular a largura de banda máxima de gravação de um disco permanente em uma instância de VM N1. A alocação de largura de banda é a parte da largura de banda de saída de rede alocada para o disco permanente. A largura de banda máxima de gravação é a largura de banda máxima de gravação do disco permanente ajustada para sobrecarga.

Contagem de vCPUs de VM Limite de saída de rede (MB/s) Alocação de largura de banda (MB/s) Largura de banda máxima de gravação (MB/s) Largura de banda máxima de gravação na utilização total da rede (MB/s)
1 250 150 216 129
2-7 1.250 750 1.078 647
8-15 2.000 1.200 1.724 1.034
16+ 4.000 2.400 3.448 2.069

Para calcular a largura de banda máxima do disco permanente, use as seguintes fórmulas:

VM N1 com 1 vCPU

O limite de saída da rede é:

2 Gbps / 8 bits = 0,25 GB por segundo = 250 MB por segundo

A alocação de largura de banda do disco permanente na utilização total da rede é:

250 MB por segundo * 0,6 = 150 MB por segundo.

A largura de banda máxima de gravação do disco permanente sem contenção de rede é:

  • Discos zonais: 250 MB por segundo / 1,16= 216 MB por segundo
  • Discos regionais: 250 MB por segundo / 2,32= 108 MB por segundo

A largura de banda máxima de gravação do disco permanente na utilização total da rede é:

  • Discos zonais: 150 MB por segundo / 1,16 ~= 129 MB por segundo
  • Discos regionais: 150 MB por segundo / 2,32= 65 MB por segundo

Os limites de saída de rede fornecem um limite superior para o desempenho. Outros fatores podem limitar o desempenho abaixo desse nível. Consulte as seções a seguir para informações sobre outras restrições.

Leituras e gravações simultâneas

Nos discos permanentes padrão, leituras e gravações simultâneas compartilham os mesmos limites de desempenho. Quando a VM está usando mais capacidade de leitura ou IOPS, ela consegue executar menos gravações. Por outro lado, instâncias que usam mais capacidade de gravação ou IOPS podem executar menos leituras.

Os volumes de discos permanentes não podem atingir simultaneamente a capacidade máxima e os limites de IOPS para leituras e gravações.

O cálculo da capacidade de processamento é IOPS * I/O size. Para aproveitar os limites máximos de capacidade para leituras e gravações simultâneas em discos permanentes SSD, use um tamanho de E/S suficiente para que as IOPS de leitura e gravação combinadas não excedam o limite de IOPS.

Na tabela a seguir, estão listados os limites de IOPS por VM para leituras e gravações simultâneas.

Disco permanente padrão Disco permanente SSD (8 vCPUs) Disco permanente SSD (mais de 32 vCPUs) Disco permanente SSD (mais de 64 vCPUs)
Leitura Gravação Leitura Gravação Leitura Gravação Leitura Gravação
7.500 0 15.000 0 60.000 0 100.000 0
5.625 3.750 11.250 3.750 45.000 15.000 75.000 25.000
3.750 7.500 7.500 7.500 30.000 30.000 50.000 50.000
1875 11.250 3.750 11.250 15.000 45.000 25.000 75.000
0 15.000 0 15.000 0 60.000 0 100.000

Os números de IOPS nesta tabela são baseados em uma E/S de 8 KB. Outros tamanhos de E/S, como 16 KB, podem ter números diferentes de IOPS, mas a mesma distribuição de leitura/gravação.

A tabela a seguir lista os limites de capacidade (MB por segundo) por VM para leituras e gravações simultâneas.

Disco permanente padrão Disco permanente SSD (6 a 14 vCPUs) Disco permanente SSD (mais de 16 vCPUs)
Leitura Gravação Leitura Gravação Leitura Gravação
1.200 0 800* 800* 1,200* 1,200*
900 100
600 200
300 300
0 400

* Nos discos permanentes SSD, as capacidades máximas de leitura e de gravação são independentes entre si. Portanto, esses limites são constantes.

Tamanho do volume lógico

O disco permanente pode ter até 64 TiB, e é possível criar volumes lógicos de até 257 TiB usando o gerenciamento de volumes lógicos na VM. Um tamanho de volume maior afeta o desempenho destas maneiras:

  • Nem todos os sistemas de arquivos locais têm bom funcionamento nessa escala. Operações comuns, como a ativação e a verificação do sistema de arquivos, podem demorar mais do que o esperado.
  • O disco permanente atinge desempenho máximo quando tem tamanhos menores. Quando há muito armazenamento em uma VM, os discos levam mais tempo para fazer leituras e gravações completas. Se seu aplicativo for compatível, use várias VMs para aumentar a capacidade total do sistema.
  • Criar snapshots de grandes quantidades de discos permanentes pode demorar mais do que o esperado e fornecer uma visualização inconsistente do volume lógico, sem uma coordenação cuidadosa com o app.

Vários discos anexados a uma única instância de VM

Os limites de desempenho dos discos quando há vários discos anexados a uma VM dependem se os discos são do mesmo tipo ou de tipos diferentes.

Vários discos do mesmo tipo

Se você tiver vários discos do mesmo tipo anexados a uma instância de VM no mesmo modo (por exemplo, leitura/gravação), os limites de desempenho serão os mesmos de um único disco que tem o tamanho desses discos. Se você usar todos os discos a 100%, o limite de desempenho agregado será dividido igualmente entre os discos, seja qual for o tamanho relativo deles.

Por exemplo, suponha que você tenha um espaço de 200 GBpd-standard e um espaço de 1.000 GB pd-standard disco. Se você não usar o disco de 1.000 GB, o de 200 GB poderá atingir o limite de desempenho de um disco padrão de 1.200 GB. Se você usar 100% dos dois discos, cada um terá o limite de desempenho de um disco permanente padrão de 600 GB pd-standard (1.200 GB / 2 discos = disco de 600 GB).

Vários discos de diferentes tipos

Se você anexar diferentes tipos de discos a uma VM, o desempenho máximo possível será o limite de desempenho do disco mais rápido compatível com a VM. O desempenho cumulativo dos discos anexados não excederá os limites de desempenho do disco mais rápido compatível com a VM.

Otimize seus discos para IOPS ou cargas de trabalho orientadas à capacidade

As recomendações de desempenho dependem de você quer maximizar IOPS ou capacidade de processamento.

Cargas de trabalho orientadas a IOPS

Bancos de dados SQL ou NoSQL têm padrões de uso de acesso aleatório aos dados. O Google recomenda os seguintes valores para cargas de trabalho orientadas a IOPS:

  • Valores de profundidade da fila de E/S de 1 para cada 400 a 800 de IOPS, até o limite de 64 em grandes volumes

  • uma CPU livre para cada 2.000 IOPS de leitura aleatória e para cada 2.500 IOPS de gravação aleatória.

  • Se estiver disponível para o tipo de máquina de VM, use os discos extremos de hiperdisco do Google Cloud, que permitem alterar as IOPS provisionadas.

Os valores mais baixos de readahead geralmente são sugeridos em documentos de práticas recomendadas do MongoDB, do Apache Cassandra (ambos em inglês) e de outros aplicativos de banco de dados.

Cargas de trabalho orientadas à capacidade

Leituras sequenciais rápidas são excelentes para operações de streaming, como um job do Hadoop, e tamanhos de E/S maiores podem aumentar o desempenho do streaming.

  • Use um tamanho de E/S de 256 KB ou mais.

  • Se estiverem disponíveis para o tipo de máquina de VM, use os discos de capacidade de processamento do Hyperdisk, que permitem alterar a capacidade provisionada.

  • Para o disco permanente padrão, use oito ou mais streams de E/S sequenciais paralelos, quando possível. Os discos permanentes padrão são projetados para otimizar o desempenho de E/S para acesso sequencial ao disco, semelhante a um disco rígido do HDD físico.

  • Verifique se o aplicativo está otimizado para uma localidade razoável de dados temporais em discos grandes

    Se o aplicativo acessar dados distribuídos em partes diferentes de um disco em um período curto (centenas de GB por vCPU), você não atingirá o número ideal de IOPS. Para conseguir um melhor desempenho, otimize para a localidade de dados temporais, ponderando fatores como fragmentação do disco e aleatoriedade das partes acessadas do disco.

  • Para um disco permanente SSD, verifique se o programador de E/S no sistema operacional está configurado para atender às suas necessidades específicas.

    Em sistemas baseados em Linux, verifique se o programador de E/S está definido como none. Esse programador de E/S não reorganiza as solicitações e é ideal para dispositivos de E/S rápidos e aleatórios.

    1. Na linha de comando, verifique a programação de E/S usada pela máquina Linux:

      cat /sys/block/sda/queue/scheduler
      

      O resultado será assim:

      [mq-deadline] none
      

      O programador de E/S ativo no momento é exibido entre colchetes ([]).

    2. Se o programador de E/S não estiver definido como none, execute uma das seguintes etapas:

      • Para alterar o programador de E/S padrão para none, defina elevator=none na entrada GRUB_CMDLINE_LINUX do arquivo de configuração do GRUB. Normalmente, esse arquivo está localizado em /etc/default/grub, mas em algumas distribuições anteriores, ele pode estar em um diretório diferente.
      GRUB_CMDLINE_LINUX="elevator=none vconsole.keymap=us console=ttyS0,38400n8 vconsole.font=latarcyrheb-sun16
      

      Depois de atualizar o arquivo de configuração do GRUB, configure o carregador de inicialização no sistema para que ele seja inicializado no Compute Engine.

      • Como alternativa, é possível alterar o programador de E/S no ambiente de execução:
      echo 'none' > sudo /sys/block/sda/queue/scheduler
      

      Se você usar esse método, o sistema alternará de volta para o programador padrão de E/S na reinicialização. Execute o comando cat novamente para verificar o programador de E/S.

Mudanças na carga de trabalho que podem melhorar o desempenho do disco

Certos comportamentos de carga de trabalho podem melhorar o desempenho das operações de E/S nos discos anexados.

Use uma profundidade de fila de E/S alta

Discos permanentes têm uma latência maior do que os discos conectados localmente, como SSDs locais, porque eles são dispositivos conectados à rede. Eles podem oferecer IOPS e capacidade de processamento muito altas, mas é preciso garantir que solicitações de E/S suficientes sejam feitas em paralelo. O número de solicitações de E/S feitas em paralelo é chamado de profundidade da fila de E/S.

As tabelas abaixo mostram a profundidade da fila de E/S recomendada para garantir que você alcance um determinado nível de desempenho. A tabela abaixo usa uma ligeira superestimativa de latência típica para mostrar recomendações conservadoras. O exemplo pressupõe que você esteja usando um tamanho de E/S de 16 KB.

Gere E/S suficiente usando um tamanho grande de E/S

  • Use o tamanho grande de E/S

    Para garantir que os limites de IOPS e a latência não afetem o desempenho do aplicativo, use um tamanho mínimo de E/S de 256 KB ou um valor maior.

    Use tamanhos de faixa grandes para aplicativos distribuídos do sistema de arquivos. Uma carga de trabalho de E/S aleatória que usa tamanhos de listras grandes (4 MB ou mais) atinge um ótimo desempenho em discos permanentes padrão porque a carga de trabalho imita o acesso a vários discos sequenciais de stream com eficiência.

  • Verifique se o aplicativo está gerando E/S suficiente

    Verifique se o aplicativo está gerando E/S suficiente para utilizar totalmente os limites de IOPS e a capacidade do disco. Para entender melhor o padrão de E/S de carga de trabalho, analise o uso de disco permanente e as métricas de desempenho no Cloud Monitoring.

  • Verifique se há processamento disponível suficiente na instância que está gerando a E/S

    Se a instância de VM tiver pouca CPU, o app não conseguirá gerenciar as IOPS descritas acima. Recomendamos que você tenha uma CPU disponível para cada 2.000–2.500 IOPS de tráfego esperado.

Limitar cargas pesadas de E/S a um período máximo

Um período refere-se a um intervalo contíguo de endereços de blocos lógicos em um único disco. As cargas pesadas de E/S atingem o desempenho máximo quando limitadas a um determinado período máximo, o que depende do tipo de máquina da VM à qual o disco está anexado, conforme listado na tabela a seguir.

Tipo de máquina Período máximo recomendado
  • m2-megamem-416
  • VMs C2D
25 TB
Todos os outros tipos de máquinas 50 TB

Os períodos em discos permanentes separados que somam até 50 TB podem ser considerados iguais a um período de 50 TB para fins de desempenho.

Mudanças no sistema operacional para melhorar o desempenho do disco

Em alguns casos, é possível ativar ou desativar recursos no nível do sistema operacional ou configurar os discos anexados de maneiras específicas para melhorar o desempenho do disco.

Evitar o uso de sistemas de arquivos ext3 no Linux

O uso do sistema de arquivos ext3 em uma VM Linux pode resultar em um desempenho muito insatisfatório sob cargas pesadas de gravação. Use ext4 quando possível. O driver do sistema de arquivos ext4 é compatível com versões anteriores de ext3/ext2 e é compatível com a montagem de sistemas de arquivos ext3. O sistema de arquivos ext4 é o padrão na maioria dos sistemas operacionais Linux.

Se não for possível migrar para ext4, como alternativa, monte sistemas de arquivos ext3 com a opção de montagem data=journal. Isso melhora as IOPS de gravação ao custo da capacidade de processamento de gravação. A migração para ext4 pode resultar em uma melhoria de até sete vezes em alguns comparativos de mercado.

Desativar a inicialização lenta e ativar comandos DISCARD

Os discos permanentes aceitam operações de descarte ou comandos TRIM, que permitem aos sistemas operacionais informar os discos quando os blocos deixam de ser usados. O suporte a DISCARD permite ao sistema operacional marcar blocos do disco como não sendo mais necessários sem incorrer no custo de zerar os blocos.

Na maioria dos sistemas operacionais Linux, você ativa operações de descarte quando monta um disco permanente na VM. As VMs do Windows Server 2012 R2 permitem operações de descarte por padrão quando você monta um disco permanente.

Ativar descartar pode melhorar o desempenho geral do ambiente de execução, além de acelerar o desempenho do disco quando ele é montado pela primeira vez. A formatação de um volume de disco inteiro pode ser demorada, portanto, a formatação lenta é uma prática comum. A desvantagem da formatação lenta é que o custo é frequentemente pago na primeira vez em que o volume é ativado. Ao desativar a inicialização lenta e permitir operações de descarte, é possível conseguir formatação rápida e montar operações.

  • Desative a inicialização lenta e ative as operações de descarte ao formatar um disco passando os seguintes parâmetros para mkfs.ext4:

    -E lazy_itable_init=0,lazy_journal_init=0,discard
    

    O parâmetro lazy_journal_init=0 não funciona em instâncias com imagens do CentOS 6 ou do RHEL 6. Para VMs que usam esses sistemas operacionais, formate o disco permanente sem esse parâmetro.

    -E lazy_itable_init=0,discard
    
  • Para permitir operações de descarte ao ativar um disco, transmita a seguinte sinalização para o comando mount:

    -o discard
    

O Persistent Disk funciona bem com operações de descarte ativadas. No entanto, também é possível executar fstrim periodicamente além de ou em vez de usar as operações de descarte. Se você não usa operações de descarte, execute fstrim antes de criar um snapshot do disco de inicialização. O corte do sistema de arquivos permite criar imagens de snapshot menores, o que reduz o custo do armazenamento delas.

Ajuste o valor de readahead

Para melhorar o desempenho de E/S, os sistemas operacionais usam técnicas como readahead (em inglês), também chamada de "leitura à frente", em que é lido mais do que o solicitado de um arquivo nessa memória, supondo que leituras posteriores provavelmente precisarão desses dados. Um readahead maior aumenta a capacidade às custas da memória e IOPS. Já o readahead menor aumenta as IOPS às custas da capacidade.

Em sistemas Linux, é possível receber e definir o valor de readahead com o comando blockdev:

$ sudo blockdev --getra /dev/DEVICE_ID
$ sudo blockdev --setra VALUE /dev/DEVICE_ID

O valor de readahead é <desired_readahead_bytes> / 512 bytes.

Por exemplo, no caso de um readahead de 8 MB, esse valor equivale a 8.388.608 bytes (8 * 1024 * 1024).

8388608 bytes / 512 bytes = 16384

Defina blockdev como 16384:

$ sudo blockdev --setra 16384 /dev/DEVICE_ID

Modificar sua VM ou criar uma nova

Há limites associados a cada tipo de máquina de VM que podem afetar o desempenho dos discos anexados. Os limites incluem:

  • O desempenho do disco permanente aumenta à medida que aumenta o número de vCPUs disponíveis.
  • Todos os tipos de máquina não oferecem suporte a hiperdisco.
  • As taxas de saída de rede aumentam à medida que o número de vCPUs disponíveis aumenta.

Verifique se você tem CPUs gratuitas

No disco permanente, a leitura e a gravação requerem ciclos de CPU da VM. Para atingir níveis de IOPS mais altos e consistentes, as CPUs precisam estar livres para processar E/S.

Para aumentar o número de vCPUs disponíveis com sua VM, crie uma nova VM ou edite o tipo de máquina de uma instância de VM.

Crie uma nova VM para receber novas funcionalidades

Os tipos de disco mais recentes não são compatíveis com todas as séries ou tipos de máquina. O hiperdisco oferece taxas de capacidade ou IOPS mais altas para suas cargas de trabalho, mas atualmente está disponível com apenas algumas séries de máquinas e requer pelo menos 64 vCPUs.

Novas séries de máquinas de VM normalmente são executadas em CPUs mais recentes, o que pode oferecer um melhor desempenho que as anteriores. Além disso, as CPUs mais recentes podem oferecer suporte a outras funcionalidades para melhorar o desempenho das cargas de trabalho, como Advanced Matrix Extensions (AMX) ou Intel Advanced Vector Extensions (AVX-512) de dois minutos.

A seguir