Artigo
· Nov. 27, 2023 9min de leitura

Armazenamento da AWS. Alta taxa de IOPS de escrita. Comparação entre gp3 e io2.

A maioria dos aplicativos transacionais tem um perfil de leitura/escrita (RW) de 70:30. No entanto, alguns casos especiais têm perfis de IO extremamente altos.

Realizei testes de IO de armazenamento na região da AWS ap-southeast-2 (Sydney) para simular os padrões de IO do banco de dados do IRIS e uma taxa de transferência semelhante a de um aplicativo com uma alta taxa de escrita.

O objetivo do teste era determinar se os tipos de instância EC2 e os tipos de volume do EBS disponíveis nas regiões australianas da AWS oferecem suporte às altas taxas de IO e transferência necessárias.

Foram realizados ajustes mínimos no sistema operacional e no IRIS (veja a configuração do sistema operacional e do IRIS abaixo).

  • Os tipos de instância EC2 e de volume do EBS foram selecionados para maximizar as taxas de IOPS e transferência.

Os seguintes testes foram realizados:

  • O uso de um único volume io2 Block Express para cada banco de dados e WIJ.
  • O uso de um volume distribuído do Logical Volume Manager (LVM) de 16 discos gp3 para o banco de dados e um volume distribuído do LVM de cinco discos gp3 para o WIJ.
  • Duas instâncias em zonas de disponibilidade separadas usando o espelhamento do banco de dados síncrono do IRIS com um único volume io2 Block Express para o banco de dados e o WIJ em cada instância.

Resumo

Foi executado um número limitado de testes. No entanto, os resultados mostram que é possível executar uma carga de trabalho do IRIS de alta taxa de IO na região de Sydney da AWS.

Há limites em todo lugar na nuvem

  • É importante notar que, além dos limites das taxas de IOPS e de transferência publicados para instâncias e armazenamento, a AWS tem limites no nível da conta. A AWS precisou aumentar as cotas regionais de IOPS padrão da conta da InterSystems para 600.000 a fim de possibilitar os testes com altas taxas de IO — especificamente, EBS — de volumes de Provisioned IOPS SSD (io2).
    • Lembre-se de revisar os limites antes de começar os testes, principalmente para os testes de espelhamento, já que todos os volumes na região são incluídos no mesmo total.

Tipos de volume do EBS

  • Os testes de IO foram realizados com o banco de dados do IRIS usando um único volume io2 Block Express do EBS e vários (16) volumes gp3 do EBS utilizando o Logical Volume Manager (LVM).
    • A taxa de IOPS de escrita, a taxa de transferência e a latência do banco de dados foram semelhantes nos testes de io2 Block Express e de gp3 LVM. A latência da escrita do banco de dados foi de aproximadamente 1 ms.
    • A latência de leitura do gp3 foi duas vezes maior que o io2 Block Express. No entanto, a latência de leitura máxima do gp3 ainda era aceitável a menos de 0,8 ms.
    • A latência de escrita do WIJ foi cerca de 50% mais alta em um único volume io2 Block Express do que em cinco volumes gp3 distribuídos do LVM.
    • Para detalhes sobre o io2 Block Express, confira https://aws.amazon.com/ebs/provisioned-iops/.
    • Para detalhes sobre o gp3, confira https://aws.amazon.com/ebs/general-purpose/.

Tipos de instância EC2

  • Durante o teste em julho de 2023, somente um tipo de instância EC2 otimizada para a memória (r5b) na região de Sydney usava o sistema nitro capaz de executar os volumes io2 Block Express.
    • O tipo de instância EC2 selecionado precisa ser capaz de corresponder ou exceder a IO e a taxa de transferência do armazenamento necessárias para os volumes de dados e WIJ.
    • Os únicos tipos de instâncias em Sydney que são compatíveis com o io2 Block Express são r5b e c7g. c7g não foi usado devido a menor IOPS e baixa memória.
    • O io2 Block Express é necessário para uma maior taxa de transferência e de IOPS (256.000 IOPS por volume) em comparação com o io2 padrão (64.000 IOPS por volume).
    • As instâncias EC2 capazes de usar o io2 Block Express não estão disponíveis em Melbourne no momento.

Testes

  • Os utilitários RANREAD e RANWRITE disponíveis para o público foram usados para simular o perfil de IO do IRIS. Por exemplo, o RANWRITE usa o ciclo de WD do IRIS, resultando em uma rajada de grandes IOs do WIJ e escritas aleatórias de bancos de dados que geralmente não são esperadas ou compreendidas pelos fornecedores de armazenamento.

Ambiente da AWS

O seguinte ambiente foi testado em ap-southeast-2 (Sydney). O mesmo tipo de instância foi usado para todos os testes, fazendo uma comparação equivalente.

Perfil de instância EC2

Tipo de instância EC2: 

  • R5b.24xlarge: 96 vCPU, 780 GB de memória, 25 Gbps de rede.
    • Limites do EBS por instância EC2
      • Taxa de transferência máxima de (MB/s) 7.500
      • Taxa de IOPS máxima de 260.000

O pacote de benchmark usa uma distribuição do LVM de 4 MB mesmo se houver um ou vários volumes. Todos os volumes usam o sistema de arquivo xfs.


Testes de benchmark

  • Para o teste 1 e 2, o WIJ está em um volume separado.
    • O WIJ e o banco de dados podem estar no mesmo volume para reduzir os custos de armazenamento.
    • No entanto, ter o WIJ em um volume separado isola o impacto do WIJ nas leituras do banco de dados.
    • O volume do diário é sempre separado dos volumes do WIJ e do banco de dados.

Teste 1 - io2 Block Express

Layout do armazenamento

  • Diário
    • Único volume gp3. Usei os valores padrão: 3.000 IOPS e taxa de transferência de 125 MB/s.
  • WIJ
    • Único volume io2 Block Express. 256.000 IOPS e taxa de transferência de 4.000 MB/s.
  • Banco de dados
    • Único volume io2 Block Express. 100.000 IOPS e taxa de transferência de 4.000 MB/s.

Teste 2 - distribuição de LVM gp3

Layout do armazenamento

  • Diário
    • Único volume gp3. Usei os valores padrão: 3.000 IOPS e taxa de transferência de 125 MB/s.
  • WIJ
    • Cinco volumes gp3. Cada um com 16.000 IOPS e taxa de transferência de 1.000 MB/s. Total de 80.000 IOPS e taxa de transferência de 5.000 MB/s.
  • Banco de dados
    • 16 volumes gp3. Cada um com 16.000 IOPS e taxa de transferência de 1.000 MB/s. Total de 256.000 IOPS e taxa de transferência de 16.000 MB/s.

Teste 3 - espelho de banco de dados assíncrono do IRIS - io2 Block Express

Foi criado um espelho do banco de dados com o membro espelho principal na zona b de disponibilidade da AWS e o membro espelho de backup na zona c de disponibilidade. O árbitro estava na zona de disponibilidade a.

  • A mesma taxa de IO de leitura/escrita foi executada como nos outros testes.

Layout do armazenamento

  • Devido à cota total de 600.000 IOPS em todos os volumes, o WIJ e o banco de dados estão no mesmo volume io2 Block Express. Isso permite um total de (256K + 256K) 512 IOPS em todos os espelhos.

  • Diário

    • Único volume gp3. Usei os valores padrão: 3.000 IOPS e taxa de transferência de 125 MB/s.
  • WIJ e banco de dados
    • Único volume io2 Block Express. 256.000 IOPS e taxa de transferência de 4.000 MB/s.

Observações

IO de leitura do banco de dados

O gráfico abaixo mostra um io2 Block Express com aproximadamente metade da latência como uma distribuição do LVM de volumes gp3. O andamento dos testes de benchmark é controlado usando vários processos, resultando na metade de IOPS e no dobro da latência. Um teste baseado em aplicativo pode oferecer resultados diferentes ou o andamento dos testes pode ser alterado para aumentar os processos e a taxa de IOPS resultante.

image

IO de escrita do banco de dados

O gráfico abaixo mostra um pico semelhante de IOPS e latência entre o io2 Block Express e uma distribuição do LVM de volumes gp3. A maior latência de escrita do banco de dados do espelho principal ocorre porque o WIJ está no mesmo volume. A maior latência é o WIJ. A latência de escrita do banco de dados aleatório foi semelhante ao io2 Block Express. A latência é medida para escritas diferentes de zero.

image

IO de escrita do WIJ

O gráfico abaixo mostra a maior taxa de transferência para uma distribuição do LVM de volumes gp3. No entanto, isso é enganoso, já que o volume io2 Block Express teve uma taxa de transferência mais alta e um tempo de escrita do WIJ menor. Investigações adicionais podem mostrar, por exemplo, mais IOs no volume io2 Block Express. A latência é medida para escritas diferentes de zero.

image

Taxa de transferência

A taxa de transferência é uma das métricas cobradas pela AWS e tem um limite para cada instância EC2 (10.000 MB/s) e cada volume do EBS (4.000 MB/s para io2 Block Express e 1.000 MB/s para gp3). Semelhante à forma como IOPS são monitoradas e restringidas pela AWS ao aumentar a latência. O gráfico a seguir mostra a taxa de transferência em kB/s. Os requisitos da taxa de transferência precisam ser conhecidos para garantir que o subprovisionamento dessa taxa não se torne um gargalo. A taxa de transferência do WIJ é mais alta do que a taxa de transferência provisionada por volume. Isso pode ocorrer, já que a AWS leva alguns segundos para registrar que está ocorrendo uma taxa de IOPS ou de transferência mais alta do que o provisionado antes de limitá-la.

image

As escritas do banco de dados afetam a latência de leitura do banco de dados.

O gráfico mostra as tendências. No entanto, surgem vários detalhes ao examinar as métricas de forma mais detalhada. Por exemplo, as escritas do banco de dados são afetadas por uma rajada de escritas no mesmo volume. As escritas de maior tamanho do WIJ têm um impacto mais significativo. Os padrões de IO dos diferentes tipos de volumes também são interessantes.

io2 Block Express

O seguinte gráfico mostra os aumentos escalonados no processo de leitura durante o teste de io2 Block Express. Observe a queda nas leituras quando o armazenamento precisa ler e escrever ao mesmo tempo.

image

O gráfico a seguir mostra os picos correspondentes na latência. Observe a taxa de IOPS de leitura suave no gráfico acima e a latência achatada abaixo.

image

Distribuição do LVM gp3

Os mesmos gráficos da distribuição do LVM dos discos gp3 mostram um padrão de IO menos estável (às vezes, chamado de "jitter") dos discos gp3.

image

Compare a latência de leitura da linha de base com a latência máxima para os diferentes tipos de volumes.

image


Outros detalhes

Configuração do IRIS

A versão do IRIS do teste foi "2023.2.0.204.0".

A configuração do IRIS foi mínima. É exibido abaixo um fragmento do arquivo cpf.

[config]
Asyncwij=16
:
globals=0,0,589824,0,0,0
:
wdparm=16,32,512,128
wduseasyncio=1
  • Asyncwij = 16 significa 16 escritas do WIJ em trânsito por vez. O padrão é oito.

O parâmetro wdparm é usado para configurar o número de daemons de escrita (WDs) escravos, o tamanho da tabela do ID do dispositivo (usado para atribuir escritas a WDs) e o número máximo de escritas pendentes em todos os WDs, além de determinar se o banco de dados ajustará ou não o número de escritas permitidas POR WD e se alguns WDs estão inativos ou serão encerrados mais cedo em uma determinada passagem.

16 = número de daemons de escrita (8 é o padrão)
32 = tamanho da tabela de ID do dispositivo (32 é o padrão)
512 = número máximo de IOs pendentes para todos os daemons de escrita
128 = número máximo de IOs pendentes por daemon de escrita


Tempo de ping das zonas de disponibilidade (AZ) da AWS no dia do teste de espelho

O espelho principal estava na AZ b; o de backup, na AZ c.

  • O ping da AZ b para AZ c foi uma média de 1,16 ms
  • O ping da AZ c para AZ b foi uma média de 1,12 ms
Discussão (0)1
Entre ou crie uma conta para continuar