Submeter um disco a benchmark
Aplica-se a: ✔️ VMs do Linux ✔️ VMs do Windows ✔️ Conjuntos de dimensionamento flexíveis ✔️ Conjuntos de dimensionamento uniformes
Os parâmetros de comparação são o processo de simular diferentes cargas de trabalho no aplicativo e avaliar o desempenho do aplicativo para cada carga de trabalho. Usando as etapas descritas no artigo Projeto para alto desempenho, você reuniu os requisitos de desempenho do aplicativo. Ao executar ferramentas de parâmetros de comparação nas VMs que hospedam o aplicativo, você poderá determinar os níveis de desempenho que o aplicativo pode atingir com SSDs Premium. Neste artigo, forneceremos exemplos de parâmetros de comparação de uma VM Standard_D8ds_v4 provisionada com SSDs Premium do Azure.
Usamos ferramentas comuns de parâmetro de comparação DiskSpd e FIO, para Windows e Linux, respectivamente. Essas ferramentas geram vários threads que simulam uma carga de trabalho parecida com uma produção e avaliam o desempenho do sistema. Usando as ferramentas, você pode configurar parâmetros como tamanho do bloco e profundidade da fila, que normalmente você não pode mudar para um aplicativo. Isso proporciona mais flexibilidade para impulsionar o desempenho máximo em uma VM de alta escala provisionada com os SSDs Premium para diferentes tipos de cargas de trabalho de aplicativo. Para saber mais sobre cada ferramenta de parâmetro de comparação, acesse 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 deles com cache de host como "None" e distribua-os em um volume chamado NoCacheWrites. Configure o cache de host como "ReadOnly" no disco restante e crie um volume chamado CacheReads com esse disco. Usando essa configuração, você pode ver o desempenho máximo de Leitura e Gravação de uma VM Standard_D8ds_v4. Para obter etapas detalhadas sobre como criar uma VM Standard_D8ds_v4 com SSDs premium, acesse Projeto para alto desempenho.
Aquecimento do cache
O disco com o cache de host ReadOnly é capaz de oferecer IOPS maior do que o limite do disco. Para atingir esse desempenho máximo de leitura do cache de host, primeiramente você deve aquecer o cache desse disco. Isso faz com que as E/S de leitura que a ferramenta de parâmetros de comparação impulsionará no volume CacheReads realmente alcancem o cache, não o disco diretamente. Os acertos no cache resultam mais IOPS do único disco habilitado para cache.
Importante
Você deve aquecer o cache antes de executar os parâmetros de comparação, toda vez que a VM é reinicializada.
DISKSPD
Baixe a ferramenta DISKSP na VM. O 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 parâmetro de comparação. Você pode alterar as especificações para testar cargas de trabalho diferentes.
Neste exemplo, usamos o seguinte conjunto de parâmetros de linha de base:
- -c200G: cria (ou recria) o arquivo de exemplo usado no teste. Ele pode ser definido em bytes, KiB, MiB, GiB ou blocos. Nesse caso, um arquivo grande do arquivo de destino 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. Nesse caso, o tamanho do bloco de 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 de fila. Nesse caso, 128 é usado para enfatizar a CPU.
- -W7200: especifica a duração do tempo de atividade antes do início das medições.
- -D30: especifica a duração do teste, sem incluir o aquecimento.
- -Sh: desabilitar o cache de gravação de software e hardware (equivalente a-Suw).
Para obter uma lista completa de parâmetro, consulte o repositório do GitHub.
IOPS máxima de gravação
Usamos uma profundidade de fila alta de 128, um tamanho de bloco pequeno de 8 KB e quatro threads de trabalho para conduzir operações de gravação. Os trabalhos de gravação orientam o tráfego no volume "NoCacheWrites", que tem três discos com o cache definido como "None".
Execute o seguinte comando para 30 segundos de execução e 30 segundos de medida:
diskspd -c200G -w100 -b8K -F4 -r -o128 -W30 -d30 -Sh testfile.dat
Os resultados mostram que a VM Standard_D8ds_v4 está fornecendo seu limite máximo de IOPS de gravação de 12.800.
IOPS máxima de leitura
Usamos uma profundidade de fila alta de 128, um tamanho de bloco pequeno de quatro KB e quatro threads de trabalho para conduzir operações Leitura. Os trabalhos de leitura orientam o tráfego no volume "CacheReads", que tem um disco com o cache definido como "ReadOnly".
Execute o seguinte comando para duas horas de execução e 30 segundos de medida:
diskspd -c200G -b4K -F4 -r -o128 -W7200 -d30 -Sh testfile.dat
Os resultados mostram que a VM Standard_D8ds_v4 está fornecendo seu limite máximo de IOPS de leitura de 77.000.
Taxa de transferência máxima
Para obter a taxa de transferência máxima de leitura e gravação, você pode mudar para um tamanho de bloco maior de 64 KB.
FIO
FIO é uma ferramenta popular para o armazenamento de parâmetros de comparação em VMs Linux. Ela tem a flexibilidade para selecionar diferentes tamanhos de E/S, leituras e gravações sequenciais ou aleatórias. Ela gera threads ou processos de trabalho para executar as operações de E/S especificadas. Você pode especificar o tipo de operação 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. É possível 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 parâmetros de comparação e aqueça o cache antes de executar os testes de parâmetros de comparação.
Antes de começar, baixe o FIO e instale-o em sua máquina virtual.
Execute o comando a seguir para o Ubuntu,
apt-get install fio
Usamos quatro threads de trabalho para impulsionar operações de gravação e quatro threads de trabalho para impulsionar operações de leitura nos discos. Os trabalhos de gravação estão orientando o tráfego no volume "nocache", que tem três discos com o cache definido como "None". Os trabalhos de leitura orientando o tráfego no volume "readcache", que tem um disco com o cache definido como "ReadOnly".
IOPS máxima de gravação
Crie o arquivo de trabalho com as especificações a seguir para obter IOPS máxima de gravação. Dê o nome de "fiowrite.ini".
[global]
size=30g
direct=1
iodepth=256
ioengine=libaio
bs=4k
numjobs=4
[writer1]
rw=randwrite
directory=/mnt/nocache
Observe os itens importantes a seguir que estão de acordo com as diretrizes de projeto abordadas nas seções anteriores. Estas especificações são essenciais para impulsionar a IOPS máxima:
- Uma profundidade de fila alta de 256.
- Um tamanho de bloco pequeno de 4 KB.
- Vários threads que executam 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 fornecido pela VM e pelos discos Premium. Como mostrado no exemplo abaixo, a Standard_D8ds_v4 está fornecendo seu limite máximo de IOPS de gravação, isto é, 12.800 IOPS.
IOPS máxima de leitura
Crie o arquivo de trabalho com as especificações a seguir para obter IOPS máxima de leitura. Dê o nome de "fioread.ini".
[global]
size=30g
direct=1
iodepth=256
ioengine=libaio
bs=4k
numjobs=4
[reader1]
rw=randread
directory=/mnt/readcache
Observe os itens importantes a seguir que estão de acordo com as diretrizes de projeto abordadas nas seções anteriores. Estas especificações são essenciais para impulsionar a IOPS máxima:
- Uma profundidade de fila alta de 256.
- Um tamanho de bloco pequeno de 4 KB.
- Vários threads que executam 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 fornecido pela VM e pelos discos Premium. Conforme mostrado no exemplo abaixo, a Standard_D8ds_v4 está fornecendo mais de 77.000 IOPS de leitura. Essa é uma combinação do desempenho do cache e do disco.
IOPS máxima de leitura e gravação
Crie o arquivo de trabalho com as especificações a seguir para obter a IOPS Máxima de Leitura e Gravação. Dê o nome de "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 os itens importantes a seguir que estão de acordo com as diretrizes de projeto abordadas nas seções anteriores. Estas especificações são essenciais para impulsionar a IOPS máxima:
- Uma profundidade alta de fila de 128.
- Um tamanho de bloco pequeno de 4 KB.
- Vários threads que executam 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 fornecido pela VM e pelos discos Premium. Como mostrado no exemplo abaixo, a Standard_D8ds_v4 está fornecendo mais de 90.000 IOPS de leitura e gravação combinadas. Essa é uma combinação do desempenho do cache e do disco.
Taxa de transferência máxima combinada
Para atingir a Taxa de Transferência máxima de Leitura e Gravação combinadas, use um tamanho de bloco maior e uma profundidade de fila grande com vários threads executando leituras e gravações. É possível usar um tamanho de bloco de 64 KB e uma profundidade de fila de 128.
Próximas etapas
Confira nosso artigo sobre Projeto para alto desempenho.
Nele, você criará uma lista de verificação semelhante para o aplicativo existente do protótipo. Usando ferramentas de Benchmark, você pode simular as cargas de trabalho e avaliar o desempenho no aplicativo do protótipo. Com isso, será possível determinar qual oferta de disco pode corresponder ou superar os requisitos de desempenho do aplicativo. Em seguida, você pode implementar as mesmas diretrizes para o aplicativo de produção.