Partilhar via


Criar um disco de referência

Aplica-se a: ✔️ VMs ✔️ Linux VMs ✔️ do Windows Conjuntos ✔️ de escala flexíveis Conjuntos de balanças uniformes

O benchmarking é o processo de simular diferentes cargas de trabalho em seu aplicativo e medir o desempenho do aplicativo para cada carga de trabalho. Usando as etapas descritas no artigo Projetando para alto desempenho, você reuniu os requisitos de desempenho do aplicativo. Ao executar ferramentas de benchmarking nas VMs que hospedam o aplicativo, você pode determinar os níveis de desempenho que seu aplicativo pode alcançar com SSDs premium. Neste artigo, fornecemos exemplos de benchmarking de uma VM Standard_D8ds_v4 provisionada com SSDs premium do Azure.

Usamos ferramentas comuns de benchmarking DiskSpd e FIO, para Windows e Linux, respectivamente. Essas ferramentas geram vários threads simulando uma produção como carga de trabalho e medem o desempenho do sistema. Usando as ferramentas, você também pode configurar parâmetros como tamanho do bloco e profundidade da fila, que normalmente não podem ser alterados para um aplicativo. Isso oferece mais flexibilidade para impulsionar o máximo desempenho em uma VM de alta escala provisionada com SSDs premium para diferentes tipos de cargas de trabalho de aplicativos. Para saber mais sobre cada ferramenta de benchmarking, visite DiskSpd e FIO.

Para seguir os exemplos abaixo, crie um Standard_D8ds_v4 e anexe quatro SSDs premium à VM. Dos quatro discos, configure três com cache de host como "Nenhum" e distribua-os em um volume chamado NoCacheWrites. Configure o cache do host como "ReadOnly" no disco restante e crie um volume chamado CacheReads com este disco. Usando essa configuração, você pode ver o desempenho máximo de leitura e gravação de uma Standard_D8ds_v4 VM. Para obter etapas detalhadas sobre como criar um Standard_D8ds_v4 com SSDs premium, consulte Projetando para alto desempenho.

Aquecer o cache

O disco com cache de host ReadOnly é capaz de fornecer IOPS mais altas do que o limite de disco. Para obter esse desempenho máximo de leitura do cache do host, primeiro você deve aquecer o cache deste disco. Isso garante que as E/S de leitura que a ferramenta de benchmarking direcionará no volume CacheReads realmente atinjam o cache, e não o disco diretamente. Os acertos de cache resultam em mais IOPS do disco habilitado para cache único.

Importante

Você deve aquecer o cache antes de executar benchmarks sempre que a VM for reinicializada.

DISKSPD

Baixe a ferramenta DISKSP na VM. DISKSPD é uma ferramenta que você pode personalizar para criar suas próprias cargas de trabalho sintéticas. Usaremos a mesma configuração descrita acima para executar testes de benchmarking. Você pode alterar as especificações para testar diferentes cargas de trabalho.

Neste exemplo, usamos o seguinte conjunto de parâmetros de linha de base:

  • -c200G: Cria (ou recria) o arquivo de exemplo usado no teste. Pode ser definido em bytes, KiB, MiB, GiB ou blocos. Nesse caso, um arquivo grande de arquivo de destino de 200 GiB é usado para minimizar o cache de memória.
  • -w100: Especifica a porcentagem de operações que são solicitações de gravação (-w0 é equivalente a 100% de leitura).
  • -b4K: Indica o tamanho do bloco em bytes, KiB, MiB ou GiB. Neste caso, o tamanho do bloco 4K é usado para simular um teste de E/S aleatório.
  • -F4: Define um total de quatro threads.
  • -r: Indica o teste de E/S aleatório (substitui o parâmetro -s).
  • -o128: Indica o número de solicitações de E/S pendentes por destino por thread. Isso também é conhecido como profundidade da fila. Neste caso, 128 é usado para estressar a CPU.
  • -W7200: Especifica a duração do tempo de aquecimento antes do início das medições.
  • -d30: Especifica a duração do teste, não incluindo o aquecimento.
  • -Sh: Desative o cache de gravação de software e hardware (equivalente a -Suw).

Para obter uma lista completa de parâmetros, consulte o repositório GitHub.

IOPS de gravação máxima

Usamos uma alta profundidade de fila de 128, um pequeno tamanho de bloco de 8 KB e quatro threads de trabalho para conduzir operações de gravação. Os trabalhadores de gravação estão direcionando o tráfego no volume "NoCacheWrites", que tem três discos com cache definido como "Nenhum".

Execute o seguinte comando durante 30 segundos de aquecimento e 30 segundos de medição:

diskspd -c200G -w100 -b8K -F4 -r -o128 -W30 -d30 -Sh testfile.dat

Os resultados mostram que a Standard_D8ds_v4 VM está entregando seu limite máximo de IOPS de gravação de 12.800.

Para 3208642560 total de bytes, total máximo de E/S de 391680, com um total de 101,97 MiB/s e um total de 13052,65 E/S por segundo.

IOPS de leitura máxima

Usamos uma alta profundidade de fila de 128, um pequeno tamanho de bloco de quatro KB e quatro threads de trabalho para conduzir operações de leitura. Os trabalhadores de leitura estão direcionando o tráfego no volume "CacheReads", que tem um disco com cache definido como "ReadOnly".

Execute o seguinte comando durante duas horas de aquecimento e 30 segundos de medição:

diskspd -c200G -b4K -F4 -r -o128 -W7200 -d30 -Sh testfile.dat

Os resultados mostram que a Standard_D8ds_v4 VM está entregando seu limite máximo de IOPS de leitura de 77.000.

Para 9652785152 bytes totais, havia 2356637 E/S totais, com 306,72 MiB/s totais, e um total de 78521,23 E/S por segundo.

Débito máximo

Para obter a taxa de transferência máxima de leitura e gravação, você pode alterar para um tamanho de bloco maior de 64 KB.

FIO

FIO é uma ferramenta popular para benchmark de armazenamento nas VMs Linux. Tem a flexibilidade de selecionar diferentes tamanhos de IO, leituras e gravações sequenciais ou aleatórias. Ele gera threads de trabalho ou processos para executar as operações de E/S especificadas. Você pode especificar o tipo de operações de E/S que cada thread de trabalho deve executar usando arquivos de trabalho. Criamos um arquivo de trabalho por cenário ilustrado nos exemplos abaixo. Você pode alterar as especificações nesses arquivos de trabalho para comparar diferentes cargas de trabalho em execução no Armazenamento Premium. Nos exemplos, estamos usando um Standard_D8ds_v4 executando o Ubuntu. Use a mesma configuração descrita no início da seção de benchmark e aqueça o cache antes de executar os testes de benchmark.

Antes de começar, baixe o FIO e instale-o em sua máquina virtual.

Execute o seguinte comando para o Ubuntu,

apt-get install fio

Usamos quatro threads de trabalho para conduzir operações de gravação e quatro threads de trabalho para conduzir operações de leitura nos discos. Os trabalhadores de gravação estão direcionando o tráfego no volume "nocache", que tem três discos com cache definido como "Nenhum". Os trabalhadores de leitura estão direcionando o tráfego no volume "readcache", que tem um disco com cache definido como "ReadOnly".

IOPS de gravação máxima

Crie o arquivo de trabalho com as seguintes especificações para obter o máximo de IOPS de gravação. Nomeie-o "fiowrite.ini".

[global]
size=30g
direct=1
iodepth=256
ioengine=libaio
bs=4k
numjobs=4

[writer1]
rw=randwrite
directory=/mnt/nocache

Observe as principais coisas a seguir que estão de acordo com as diretrizes de design discutidas nas seções anteriores. Estas especificações são essenciais para conduzir IOPS máximo,

  • Uma alta profundidade de fila de 256.
  • Um bloco pequeno de 4 KB.
  • Vários threads executando gravações aleatórias.

Execute o seguinte comando para iniciar o teste FIO por 30 segundos,

sudo fio --runtime 30 fiowrite.ini

Enquanto o teste é executado, você pode ver o número de IOPS de gravação que a VM e os discos Premium estão entregando. Conforme mostrado no exemplo abaixo, a Standard_D8ds_v4 VM está entregando seu limite máximo de IOPS de gravação de 12.800 IOPS.
O número de IOPS de gravação que VM e SSDs premium estão entregando, mostra que as gravações são 13.1k IOPS.

IOPS de leitura máxima

Crie o arquivo de trabalho com as seguintes especificações para obter o máximo de IOPS de leitura. Nomeie-o "fioread.ini".

[global]
size=30g
direct=1
iodepth=256
ioengine=libaio
bs=4k
numjobs=4

[reader1]
rw=randread
directory=/mnt/readcache

Observe as principais coisas a seguir que estão de acordo com as diretrizes de design discutidas nas seções anteriores. Estas especificações são essenciais para conduzir IOPS máximo,

  • Uma alta profundidade de fila de 256.
  • Um bloco pequeno de 4 KB.
  • Vários threads executando gravações aleatórias.

Execute o seguinte comando para iniciar o teste FIO por 30 segundos,

sudo fio --runtime 30 fioread.ini

Enquanto o teste é executado, você pode ver o número de IOPS de leitura que a VM e os discos Premium estão entregando. Conforme mostrado no exemplo abaixo, a Standard_D8ds_v4 VM está entregando mais de 77.000 IOPS de leitura. Esta é uma combinação do desempenho do disco e do cache.
Captura de tela do número de IOPS de gravação VM e SSDs premium estão entregando, mostra que as leituras são 78.6k.

IOPS máximo de leitura e gravação

Crie o arquivo de trabalho com as seguintes especificações para obter o máximo de IOPS de leitura e gravação combinadas. Nomeie-o "fioreadwrite.ini".

[global]
size=30g
direct=1
iodepth=128
ioengine=libaio
bs=4k
numjobs=4

[reader1]
rw=randread
directory=/mnt/readcache

[writer1]
rw=randwrite
directory=/mnt/nocache
rate_iops=3200

Observe as principais coisas a seguir que estão de acordo com as diretrizes de design discutidas nas seções anteriores. Estas especificações são essenciais para conduzir IOPS máximo,

  • Uma alta profundidade de fila de 128.
  • Um bloco pequeno de 4 KB.
  • Vários threads executando leituras e gravações aleatórias.

Execute o seguinte comando para iniciar o teste FIO por 30 segundos,

sudo fio --runtime 30 fioreadwrite.ini

Enquanto o teste é executado, você pode ver o número de IOPS de leitura e gravação combinadas que a VM e os discos Premium estão oferecendo. Conforme mostrado no exemplo abaixo, a Standard_D8ds_v4 VM está oferecendo mais de 90.000 IOPS de leitura e gravação combinadas. Esta é uma combinação do desempenho do disco e do cache.
IOPS de leitura e gravação combinadas, mostra que as leituras são 78,3k e as gravações são 12,6k IOPS.

Rendimento combinado máximo

Para obter a taxa de transferência máxima combinada de leitura e gravação, use um tamanho de bloco maior e uma grande profundidade de fila com vários threads executando leituras e gravações. Você pode usar um tamanho de bloco de 64 KB e profundidade de fila de 128.

Próximos passos

Prossiga para o nosso artigo sobre design para alto desempenho.

Nesse artigo, você cria uma lista de verificação semelhante ao seu aplicativo existente para o protótipo. Usando ferramentas de benchmarking, você pode simular as cargas de trabalho e medir o desempenho no aplicativo protótipo. Ao fazer isso, você pode determinar qual oferta de disco pode corresponder ou superar os requisitos de desempenho do aplicativo. Em seguida, você pode implementar as mesmas diretrizes para seu aplicativo de produção.