Neste documento, descrevemos como comparar o desempenho do Persistent Disk em máquinas virtuais (VMs) do Linux. Para VMs do Windows, consulte Comparar o desempenho do Persistent Disk em uma VM do Windows.
Para comparar o desempenho do Persistent Disk, use o Testador de E/S flexível (FIO)
em vez de outras ferramentas de comparação de disco, como o dd
.
Por padrão, dd
usa uma profundidade de fila de E/S muito baixa e pode não testar com precisão
o desempenho do disco. Em geral, evite usar dispositivos especiais como
/dev/urandom
, /dev/random
e /dev/zero
nas comparações de desempenho
do Persistent Disk.
Para medir o IOPS e a capacidade de processamento de um disco em uso em uma instância em execução, compare o sistema de arquivos com a configuração pretendida. Use essa opção para testar uma carga de trabalho realista sem perder o conteúdo do disco existente. Quando você compara o sistema de arquivos em um disco existente, há muitos fatores específicos para seu ambiente de desenvolvimento que podem afetar os resultados do comparativo de mercado, e talvez você não atinja os limites de desempenho do disco.
Para medir o desempenho bruto de um disco permanente, faça comparações diretas com o dispositivo em bloco. Use essa opção para comparar o desempenho do disco bruto com os limites de desempenho do disco.
Os comandos a seguir funcionam com sistemas operacionais Debian ou Ubuntu com o gerenciador de pacotes apt
.
Comparativo de IOPS e capacidade de um disco em uma instância em execução
Se você quiser medir as IOPS e a capacidade de uma carga de trabalho realista em um disco ativo em uma instância em execução sem perder o conteúdo do disco, compare-o com um novo diretório no sistema de arquivos atual.
Instale as dependências:
sudo apt update sudo apt install -y fio
No terminal, liste os discos anexados à VM e encontre o disco que você quer testar. Se o disco permanente ainda não estiver formatado, formate e ative o disco.
sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 10G 0 disk └─sda1 8:1 0 10G 0 part / sdb 8:32 0 2.5T 0 disk /mnt/disks/mnt_dir
Neste exemplo, testamos um disco permanente SSD de 2.500 GB com o código do dispositivo
sdb
.Crie um novo diretório,
fiotest
, no disco. Neste exemplo, o disco é ativado em/mnt/disks/mnt_dir
:TEST_DIR=/mnt/disks/mnt_dir/fiotest sudo mkdir -p $TEST_DIR
Teste a capacidade de gravação realizando gravações sequenciais com vários streams paralelos (16+), usando um tamanho de bloco de E/S de 1 MB e uma profundidade de E/S de pelo menos 64:
sudo fio --name=write_throughput --directory=$TEST_DIR --numjobs=16 \ --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --group_reporting=1 --iodepth_batch_submit=64 \ --iodepth_batch_complete_max=64
Teste as IOPS de gravação executando gravações aleatórias, usando um tamanho de bloco de E/S de 4 KB e uma profundidade de E/S de pelo menos 256:
sudo fio --name=write_iops --directory=$TEST_DIR --size=10G \ --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 \ --verify=0 --bs=4K --iodepth=256 --rw=randwrite --group_reporting=1 \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256
Teste a capacidade de leitura executando leituras sequenciais com vários streams paralelos (16+), usando um tamanho de bloco de E/S de 1 MB e uma profundidade de E/S de pelo menos 64:
sudo fio --name=read_throughput --directory=$TEST_DIR --numjobs=16 \ --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --group_reporting=1 \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Teste as IOPS de leitura executando leituras aleatórias, usando um tamanho de bloco de E/S de 4 KB e uma profundidade de E/S de pelo menos 256:
sudo fio --name=read_iops --directory=$TEST_DIR --size=10G \ --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 \ --verify=0 --bs=4K --iodepth=256 --rw=randread --group_reporting=1 \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256
Limpeza:
sudo rm $TEST_DIR/write* $TEST_DIR/read*
Comparativo do desempenho do disco permanente bruto
Se você quiser medir o desempenho de discos permanentes sozinhos fora do ambiente de desenvolvimento, teste o desempenho de leitura e gravação de um dispositivo de bloco em um disco permanente descartável e VM.
Os comandos a seguir pressupõem um disco permanente SSD de 2.500 GB anexado à VM. Se o tamanho do dispositivo for
diferente, modifique o valor do argumento --filesize
. Esse tamanho de disco é necessário para alcançar os limites de capacidade da VM de 32 vCPUs. Para mais informações, consulte Desempenho do armazenamento em blocos.
Adicione um Persistent Disk à instância de VM que você pretende comparar.
Instale as dependências:
sudo apt-get update sudo apt-get install -y fio
Preencha o disco com dados diferentes de zero. As leituras de disco permanente em blocos vazios têm um perfil de latência diferente dos que contêm dados. Recomendamos que você preencha o disco antes de executar qualquer comparação de latência de leitura.
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --name=fill_disk \ --filename=/dev/sdb --filesize=2500G \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=128K --iodepth=64 --rw=randwrite \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Teste a largura de banda de gravação ao executar gravações sequenciais com vários streams paralelos (16 ou mais). Eles precisam ter 1 MB como tamanho de E/S e uma profundidade de E/S igual ou superior a 64.
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --name=write_bandwidth_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=1M --iodepth=64 --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --rw=write --numjobs=16 --offset_increment=100G
Teste as IOPS de gravação. Para alcançar o limite de IOPS do DP, é importante manter uma fila profunda de E/S. Por exemplo, quando a latência de gravação for de 1 milissegundo, a VM poderá ter no máximo 1.000 IOPS para cada E/S em execução. Para alcançar 15.000 IOPS de gravação, a VM terá que manter pelo menos 15 E/S em execução. Se o disco e a VM conseguirem 30.000 IOPS de gravação, o número de E/Ss em execução precisará ser de pelo menos 30 E/S. Quando o tamanho da E/S for maior do que 4 KB, a VM poderá alcançar o limite de largura de banda antes de alcançar o de IOPS.
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --name=write_iops_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256
Teste a latência de gravação. Durante o teste da latência de E/S, é importante que a VM não alcance o limite de largura de banda ou de IOPS. Caso contrário, a latência de E/S real do disco permanente não será refletida. Por exemplo, se o limite de IOPS for alcançado em uma profundidade de E/S de 30, e o comando
fio
tiver o dobro disso, o total de IOPS permanecerá igual, e a latência de E/S relatada dobrará.# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --name=write_latency_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=4 --rw=randwrite --iodepth_batch_submit=4 \ --iodepth_batch_complete_max=4
Teste a largura de banda de leitura ao executar leituras sequenciais com vários streams paralelos (16 ou mais). Eles precisam ter 1 MB como tamanho de E/S e uma profundidade de E/S igual ou superior a 64.
sudo fio --name=read_bandwidth_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=1M --iodepth=64 --rw=read --numjobs=16 --offset_increment=100G \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Teste as IOPS de leitura. Para alcançar o limite de IOPS do DP, é importante manter uma fila profunda de E/S. Por exemplo, se o tamanho de E/S for maior do que 4 KB, a VM poderá alcançar o limite de largura de banda antes de alcançar o de IOPS. Para alcançar o máximo de 100 mil IOPS de leitura, especifique
--iodepth=256
para este teste.sudo fio --name=read_iops_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256
Teste a latência de leitura. É importante preencher o disco com dados para receber uma medição de latência realista. É importante que a VM não atinja os limites de IOPS ou de capacidade durante este teste, porque após o disco permanente atingir o limite de saturação, ele retornará as E/Ss recebidas, o que se refletirá como um aumento artificial na latência de E/S.
sudo fio --name=read_latency_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=4 --rw=randread \ --iodepth_batch_submit=4 --iodepth_batch_complete_max=4
Teste a largura de banda de leitura sequencial.
sudo fio --name=read_bandwidth_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --numjobs=4 --thread --offset_increment=500G \ --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Teste a largura de banda de gravação sequencial.
sudo fio --name=write_bandwidth_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --numjobs=4 --thread --offset_increment=500G \ --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Limpe o disco permanente descartável e a VM:
- Exclua o disco usado para comparar o desempenho.
- Exclua a VM criada para a comparação do desempenho.
A seguir
- Saiba como monitorar o desempenho do disco analisando as métricas de desempenho do disco permanente.
- Saiba mais sobre preços de discos permanentes
- Saiba como otimizar o desempenho do Persistent Disk.