O blog da AWS

Descubra novos insights de desempenho usando estatísticas detalhadas de desempenho da Amazon no Windows

Por Xinze Zhang, EC2 Operating Systems.

As principais soluções de armazenamento para instâncias Windows do EC2, Amazon EC2 Instance Store e Amazon Elastic Block Store (Amazon EBS), agora fornecem estatísticas detalhadas de desempenho para monitoramento em tempo real. O monitoramento em tempo real permite que você obtenha visibilidade de métricas-chave de desempenho, como latência, throughput e IOPS, permitindo detectar e resolver proativamente possíveis gargalos ou problemas.

Neste post, exploramos como usar estatísticas detalhadas de desempenho tanto para Amazon EBS quanto para Instance Storage em ambientes Windows. Essas novas métricas fornecem granularidade sub-minuto, oferecendo visibilidade em tempo real do desempenho do volume de armazenamento em ambos os tipos de armazenamento. Você pode acessar essas estatísticas diretamente do seu dispositivo Amazon EBS NVMe/Amazon Instance Storage NVMe conectado à instância Amazon Elastic Compute Cloud (Amazon EC2) e usá-las para monitorar o desempenho de I/O no nível de armazenamento. Também fornecemos exemplos de como usar essas estatísticas para avaliar rapidamente a saúde do volume EBS/Storage e identificar gargalos de desempenho, o que melhora tanto a confiabilidade quanto o desempenho de suas aplicações. Ao criar ou anexar volumes EBS, habilite a criptografia em repouso usando o AWS Key Management Service (AWS KMS) para proteger seus dados. Para mais informações, consulte a criptografia do Amazon EBS no Guia do Usuário do Amazon EC2.

Visão geral da solução

Usando as novas estatísticas detalhadas de desempenho do Amazon EC2 Instance Store/Amazon Elastic Block Store (Amazon EBS) no nível da instância, esta solução de exemplo aprimora as capacidades de observabilidade e solução de problemas para aplicações sensíveis à latência executadas em instâncias EC2 Nitro. Usamos a nova ferramenta nvme_amzn.exe para coletar estatísticas de alta frequência sobre operações de I/O, latência e comprimento de fila, permitindo a solução proativa de problemas.

Como exemplos de como usar essas métricas granulares, esta solução demonstra como validar a capacidade de resposta do armazenamento local e do volume EBS, para que você possa identificar rapidamente quaisquer interrupções de I/O. Esta solução ajuda você a identificar gargalos de desempenho de armazenamento, que podem ser usados para otimizar as configurações de armazenamento local e instância EC2 para suas cargas de trabalho.

Pré-requisitos

Esta solução envolve a configuração de uma instância EC2 Nitro e um armazenamento local anexado para acessar estatísticas detalhadas de desempenho do armazenamento local. Esta é uma configuração que você provavelmente já possui se estiver usando o Amazon EC2. Para implantar os componentes necessários, você deve concluir as seguintes etapas:

  1. Inicie uma instância EC2 Nitro (ou use uma instância Nitro existente) e conecte-se a ela via Remote Desktop Protocol (RDP).
  2. Verifique se sua instância Windows do EC2 inclui o driver AWS NVMe versão 1.7.0 ou posterior instalado seguindo identificar seu tipo de driver
  3. Identifique o dispositivo NVMe associado ao armazenamento local/volume EBS para o qual você deseja consultar as estatísticas. Você pode executar o comando Get-Disk no PowerShell para exibir todos os dispositivos NVMe na instância. Para mais informações, consulte Mapear discos NVMe na instância Windows do Amazon EC2 para volumes.

Para esta demonstração, monitoraremos dois volumes de armazenamento:

  • Volume EBS (Disco 0): Número de Série vol01234567890abcdef_00000001.
  • Armazenamento local (Disco 1): Número de Série AWSEXAMPLE1234567890_00000001.
  1. Certifique-se de que nvme_amzn.exe está presente em C:\ProgramData\Amazon\Tools por padrão.
  2. Use a ferramenta nvme_amzn.exe, com privilégios de administrador, e passe o número do disco como parâmetro com diferentes comandos. A saída retornada se parece com o seguinte.

Administrador: Windows PowerShell:

.\nvme_amzn.exe --help or nvme_amzn.exe /help

Os usuários podem ver o mapeamento de dispositivos de volumes EBS por padrão sem passar o número do disco como parâmetro

.\nvme_amzn.exe

Os usuários podem visualizar o mapeamento de dispositivo específico passando números de disco ou um único número de disco como parâmetro.

.\nvme_amzn.exe 0 1 2 3 4

Os usuários podem ver os detalhes do controlador nvme usando id-ctrl e passando o número do disco como parâmetro (a saída JSON pode ser recuperada fornecendo o parâmetro --json ou /json para a ferramenta)

# EBS volume
.\nvme_amzn.exe id-ctrl 0

# EC2 local storage
.\nvme_amzn.exe id-ctrl 1

.\nvme_amzn.exe id-ctrl 0 --json

Os usuários podem ver as estatísticas de desempenho para o volume de armazenamento local EBS/EC2 usando stats e passando o número do disco como parâmetro (forneça o parâmetro --json ou /json para recuperar a saída JSON).

# EBS volume
.\nvme_amzn.exe stats 0
# Json format
.\nvme_amzn.exe stats 0 --json

# EC2 Local storage volume
.\nvme_amzn.exe stats 1
# Json format
.\nvme_amzn.exe stats 1 --json

Além disso, para o volume de armazenamento local do EC2, fornecendo a opção --details/-d, você pode ver o histograma de 5 diferentes bandas de IO: (0, 512 Byte], (512B, 4KiB], (4KiB, 8KiB], (8KiB, 32KiB], (32 KiB, MAX].

.\nvme_amzn.exe stats 0 --details

O exemplo a seguir mostra a saída do log NVMe com estatísticas cumulativas. As estatísticas indicam operações de leitura/gravação, bytes transferidos e tempo gasto processando operações (em microssegundos). Elas também mostram o número de microssegundos em que a aplicação tentou exceder os limites de IOPS/throughput do Amazon EBS ou Amazon EC2 Instance Local Storage

Volume EBS:

Volume de armazenamento local do EC2:

Também incluídos nas figuras a seguir estão histogramas de latência de I/O de leitura e gravação, com cada linha representando o número total de operações de I/O concluídas até o momento dentro de um intervalo específico de tempo (em microssegundos).

Essas estatísticas são apresentadas como contadores cumulativos até o momento em que o comando é executado. O comando pode ser executado no intervalo desejado, por exemplo, a cada 15 segundos, com cada saída subsequente refletindo os totais cumulativos atualizados para as métricas. Calcular a diferença nas estatísticas entre as duas últimas saídas permite que você obtenha insights sobre o perfil de armazenamento da instância durante o período de 15 segundos.

Obtendo insights das estatísticas detalhadas de desempenho do Amazon Instance Storage/volume EBS

Você configurou o monitoramento usando essas estatísticas detalhadas de desempenho, agora podemos demonstrar as diferentes maneiras de usar essas estatísticas.

Como mencionado na seção anterior, você pode usar as estatísticas detalhadas para visualizar histogramas de latência de I/O para observar a distribuição da latência de I/O dentro do período. Você pode usar as operações de leitura/gravação e estatísticas de tempo gasto para calcular a latência média. Usar as estatísticas detalhadas permite que você visualize a latência média em uma granularidade sub-minuto.

Aqui estão quatro exemplos para você usar as estatísticas para esclarecer métricas-chave de desempenho.

Cenário 1: Identificando estado não responsivo de um volume EBS

Neste cenário, discutimos como usar estatísticas detalhadas de desempenho do Amazon EBS para observar quando um volume EBS não está respondendo a operações de I/O. Se você observar vários intervalos em que seu volume não está respondendo, então você pode tomar ações, como substituir o volume afetado ou parar e reiniciar a instância à qual o volume está anexado. Na maioria dos casos, quando seu volume se torna não responsivo, o Amazon EBS diagnostica e recupera automaticamente seu volume em alguns minutos.

Para identificar se seu volume não está respondendo, você pode usar as seguintes etapas para determinar se o I/O foi interrompido em seu volume:

  1. Identifique o dispositivo NVMe do volume EBS para solucionar problemas
  2. Colete estatísticas para o dispositivo nos intervalos desejados
  3. Compare as estatísticas para verificar se o volume EBS não está respondendo

Etapa 1: Identifique o dispositivo NVMe do volume EBS para solucionar problemas

1. Identifique o dispositivo NVMe associado ao volume EBS na instância usando a ferramenta nvme_amzn.exe.

.\nvme_amzn.exe

Etapa 2: Colete estatísticas para o dispositivo nos intervalos desejados

1. Colete as estatísticas detalhadas de desempenho do Amazon EBS diretamente do dispositivo usando a ferramenta nvme_amzn.exe:

# EBS volume disk0
.\nvme_amzn.exe stats 0

Etapa 3: Compare as estatísticas para verificar se o volume EBS não está respondendo

1. Da saída, considere os seguintes três campos para este cenário: Total Read Ops, Total Write Ops e Queue Length.

2. Execute o mesmo comando ebsnvme após um intervalo desejado (por exemplo: após 15 segundos), para que você possa comparar como os I/Os totais de leitura/gravação progrediram no nível do Amazon EBS.

3. Das estatísticas detalhadas de desempenho coletadas com aproximadamente 15 segundos de intervalo, fazemos as seguintes observações-chave

  • Total Read Ops aumentou de 1421153 para 1423480, indicando 2327 operações de leitura concluídas no período de 15 segundos.
  • Total Write Ops aumentou de 13835137 para 13846338, indicando 11201 operações de leitura concluídas no período de 15 segundos.
  • Queue Length permaneceu entre 0 e 6, indicando que a aplicação estava emitindo I/Os para o volume EBS. Se você vir um aumento gradual no Queue Length, então isso refletiria um acúmulo de I/Os enfileirados.

Isso mostra que o volume EBS ainda está processando I/Os que está recebendo, o que descarta o volume EBS como a fonte da degradação observada no desempenho da aplicação. Se tivéssemos visto um aumento no Queue Length junto com 0 operações de leitura/gravação processadas durante o período, então isso refletiria um volume EBS não responsivo.

Se você deseja validar seus mecanismos de identificação de volumes EBS não responsivos, consulte o post do blog Conduzindo experimentos de engenharia de caos no Amazon EBS usando o AWS Fault Injection Service, que explica como configurar um AWS Fault Injection Service experimento de Pausa de I/O.

Cenário 2: Identificando gargalos no desempenho de armazenamento no EBS

As estatísticas detalhadas de desempenho do Amazon EBS também podem ser usadas para configurar as características de desempenho apropriadas para seu volume EBS e instância EC2 com base nas necessidades de desempenho de sua aplicação. As estatísticas EBS Volume Performance Exceeded e EC2 Instance EBS Performance Exceeded indicam a duração pela qual sua carga de trabalho tentou consistentemente conduzir IOPS ou throughput maior do que o desempenho provisionado do seu volume ou da sua instância em um determinado período. Exceder o desempenho provisionado do volume ou da instância pode resultar em latência elevada em sua carga de trabalho. Para este cenário, considere a mesma aplicação usada no cenário 1.

Complete as seguintes etapas para verificar se o desempenho do volume EBS está corretamente provisionado:

1. Selecione o dispositivo NVMe do volume EBS para verificar

2. Colete estatísticas para o dispositivo nos intervalos desejados

3. Compare as estatísticas para verificar se o volume EBS está excedendo o desempenho provisionado

Etapa 1. Selecione o dispositivo NVMe do volume EBS para verificar

1. Esta etapa é a mesma que a Etapa 1 discutida anteriormente no cenário 1.

Etapa 2. Colete estatísticas para o dispositivo nos intervalos desejados

1. Semelhante à Etapa 2 discutida no cenário 1, acesse as estatísticas detalhadas de desempenho em dois pontos no tempo.

2. Considere as estatísticas EBS Volume Performance Exceeded e EC2 Instance EBS Performance Exceeded do dispositivo EBS NVMe.

$DiskNumber = 0
$Interval = 15

while ($true) {
    Write-Host "=== $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') ===" -ForegroundColor Cyan; & "C:\ProgramData\Amazon\Tools\nvme_amzn.exe" stats $DiskNumber
    Write-Host ""
    Start-Sleep -Seconds $Interval
}

Etapa 3: Compare as estatísticas para verificar se o volume EBS está excedendo o desempenho provisionado

1. No exemplo de saída a seguir, você pode ver a estatística EBS Volume Performance Exceeded aumentando em 26813772 microssegundos. Isso mostra que a carga de trabalho executada no volume EBS vol-EXAMPLEabcd1234 tentou conduzir mais IOPS do que o provisionado no volume EBS subjacente, o que pode impactar a latência de I/O do volume. Recomendamos que você aumente o desempenho do seu volume para garantir que você tenha desempenho provisionado suficiente para as necessidades de sua aplicação.

2. No exemplo de saída a seguir, executando uma carga de trabalho diferente na instância, podemos ver que o volume excedeu o desempenho de IOPS provisionado no nível da instância EC2 anexada. Neste caso, aumentar para um tamanho de instância maior pode melhorar o desempenho de sua aplicação.

3. Um gerador de carga sintética para Oracle chamado Silly Little Oracle Benchmark (SLOB) também pode ser usado para simular cargas de trabalho em bancos de dados Oracle, enquanto monitora as estatísticas do Amazon EBS para ver qual volume ou instância está se tornando o gargalo.

É importante ter as configurações corretas de instância e volume para evitar gargalos de desempenho em sua aplicação. Consulte a documentação de tipos de volume EBS para mais informações sobre os diferentes tipos de volume EBS, e a documentação otimizado para EBS da Amazon para entender como selecionar a combinação ideal de instância EC2 e volume EBS adequada para sua aplicação. Essas estatísticas estão disponíveis com granularidade de até um segundo, o que permite que você execute efetivamente essas verificações em tempo real e inicie modificações de volume para otimizar as características do volume conforme necessário.

Cenário 3: Identificando gargalos no desempenho de armazenamento no volume de armazenamento de instância

As estatísticas detalhadas de desempenho do Amazon Instance Storage podem ser usadas para configurar as características de desempenho apropriadas para sua aplicação. As estatísticas “EC2 Instance local storage Performance Exceeded” indicam a duração pela qual sua carga de trabalho tentou consistentemente conduzir IOPS ou throughput maior do que seu limite de taxa em um determinado período. Exceder o valor de throttle pode resultar em latência elevada em sua carga de trabalho.

Por exemplo, i3en.xlarge pode suportar até 85.000 IOPS de leitura, 65.000 IOPS de gravação, 634.765 KiB/S para leitura e 317.382 KiB/S para gravação. Usando as métricas detalhadas de IO, você pode determinar com mais eficiência se a instância atende aos seus requisitos.

Complete as seguintes etapas para verificar se o dispositivo atende às necessidades de sua aplicação:

  1. Selecione o dispositivo de armazenamento de instância para verificar.
  2. Colete estatísticas para o dispositivo nos intervalos desejados
  3. Compare as estatísticas para verificar se o armazenamento de instância está excedendo o valor de throttle

Etapa 1. Selecione o dispositivo NVMe de Instance Storage para verificar

Use a ferramenta nvme_amzn e identifique o dispositivo NVMe associado ao armazenamento de instância.

Etapa 2: Colete estatísticas para o dispositivo nos intervalos desejados

$DiskNumber = 0
$Interval = 15

while ($true) {
    Write-Host "=== $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') ===" -ForegroundColor Cyan; & "C:\ProgramData\Amazon\Tools\nvme_amzn.exe" stats $DiskNumber
    Write-Host ""
    Start-Sleep -Seconds $Interval
}

Etapa 3: Compare as estatísticas para verificar se o armazenamento de instância está excedendo o valor de throttle

Considere o seguinte cenário como exemplo. No início, após o lançamento da instância, tanto o IOPS quanto o Throughput em “EC2 Instance local storage Performance Exceeded (us)” são 0s.

Você inicia suas aplicações e descobre que a gravação da aplicação não atende às suas expectativas. Você pode verificar as métricas de IO posteriormente. Você vê que muitos IO caem na faixa de 1 ms a 2 ms, o que é inesperado.

Ao verificar ainda mais o “EC2 Instance local storage Performance Exceeded (us)”. Você descobriu que o IO atingiu o limite superior permitido por até 8 segundos, o que indica que o i3en.xlarge não atenderia às suas expectativas. Selecione um tamanho de instância maior para resolver isso.

É importante ter o tamanho de instância correto para evitar gargalos de desempenho em sua aplicação. Consulte a documentação de especificações de tipo de instância ec2 para mais informações sobre os diferentes tamanhos de armazenamento de instância para entender como selecionar o tamanho de instância ideal adequado para sua aplicação. Esta ferramenta ajuda você a executar efetivamente essas verificações em tempo real.

Cenário 4: Identificando qual tamanho de bloco causou a longa latência no volume de armazenamento de instância

Você pode ter uma carga de trabalho mista:

  • Padrão de dados (leitura ou gravação) com diferentes tamanhos de bloco como 4K e 128K.
  • Padrão de dados misto de leitura e gravação.

Usando o switch --detail/-d do NVMe CLI, você pode identificar o problema rapidamente e reajustar a carga de trabalho.

Exemplo 1: Alta latência de gravação de uma carga de trabalho

Ao examinar ainda mais o histograma da faixa de tamanho de bloco maior que 32 KiB, você pode ver que o IO maior causou alta latência da aplicação, enquanto outros tamanhos de bloco (como 8K) não mostram anormalidade de latência.

Exemplo 2: Tráfego misto de leitura e gravação

Alguns usuários terão uma mistura de tráfego de leitura e gravação. Por exemplo, algumas aplicações farão tráfego de leitura leve (por exemplo, para ler alguns metadados) e gravação pesada. Isso pode inadvertidamente impactar a latência de leitura. Por exemplo, uma aplicação está fazendo uma operação de leitura com um único IO de tamanho de bloco pequeno. No entanto, o usuário experimenta alta latência de leitura. Examinando a divisão do histograma, você poderia razoavelmente acreditar que a gravação pesada de IO maior pode interferir com a leitura.

O histograma detalhado de IO para tamanho de IO maior que 512B mas menor ou igual a 4KB

O histograma detalhado de IO para tamanho de IO maior que 32 KiB

O usuário deve considerar suavizar o padrão de gravação para aliviar a latência de leitura.

Limpeza

Se você criou uma instância EC2 e volume EBS para este exercício, então encerre e exclua a instância e volumes apropriados para evitar custos futuros.

Conclusão

Neste post, apresentamos uma solução para acessar estatísticas de desempenho de alta resolução para volumes Amazon EBS e EC2 Instance Store no nível da instância. Essas métricas detalhadas fornecem uma visão em tempo real do desempenho de armazenamento subjacente em granularidade sub-minuto, ajudando você a identificar rapidamente a causa raiz de interrupções em suas aplicações.

Esta abordagem também ajuda você a identificar gargalos de desempenho causados por cargas de trabalho que excedem seus limites de IOPS ou throughput provisionados no Amazon EC2, volumes EBS ou EC2 Instance Store. Combinado com métricas do Amazon CloudWatch, que fornecem insights no nível do volume em granularidade de um minuto, essas ferramentas ajudam a fornecer a visibilidade necessária para diagnosticar e resolver com confiança problemas de desempenho relacionados ao armazenamento.


Este conteúdo foi traduzido do post original do blog, que pode ser encontrado aqui.

Autor

Xinze Zhang é Software Development Engineer II para EC2 Operating Systems na Amazon Web Services.

Tradutores

Nicolas Tarzia é Senior Technical Account Manager na AWS, com mais de 13 anos de experiência, com ampla experiência em arquitetura cloud, engenharia e design de software. Atualmente apoia clientes do ramo financeiro. Sua área de interesse são tecnologias serverless.
https://www.linkedin.com/in/nicolastarzia
Luiz Santos é Technical Account Manager na AWS, atuando no time de Enterprise Support em São Paulo.