Os discos persistentes oferecem o desempenho descrito no gráfico de tipos de discos se a VM gerar uma utilização suficiente para atingir os limites de desempenho. Depois de dimensionar os volumes do disco persistente para satisfazer as suas necessidades de desempenho, a carga de trabalho e o sistema operativo podem precisar de alguma otimização.
As secções seguintes descrevem as caraterísticas da VM e da carga de trabalho que afetam o desempenho do disco e abordam alguns elementos-chave que podem ser otimizados para um melhor 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 secções seguintes descrevem os fatores que afetam o desempenho do disco de uma VM.
- Limites de saída de rede na taxa de transferência de gravação
- Leituras e escritas simultâneas
- Tamanho do volume lógico
- Vários discos anexados a uma única instância de VM
Limites de saída de rede na taxa de transferência de escrita
A sua VM tem um limite de saída de rede que depende do tipo de máquina da VM.
O Compute Engine armazena dados no disco persistente com várias escritas paralelas para garantir a redundância incorporada. Além disso, cada pedido de gravação tem alguma 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 de rede dividido por um multiplicador de largura de banda que tem em conta a replicação e a sobrecarga.
Os limites de saída da rede estão indicados na coluna Largura de banda de saída predefinida (Gbps) nas tabelas de tipos de máquinas para as famílias de máquinas de uso geral, otimizadas para computação, otimizadas para armazenamento, otimizadas para memória e otimizadas para aceleradores.
O multiplicador de largura de banda é de aproximadamente 1,16x com a utilização total da rede, o que significa que 16% dos bytes escritos são custos gerais. Para o disco persistente regional, o multiplicador de largura de banda é aproximadamente 2,32 vezes para ter em conta a sobrecarga de replicação adicional.
Numa situação em que as operações de leitura e escrita do disco persistente competem com a largura de banda de saída da rede, 60% da largura de banda de saída da rede máxima, definida pelo tipo de máquina, é alocada às escritas do disco persistente. Os restantes 40% estão disponíveis para todo o outro tráfego de saída da rede. Consulte a secção Largura de banda de saída para ver detalhes acerca de outro tráfego de saída da rede.
O exemplo seguinte mostra como calcular a largura de banda de gravação máxima para um disco persistente numa instância de VM N1. A atribuição de largura de banda é a parte da largura de banda de saída da rede atribuída ao disco persistente. A largura de banda de escrita máxima é a largura de banda de escrita máxima do disco persistente ajustada para a sobrecarga.
Contagem de vCPUs de VMs | Limite de saída de rede (MB/s) | Atribuição de largura de banda (MB/s) | Largura de banda de gravação máxima (MB/s) | Largura de banda de gravação máxima com utilização total da rede (MB/s) |
---|---|---|---|---|
1 | 250 | 150 | 216 | 129 |
2-7 | 1250 | 750 | 1078 | 647 |
8-15 | 2000 | 1200 | 1724 | 1034 |
16+ | 4000 | 2400 | 3448 | 2069 |
Pode calcular a largura de banda máxima do disco persistente através das seguintes fórmulas:
VM N1 com 1 vCPU
O limite de saída de rede é:
2 Gbps / 8 bits = 0,25 GB por segundo = 250 MB por segundo
A atribuição de largura de banda do disco persistente com utilização total da rede é:
250 MB por segundo * 0,6 = 150 MB por segundo.
A largura de banda de gravação máxima do disco persistente 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 de escrita máxima do Persistent Disk 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 para o desempenho. Outros fatores podem limitar o desempenho abaixo deste nível. Consulte as secções seguintes para obter informações sobre outras restrições de desempenho.
Leituras e escritas simultâneas
Para o Persistent Disk padrão, as leituras e as escritas simultâneas partilham os mesmos recursos. Quando a VM está a usar mais débito de leitura ou IOPS, consegue fazer menos escritas. Por outro lado, as instâncias que usam mais débito de gravação ou IOPS podem realizar menos leituras.
Os volumes de discos persistentes não podem atingir simultaneamente os respetivos limites máximos de débito e IOPS para leituras e escritas.
O cálculo da taxa de transferência é IOPS * I/O size
. Para tirar partido dos limites de débito máximos para leituras e escritas simultâneas no disco persistente SSD, use um tamanho de E/S de modo que as IOPS de leitura e escrita combinadas não excedam o limite de IOPS.
A tabela seguinte apresenta os limites de IOPS por MV para leituras e escritas simultâneas.
Disco persistente padrão | Disco persistente SSD (8 vCPUs) | Disco persistente SSD (32 ou mais vCPUs) | Disco persistente SSD (mais de 64 vCPUs) | ||||
---|---|---|---|---|---|---|---|
Leitura | Escrita | Leitura | Escrita | Leitura | Escrita | Leitura | Escrita |
7500 | 0 | 15 000 | 0 | 60 000 | 0 | 100 000 | 0 |
5625 | 3750 | 11 250 | 3750 | 45 000 | 15 000 | 75 000 | 25 000 |
3750 | 7500 | 7500 | 7500 | 30 000 | 30 000 | 50 000 | 50 000 |
1875 | 11 250 | 3750 | 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 baseiam-se num 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/escrita.
A tabela seguinte apresenta os limites de débito (MiB por segundo) por instância para leituras e escritas simultâneas.
Disco persistente padrão | Disco persistente SSD (6 a 14 vCPUs) | Disco persistente SSD (16 ou mais vCPUs) | |||
---|---|---|---|---|---|
Leitura | Escrita | Leitura | Escrita | Leitura | Escrita |
1200 | 0 | 800* | 800* | 1200* | 1200* |
900 | 100 | ||||
600 | 200 | ||||
300 | 300 | ||||
0 | 400 |
Tamanho do volume lógico
O disco persistente pode ter um tamanho máximo de 64 TiB e pode criar volumes lógicos únicos de até 257 TiB através da gestão de volumes lógicos na sua VM. Um tamanho de volume maior afeta o desempenho das seguintes formas:
- Nem todos os sistemas de ficheiros locais funcionam bem a esta escala. As operações comuns, como a montagem e a verificação do sistema de ficheiros, podem demorar mais tempo do que o esperado.
- O desempenho máximo do disco persistente é alcançado com tamanhos mais pequenos. Os discos demoram mais tempo a ler ou escrever totalmente com esta quantidade de armazenamento numa VM. Se a sua aplicação o suportar, considere usar várias VMs para um débito total do sistema maior.
- A criação de instantâneos de um grande número de discos persistentes pode demorar mais tempo do que o esperado e pode fornecer uma vista inconsistente do seu volume lógico sem uma coordenação cuidadosa com a sua aplicação.
Vários discos associados a uma única instância de VM
Os limites de desempenho dos discos quando tem vários discos anexados a uma VM dependem de os discos serem do mesmo tipo ou de tipos diferentes.
Vários discos do mesmo tipo
Se tiver vários discos do mesmo tipo anexados a uma instância de VM no mesmo modo (por exemplo, leitura/escrita), os limites de desempenho são os mesmos que os limites de um único disco com o tamanho combinado desses discos. Se usar todos os discos a 100%, o limite de desempenho agregado é dividido igualmente entre os discos, independentemente do tamanho relativo dos discos.
Por exemplo, suponhamos que tem um disco de 200 GB pd-standard
e um disco de 1000 GB pd-standard
. Se não usar o disco de 1000 GB, o disco de 200 GB pode atingir o limite de desempenho de um disco padrão de 1200 GB. Se usar ambos os discos a 100%, cada um tem o limite de desempenho de um disco de 600 GB pd-standard
(1200 GB / 2 discos = disco de 600 GB).
Vários discos de diferentes tipos
Se anexar diferentes tipos de discos a uma VM, o desempenho máximo possível é o limite de desempenho do disco mais rápido que a VM suporta. O desempenho cumulativo dos discos anexados não excede os limites de desempenho do disco mais rápido suportado pela VM.
Otimize os seus discos para cargas de trabalho orientadas para IOPS ou débito
As recomendações de desempenho dependem de querer maximizar as IOPS ou a taxa de transferência.
Cargas de trabalho orientadas para IOPS
As bases de dados, sejam SQL ou NoSQL, têm padrões de utilização de acesso aleatório aos dados. A Google recomenda os seguintes valores para cargas de trabalho orientadas para IOPS:
Valores de profundidade da fila de E/S de 1 para cada 400 a 800 de IOPS, até um limite de 64 em volumes grandes
Uma CPU gratuita para cada 2000 IOPS de leitura aleatória e 1 CPU gratuita para cada 2500 IOPS de escrita aleatória
Se estiver disponível para o tipo de máquina da VM, use discos Google Cloud Hyperdisk Extreme, que lhe permitem alterar os IOPS aprovisionados.
Normalmente, os valores de leitura antecipada mais baixos são sugeridos em documentos de práticas recomendadas para o MongoDB, Apache Cassandra e outras aplicações de base de dados.
Cargas de trabalho orientadas para o débito
As operações de streaming, como uma tarefa do Hadoop, beneficiam de leituras sequenciais rápidas, e os tamanhos de E/S maiores podem aumentar o desempenho do streaming.
Use um tamanho de E/S de 256 KB ou superior.
Se estiver disponível para o tipo de máquina da VM, use discos Hyperdisk Throughput, que lhe permitem alterar o débito aprovisionado.
Para o disco persistente padrão, use 8 ou mais streams de E/S sequenciais paralelas sempre que possível. O disco persistente padrão foi concebido 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 a sua aplicação está otimizada para uma localidade de dados razoável em discos grandes.
Se a sua aplicação aceder a dados distribuídos por diferentes partes de um disco durante um curto período de tempo (centenas de GB por vCPU), não atinge os IOPS ideais. Para um melhor desempenho, otimize em função da localidade dos dados, ponderando fatores como a fragmentação do disco e a aleatoriedade das partes acedidas do disco.
Para o disco persistente SSD, certifique-se de que o programador de E/S no sistema operativo está configurado para satisfazer as suas necessidades específicas.
Em sistemas baseados no Linux, verifique se o agendador de E/S está definido como
none
. Este agendador de E/S não reordena os pedidos e é ideal para dispositivos de E/S aleatórios e rápidos.Na linha de comandos, verifique a programação de E/S usada pela sua máquina Linux:
cat /sys/block/sda/queue/scheduler
O resultado é semelhante ao seguinte:
[mq-deadline] none
O programador de E/S atualmente ativo é apresentado entre parênteses retos (
[]
).Se o programador de E/S não estiver definido como
none
, execute um dos seguintes passos:- Para alterar o programador de E/S predefinido para
none
, definaelevator=none
na entradaGRUB_CMDLINE_LINUX
do ficheiro de configuração do GRUB. Normalmente, este ficheiro encontra-se em/etc/default/grub
, mas em algumas distribuições anteriores, pode estar localizado num diretório diferente.
GRUB_CMDLINE_LINUX="elevator=none vconsole.keymap=us console=ttyS0,38400n8 vconsole.font=latarcyrheb-sun16
Depois de atualizar o ficheiro de configuração do GRUB, configure o carregador de arranque no sistema para que possa arrancar no Compute Engine.
- Em alternativa, pode alterar o programador de E/S no tempo de execução:
echo 'none' | sudo tee /sys/block/sda/queue/scheduler
Se usar este método, o sistema volta a usar o agendador de E/S predefinido no reinício. Execute novamente o comando
cat
para validar o programador de E/S.- Para alterar o programador de E/S predefinido para
Alterações da carga de trabalho que podem melhorar o desempenho do disco
Determinados comportamentos de carga de trabalho podem melhorar o desempenho das operações de E/S nos discos anexados.
Use uma profundidade da fila de E/S elevada
Os discos persistentes têm uma latência superior à dos discos anexados localmente, como os discos SSD locais, porque são dispositivos anexados à rede. Podem oferecer IOPS e débito muito elevados, mas tem de se certificar de que são feitos pedidos de E/S suficientes em paralelo. O número de pedidos de E/S feitos em paralelo é denominado profundidade da fila de E/S.
As tabelas seguintes indicam a profundidade da fila de E/S recomendada para garantir que pode alcançar um determinado nível de desempenho. As tabelas usam uma ligeira sobrestimação da latência típica para mostrar recomendações conservadoras. O exemplo pressupõe que está a usar um tamanho de E/S de 16 KB.
Gere E/Ss suficientes com um tamanho de E/S grande
Use um tamanho de E/S grande
Para garantir que os limites de IOPS e a latência não prejudicam o desempenho da sua aplicação, use um tamanho de E/S mínimo de 256 KB ou superior.
Use tamanhos de faixas grandes para aplicações de sistema de ficheiros distribuídos. Uma carga de trabalho de E/S aleatória com tamanhos de faixas grandes (4 MB ou mais) alcança um excelente desempenho no Persistent Disk padrão devido à forma como a carga de trabalho imita o acesso ao disco de fluxo sequencial múltiplo.
Certifique-se de que a sua aplicação está a gerar E/S suficiente
Certifique-se de que a sua aplicação está a gerar E/S suficientes para usar totalmente os limites de IOPS e débito do disco. Para compreender melhor o padrão de E/S da sua carga de trabalho, reveja a utilização do disco e as métricas de desempenho no Cloud Monitoring.
Certifique-se de que existe CPU disponível suficiente na instância que está a gerar a E/S
Se a sua instância de VM não tiver CPU suficiente, a sua app não consegue gerir as IOPS descritas anteriormente. Recomendamos que tenha uma CPU disponível para cada 2000 a 2500 IOPS de tráfego esperado.
Limite as cargas de E/S pesadas a um intervalo máximo
Um intervalo refere-se a um intervalo contíguo de endereços de blocos lógicos num único disco físico. As cargas de E/S pesadas atingem o desempenho máximo quando limitadas a um determinado intervalo máximo, que depende do tipo de máquina da VM à qual o disco está associado, conforme indicado na tabela seguinte.
Tipo de máquina | Intervalo máximo recomendado |
---|---|
|
25 TB |
Todos os outros tipos de máquinas | 50 TB |
Os intervalos em discos persistentes separados que totalizam 50 TB ou menos podem ser considerados iguais a um único intervalo de 50 TB para fins de desempenho.
Alterações ao sistema operativo para melhorar o desempenho do disco
Em alguns casos, pode ativar ou desativar funcionalidades ao nível do sistema operativo ou configurar os discos anexados de formas específicas para melhorar o desempenho do disco.
Evite usar sistemas de ficheiros ext3 no Linux
A utilização do sistema de ficheiros ext3 numa VM Linux pode resultar num desempenho muito fraco em cargas de escrita pesadas. Use o ext4 sempre que possível. O controlador do sistema de ficheiros ext4 é retrocompatível com ext3/ext2 e suporta a montagem de sistemas de ficheiros ext3. O sistema de ficheiros ext4 é o predefinido na maioria dos sistemas operativos Linux.
Se não conseguir migrar para o ext4, como solução alternativa, pode montar sistemas de ficheiros ext3 com a opção de montagem data=journal
. Isto melhora as IOPS de escrita ao custo da taxa de transferência de escrita. A migração para o ext4 pode resultar numa melhoria até 7 vezes
em alguns testes de referência.
Desative a inicialização em diferido e ative os comandos DISCARD
Os discos persistentes suportam operações de rejeição ou comandos TRIM
, que permitem que os sistemas operativos informem os discos quando os blocos já não estão a ser usados. O suporte de eliminação permite que o sistema operativo marque os blocos do disco como já não necessários, sem incorrer no custo de zerar os blocos.
Na maioria dos sistemas operativos Linux, ativa as operações de rejeição quando monta um disco persistente na sua VM. As VMs do Windows Server 2012 R2 ativam as operações de rejeição por predefinição quando monta um disco persistente.
A ativação das operações de rejeição pode aumentar o desempenho geral do tempo de execução e também pode acelerar o desempenho do disco quando é montado pela primeira vez. A formatação de um volume de disco inteiro pode demorar muito tempo, pelo que a formatação preguiçosa é uma prática comum. A desvantagem da formatação tardia é que o custo é frequentemente pago na primeira vez que o volume é montado. Ao desativar a inicialização lenta e ativar as operações de rejeição, pode obter operações de formatação e montagem rápidas.
Desative a inicialização tardia e ative as operações de rejeição ao formatar um disco transmitindo 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 operativos, formate o disco persistente sem esse parâmetro.-E lazy_itable_init=0,discard
Ative as operações de rejeição ao montar um disco transmitindo a seguinte flag ao comando
mount
:-o discard
O disco persistente funciona bem com as operações de rejeição ativadas. No entanto, pode executar fstrim
periodicamente, além de, ou em vez de, usar operações de rejeição. Se não usar operações de rejeição, execute fstrim
antes de criar uma captura instantânea do disco de arranque. A remoção do sistema de ficheiros permite-lhe criar imagens de instantâneos mais pequenas, o que reduz o custo de armazenamento de instantâneos.
Ajuste o valor de leitura antecipada
Para melhorar o desempenho de E/S, os sistemas operativos usam técnicas como a readahead, em que é lido para a memória mais de um ficheiro do que o solicitado, partindo do princípio de que as leituras subsequentes vão precisar desses dados. Uma leitura antecipada mais elevada aumenta a taxa de transferência à custa da memória e dos IOPS. A diminuição da leitura antecipada aumenta as IOPS à custa da taxa de transferência.
Nos sistemas Linux, pode obter e definir o valor de leitura antecipada com o comando blockdev:
$ sudo blockdev --getra /dev/DEVICE_ID
$ sudo blockdev --setra VALUE /dev/DEVICE_ID
O valor de leitura antecipada é <desired_readahead_bytes>
/ 512 bytes.
Por exemplo, para uma leitura antecipada de 8 MB, 8 MB são 8388608 bytes (8 * 1024 * 1024).
8388608 bytes / 512 bytes = 16384
Definiu blockdev como 16384
:
$ sudo blockdev --setra 16384 /dev/DEVICE_ID
Modifique a sua VM ou crie uma nova
Existem limites associados a cada tipo de máquina de VM que podem afetar o desempenho que pode obter dos discos anexados. Estes limites incluem:
- O desempenho do disco persistente aumenta à medida que o número de vCPUs disponíveis aumenta.
- Os Hyperdisks não são suportados com todos os tipos de máquinas.
- As taxas de saída da rede aumentam à medida que o número de vCPUs disponíveis aumenta.
Certifique-se de que tem CPUs livres
A leitura e a escrita em volumes de discos persistentes requerem ciclos de CPU da sua VM. Para alcançar níveis de IOPS muito elevados e consistentes, tem de ter CPUs livres para processar a E/S.
Para aumentar o número de vCPUs disponíveis com a sua VM, pode criar uma nova VM ou pode editar o tipo de máquina de uma instância da VM.
Considere usar o Google Cloud Hyperdisk
Para um número mais elevado de IOPS e débito, considere usar volumes de Hyperdisk em vez de Persistent Disk se a série de máquinas suportar o Hyperdisk.
Para determinar se a sua série de máquinas suporta o Hyperdisk, consulte o artigo Suporte de séries de máquinas para o Hyperdisk.
Se a série de máquinas da sua instância for compatível com o Hyperdisk, siga estes passos para usar volumes do Hyperdisk:
Escolha um tipo de Hyperdisk que satisfaça as necessidades da sua carga de trabalho.
Para mudar para o tipo de Hyperdisk que escolheu, consulte as instruções em Alterar o tipo de disco.
Altere a série de máquinas da instância para melhorar o desempenho
Normalmente, as novas séries de máquinas virtuais são executadas em CPUs mais recentes, o que pode oferecer um desempenho melhor do que as anteriores. Além disso, as CPUs mais recentes podem suportar funcionalidades adicionais para melhorar o desempenho das suas cargas de trabalho, como extensões de matriz avançadas (AMX) ou extensões de vetor avançadas da Intel (AVX-512).
O que se segue?
- Monitorize o desempenho do disco revendo as métricas de desempenho do disco e monitorizando o estado do disco.
- Realize testes de referência de volumes de discos persistentes anexados a VMs do Linux.
- Saiba mais sobre os preços dos discos persistentes.
- Saiba como monitorizar o desempenho do disco revendo as métricas de desempenho do disco.