Otimize o desempenho do disco permanente


Os discos permanentes oferecem o desempenho descrito no gráfico de tipos de disco se a VM gerar um uso suficiente para atingir os limites de desempenho. Depois de dimensionar os volumes do disco permanente para atender às suas necessidades de desempenho, a carga de trabalho e o sistema operacional poderão precisar de alguns ajustes.

As seções a seguir descrevem as características da VM e da carga de trabalho que afetam o desempenho do disco e discutem alguns elementos-chave que podem ser ajustados para melhorar o desempenho. Algumas das sugestões e como aplicar algumas delas a tipos específicos de cargas de trabalho.

Fatores que afetam o desempenho do disco

As seções a seguir descrevem os fatores que afetam o desempenho do disco para uma VM.

Limites de saída de rede na taxa de transferência 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 diversas gravações paralelas para garantir redundância integrada. Além disso, cada solicitação de gravação possui alguma sobrecarga que utiliza largura de banda de gravação adicional.

O tráfego máximo de gravação que uma instância de VM pode emitir é o limite de saída da rede dividido por um multiplicador de largura de banda que leva em conta a replicação e a 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 tipo de máquina para famílias de máquinas de uso geral , otimizadas para computação , otimizadas para armazenamento , otimizadas para memória e otimizadas para acelerador .

O multiplicador de largura de banda é de aproximadamente 1,16x com utilização total da rede, o que significa que 16% dos bytes gravados são sobrecarga. Para discos permanentes regionais, o multiplicador de largura de banda é de aproximadamente 2,32x para compensar a sobrecarga adicional de replicação.

Em uma situação em que as operações de leitura e gravação do disco permanente 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, é alocada para gravações do disco permanente. Os 40% restantes estão disponíveis para todos os outros tráfegos de saída da rede. Consulte a largura de banda de saída para obter detalhes sobre outro tráfego de saída da rede.

O exemplo a seguir mostra como calcular a largura de banda máxima de gravação para 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 da 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 com 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

Você pode calcular a largura de banda máxima do disco permanente usando 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 com 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 com 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 da rede fornecem um limite superior de desempenho. Outros fatores podem limitar o desempenho abaixo deste nível. Consulte as seções a seguir para obter informações sobre outras restrições de desempenho.

Leituras e gravações simultâneas

Para discos permanentes padrão, leituras e gravações simultâneas compartilham os mesmos recursos. Quando sua VM usa mais taxa de transferência de leitura ou IOPS, ela consegue realizar menos gravações. Por outro lado, as instâncias que usam mais taxa de transferência de gravação ou IOPS conseguem realizar menos leituras.

Os volumes de disco permanente não podem atingir simultaneamente a taxa de transferência máxima e os limites de IOPS para leituras e gravações.

O cálculo da taxa de transferência é IOPS * I/O size . Para aproveitar os limites máximos de taxa de transferência para leituras e gravações simultâneas no disco permanente SSD, use um tamanho de E/S tal que as IOPS de leitura e gravação combinadas não excedam o limite de IOPS.

A tabela a seguir lista 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)
Ler Escrever Ler Escrever Ler Escrever Ler Escrever
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 um tamanho de E/S de 8 KB. Outros tamanhos de E/S, como 16 KB, podem ter números de IOPS diferentes, mas mantêm a mesma distribuição de leitura/gravação.

A tabela a seguir lista os limites de produção (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)
Ler Escrever Ler Escrever Ler Escrever
1200 0 800 * 800 * 1.200 * 1.200 *
900 100
600 200
300 300
0 400

* Para discos permanentes SSD, a capacidade máxima de leitura e a capacidade máxima de gravação são independentes uma da outra, portanto, esses limites são constantes.

Tamanho do volume lógico

O disco permanente pode ter até 64 TiB de tamanho e você pode criar volumes lógicos únicos de até 257 TiB usando o gerenciamento de volumes lógicos dentro de sua VM. Um tamanho de volume maior afeta o desempenho das seguintes maneiras:

  • Nem todos os sistemas de arquivos locais funcionam bem nesta escala. Operações comuns, como montagem e verificação do sistema de arquivos, podem demorar mais que o esperado.
  • O desempenho máximo do disco permanente é alcançado em tamanhos menores. Os discos demoram mais para ler ou gravar completamente com tanto armazenamento em uma VM. Se o seu aplicativo for compatível, considere usar várias VMs para obter maior rendimento total do sistema.
  • A captura instantânea de um grande número de discos permanentes pode levar mais tempo do que o esperado para ser concluída e pode fornecer uma visão inconsistente do seu volume lógico sem uma coordenação cuidadosa com o seu aplicativo.

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

Os limites de desempenho dos discos quando você tem vários discos conectados a uma VM dependem de os discos serem 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 iguais aos limites de um único disco que tenha o tamanho combinado desses discos. Se você usar todos os discos em 100%, o limite de desempenho agregado será dividido igualmente entre os discos, independentemente do tamanho relativo do disco.

Por exemplo, suponha que você tenha um disco pd-standard 200 GB e um disco pd-standard 1.000 GB. Se você não usar o disco de 1.000 GB, o disco de 200 GB poderá atingir o limite de desempenho de um disco padrão de 1.200 GB. Se você usar ambos os discos a 100%, cada um terá o limite de desempenho de um disco pd-standard 600 GB (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 à taxa de transferência

As recomendações de desempenho dependem se você deseja maximizar o IOPS ou o rendimento.

Cargas de trabalho orientadas para IOPS

Bancos de dados, sejam SQL ou NoSQL, possuem 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 IOPS, até um limite de 64 em grandes volumes

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

  • Se disponível para o seu tipo de máquina VM, use os discos Google Cloud Hyperdisk Extreme, que permitem alterar as IOPS provisionadas.

Valores de leitura antecipada mais baixos são normalmente sugeridos em documentos de práticas recomendadas para MongoDB , Apache Cassandra e outros aplicativos de banco de dados.

Cargas de trabalho orientadas para throughput

As operações de streaming, como um trabalho do Hadoop, se beneficiam de leituras sequenciais rápidas, e tamanhos maiores de E/S podem aumentar o desempenho do streaming.

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

  • Se disponível para o seu tipo de máquina VM, use discos de rendimento de hiperdisco, que permitem alterar o rendimento provisionado.

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

  • Certifique-se de que seu aplicativo esteja otimizado para uma localidade de dados razoável em discos grandes.

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

  • Para discos permanentes SSD, certifique-se de que o agendador de E/S no sistema operacional esteja configurado para atender às suas necessidades específicas.

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

    1. Na linha de comando, verifique o agendamento de E/S usado pela sua máquina Linux:

      cat /sys/block/sda/queue/scheduler
      

      A saída é semelhante à seguinte:

      [mq-deadline] none
      

      O agendador de E/S atualmente ativo é exibido entre colchetes ( [] ).

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

      • Para alterar seu agendador de E/S padrão para none , defina elevator=none na entrada GRUB_CMDLINE_LINUX do arquivo de configuração GRUB. Normalmente, esse arquivo está localizado em /etc/default/grub , mas em algumas distribuições anteriores, ele pode estar localizado 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 possa inicializar no Compute Engine.

      • Alternativamente, você pode alterar o agendador de E/S em tempo de execução:
      echo 'none' > sudo /sys/block/sda/queue/scheduler
      

      Se você usar esse método, o sistema retornará ao agendador de E/S padrão na reinicialização. Execute o comando cat novamente para verificar seu agendador 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

Os discos permanentes têm latência mais alta do que os discos conectados localmente, como os discos SSD locais, porque são dispositivos conectados à rede. Eles podem fornecer IOPS e rendimento muito altos, mas você deve garantir que solicitações de E/S suficientes sejam feitas em paralelo. O número de solicitações de E/S feitas em paralelo é conhecido como profundidade da fila de E/S .

As tabelas abaixo mostram a profundidade da fila de E/S recomendada para garantir que você possa atingir um determinado nível de desempenho. Observe que a tabela abaixo usa uma ligeira superestimação da 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 suficientes usando tamanho de E/S grande

  • Use tamanho grande de E/S

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

    Use tamanhos de faixas grandes para aplicativos de sistema de arquivos distribuídos. Uma carga de trabalho de E/S aleatória usando faixas grandes (4 MB ou maiores) obtém ótimo desempenho no disco permanente padrão devido à proximidade com que a carga de trabalho imita o acesso sequencial ao disco de vários fluxos.

  • Certifique-se de que seu aplicativo esteja gerando E/S suficiente

    Certifique-se de que seu aplicativo esteja gerando E/S suficientes para utilizar totalmente o IOPS e os limites de taxa de transferência do disco. Para entender melhor o padrão de E/S da carga de trabalho, revise o uso do disco permanente e as métricas de desempenho no Cloud Monitoring .

  • Certifique-se de que haja CPU disponível suficiente na instância que está gerando a E/S

    Se sua instância de VM estiver sem CPU, seu aplicativo não conseguirá gerenciar as IOPS descritas anteriormente. Recomendamos que você tenha uma CPU disponível para cada 2.000 a 2.500 IOPS de tráfego esperado.

Limite cargas pesadas de E/S a um intervalo máximo

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

Tipo de máquina Extensão máxima recomendada
  • 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 50 TB ou menos podem ser considerados iguais a um único intervalo de 50 TB para fins de desempenho.

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

Em alguns casos, você pode 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.

Evite usar sistemas de arquivos ext3 no Linux

Usar o sistema de arquivos ext3 em uma VM Linux pode resultar em desempenho muito ruim 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 suporta 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 o ext4, como solução alternativa, você poderá montar sistemas de arquivos ext3 com a opção de montagem data=journal . Isso melhora o IOPS de gravação em detrimento da taxa de transferência de gravação. A migração para o ext4 pode resultar em uma melhoria de até 7x em alguns benchmarks.

Desative a inicialização lenta e ative os comandos DISCARD

Os discos permanentes suportam operações de descarte ou comandos TRIM , que permitem que os sistemas operacionais informem os discos quando os blocos não estiverem mais em uso. O suporte para descarte permite que o sistema operacional marque blocos de disco como não mais necessários, sem incorrer no custo de zerar os blocos.

Na maioria dos sistemas operacionais Linux, você habilita operações de descarte ao montar 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.

Habilitar operações de descarte pode aumentar o desempenho geral do tempo de execução e também pode acelerar o desempenho do seu disco quando ele é montado pela primeira vez. A formatação de um volume de disco inteiro pode ser demorada, portanto a formatação preguiçosa é uma prática comum. A desvantagem da formatação lenta é que o custo geralmente é pago na primeira vez que o volume é montado. Ao desabilitar a inicialização lenta e habilitar operações de descarte, você pode obter operações rápidas de formatação e montagem.

  • 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 CentOS 6 ou RHEL 6 . Para VMs que usam esses sistemas operacionais, formate o disco permanente sem esse parâmetro.

    -E lazy_itable_init=0,discard
    
  • Habilite operações de descarte ao montar um disco, passando o seguinte sinalizador para o comando mount :

    -o discard
    

O disco permanente funciona bem com as operações de descarte habilitadas. No entanto, você pode opcionalmente executar fstrim periodicamente além ou em vez de usar operações de descarte. Se você não usar operações de descarte, execute fstrim antes de criar um instantâneo do seu disco de inicialização. Cortar o sistema de arquivos permite criar imagens de snapshot menores, o que reduz o custo de armazenamento de snapshots.

Ajuste o valor de leitura antecipada

Para melhorar o desempenho de E/S, os sistemas operacionais empregam técnicas como readahead , em que uma quantidade maior de um arquivo do que o solicitado é lida na memória com a suposição de que leituras subsequentes provavelmente precisarão desses dados. Um readahead mais alto aumenta o rendimento em detrimento da memória e do IOPS. Um readahead menor aumenta o IOPS em detrimento da taxa de transferência.

Em sistemas Linux, você pode obter e definir o valor readahead com o comando blockdev :

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

O valor readahead é <desired_readahead_bytes> /512 bytes.

Por exemplo, para um readahead de 8 MB, 8 MB equivalem a 8388608 bytes (8 * 1024 * 1024).

8388608 bytes / 512 bytes = 16384

Você definiu blockdev como 16384 :

$ sudo blockdev --setra 16384 /dev/DEVICE_ID

Modifique sua VM ou crie uma nova VM

Existem limites associados a cada tipo de máquina VM que podem afetar o desempenho que você pode obter dos discos anexados. Esses limites incluem:

  • O desempenho do disco permanente aumenta à medida que aumenta o número de vCPUs disponíveis.
  • O hiperdisco não é compatível com todos os tipos de máquinas.
  • As taxas de saída da rede aumentam à medida que aumenta o número de vCPUs disponíveis.

Certifique-se de ter CPUs livres

Ler e gravar em disco permanente requer ciclos de CPU da sua VM. Para atingir níveis de IOPS muito altos e consistentes, você deve ter CPUs livres para processar E/S.

Para aumentar o número de vCPUs disponíveis com sua VM, você pode criar uma nova VM ou editar o tipo de máquina de uma instância de VM .

Crie uma nova VM para obter novas funcionalidades

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

Novas séries de máquinas VM normalmente são executadas em CPUs mais recentes, que podem oferecer melhor desempenho que seus antecessores. Além disso, CPUs mais recentes podem oferecer suporte a funcionalidades adicionais para melhorar o desempenho de suas cargas de trabalho, como Advanced Matrix Extensions (AMX) ou Intel Advanced Vector Extensions (AVX-512).

O que vem a seguir