Para comparar o desempenho do Google Cloud Hyperdisk,
use o Flexible I/O tester (FIO)
em vez de outras ferramentas de comparação de discos, como o dd.
Por predefinição, o dd usa uma profundidade da fila de E/S muito baixa, pelo que é difícil garantir que a referência está a gerar um número suficiente de bytes e operações de E/S para testar com precisão o desempenho do disco.
Além disso, os dispositivos especiais usados com o dd são frequentemente muito lentos e não refletem com precisão o desempenho do disco. Em geral, evite usar dispositivos especiais, como /dev/urandom, /dev/random e /dev/zero, nas suas referências de desempenho do Hyperdisk.
Para medir os IOPS e o débito de um disco em utilização numa instância em execução, teste o desempenho do sistema de ficheiros com a configuração pretendida. Use esta opção para testar uma carga de trabalho realista sem perder o conteúdo do disco existente. Tenha em atenção que, quando compara o desempenho do sistema de ficheiros num disco existente, existem muitos fatores específicos do seu ambiente de desenvolvimento que podem afetar os resultados da comparação do desempenho e pode não atingir os limites de desempenho do disco.
Para medir o desempenho não processado de um Hyperdisk, faça testes de referência do dispositivo de blocos diretamente. Use esta opção para comparar o desempenho do disco não processado com os limites de desempenho do Hyperdisk.
Os seguintes comandos funcionam com sistemas operativos Debian ou Ubuntu com o gestor de pacotes apt.
Testes de referência de IOPS e débito de um disco numa instância em execução
Se quiser medir as IOPS e a taxa de transferência para uma carga de trabalho realista num disco ativo numa instância de VM em execução sem perder o conteúdo do disco, faça um teste de benchmark em relação a um novo diretório no sistema de ficheiros existente.
Prepare-se para os testes
Instalar dependências:
sudo apt update sudo apt install -y fioSe o volume do Hyperdisk ainda não estiver formatado, formate e monte o disco.
No terminal, liste os discos anexados à sua VM e encontre o disco que quer testar.
sudo lsblkO comando anterior produz um resultado semelhante ao seguinte:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 10G 0 disk ├─nvme0n1p1 259:1 0 9.9G 0 part / ├─nvme0n1p14 259:2 0 4M 0 part └─nvme0n1p15 259:3 0 106M 0 part /boot/efi nvme0n2 259:4 0 3.4T 0 disk
Neste exemplo, estamos a testar um volume Hyperdisk Extreme de 3500 GiB com o nome do dispositivo
nvme0n2.Crie um novo diretório,
fiotest, no disco. Neste exemplo, o disco está montado em/mnt/disks/mnt_dir:TEST_DIR=/mnt/disks/mnt_dir/fiotest sudo mkdir -p $TEST_DIRSe a VM usar a interface de disco NVMe para a associação do volume Hyperdisk (se o nome do disco não processado tiver o prefixo
nvme), execute os passos seguintes para obter o número de nós NUMA disponíveis para a VM.A estratégia de testes de referência para discos NVMe difere para VMs com apenas um nó NUMA e VMs com mais de um nó NUMA. Quando testa o desempenho do Hyperdisk através da interface de disco NVMe, são alocados apenas 256 tamanhos de filas NVMe por fila. Devido aos tamanhos das filas NVMe limitados disponíveis e à potencial contenção proveniente dos outros discos anexados à mesma VM, estes testes de benchmark usam duas filas de discos NVMe para manter um tamanho da fila agregado capaz de processar a profundidade de E/S de 256.
Obtenha o número de nós NUMA.
lscpu | grep -i 'numa node(s)' | awk '{print $NF}'Se a VM tiver apenas 1 nó NUMA, obtenha o mapeamento da fila CPU para NVMe. Vai usar estas informações mais tarde para o parâmetro
--cpus-allowed.QUEUE_1_CPUS=$(cat /sys/class/block/nvme0n2/mq/*/cpu_list | sed -n 1p | tr -d " \t") QUEUE_2_CPUS=$(cat /sys/class/block/nvme0n2/mq/*/cpu_list | sed -n 2p | tr -d " \t")
Testar a taxa de gravações
Teste a taxa de transferência de gravação realizando gravações sequenciais com vários fluxos paralelos (mais de 16), usando um tamanho de bloco de E/S de 1 MB e uma profundidade de E/S de, pelo menos, 64.
Se o volume do Hyperdisk usar a interface SCSI:
sudo fio --directory=$TEST_DIR \ --numjobs=16 --size=10G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --name=write_throughput
Se o volume do Hyperdisk usar a interface NVMe:
Se a VM tiver apenas um nó NUMA, use o seguinte comando:
sudo fio --directory=$TEST_DIR --numjobs=8 \ --size=10G --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --cpus_allowed_policy=split \ --group_reporting \ --name=write_throughput --cpus_allowed=$QUEUE_1_CPUS \ --name=write_throughput_2 --cpus_allowed=$QUEUE_2_CPUS
Se a VM tiver mais do que um nó NUMA, use o seguinte comando:
sudo fio --directory=$TEST_DIR --numjobs=8 \ --size=10G --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --group_reporting \ --name=write_throughput --numa_cpu_nodes=0 \ --name=write_throughput_2 --numa_cpu_nodes=1
IOPS de gravação de teste
Teste as IOPS de escrita realizando escritas aleatórias, usando um tamanho de bloco de E/S de 4 KB e uma profundidade de E/S de, pelo menos, 256.
Se o volume do Hyperdisk estiver associado através da interface SCSI:
sudo fio --directory=$TEST_DIR \ --numjobs=16 --size=10G -time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --name=write_iops
Se o volume do Hyperdisk usar a interface NVMe:
Se a VM tiver apenas um nó NUMA, use o seguinte comando:
sudo fio --directory=$TEST_DIR --numjobs=8 \ --size=10G --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --cpus_allowed_policy=split \ --group_reporting \ --name=write_iops --cpus_allowed=$QUEUE_1_CPUS \ --name=write_iops_2 --cpus_allowed=$QUEUE_2_CPUS
Se a VM tiver mais do que um nó NUMA, use o seguinte comando:
sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --group_reporting \ --name=write_iops --numa_cpu_nodes=0 \ --name=write_iops_2 --numa_cpu_nodes=1
Teste a taxa de transferência de leitura
Teste a taxa de transferência de leitura executando leituras sequenciais com vários fluxos paralelos (mais de 16), usando um tamanho de bloco de E/S de 1 MB e uma profundidade de E/S de, pelo menos, 64.
Se o volume do Hyperdisk usar a interface SCSI:
sudo fio --directory=$TEST_DIR \ --numjobs=16 --size=10G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --name=read_throughput
Se o volume do Hyperdisk usar a interface NVMe:
Se a VM tiver apenas um nó NUMA, use o seguinte comando:
sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --cpus_allowed_policy=split \ --group_reporting \ --name=read_throughput --cpus_allowed=$QUEUE_1_CPUS \ --name=read_throughput_2 --cpus_allowed=$QUEUE_2_CPUS
Se a VM tiver mais do que um nó NUMA, use o seguinte comando:
sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --group_reporting \ --name=read_throughput --numa_cpu_nodes=0 \ --name=read_throughput_2 --numa_cpu_nodes=1
IOPS de leitura de teste
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.
Se o volume do Hyperdisk usar a interface SCSI:
sudo fio --directory=$TEST_DIR \ --numjobs=16 --size=10G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --name=read_iops
Se o volume do Hyperdisk usar a interface NVMe:
Se a VM tiver apenas um nó NUMA, use o seguinte comando:
sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --cpus_allowed_policy=split \ --group_reporting \ --name=read_iops --cpus_allowed=$QUEUE_1_CPUS \ --name=read_iops_2 --cpus_allowed=$QUEUE_2_CPUS
Se a VM tiver mais do que um nó NUMA, use o seguinte comando:
sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --group_reporting \ --name=read_iops --numa_cpu_nodes=0 \ --name=read_iops_2 --numa_cpu_nodes=1
Limpar
Remova os diretórios de teste.
sudo rm $TEST_DIR/write* $TEST_DIR/read*
Testes de referência de IOPS e débito para o Hyperdisk Extreme em VMs C3
O Google Cloud Hyperdisk Extreme oferece um desempenho superior em VMs C3 com 176 vCPUs. Para alcançar os limites de desempenho mais elevados, tem de associar vários volumes Hyperdisk Extreme à VM.
Para medir as E/S por segundo (IOPS) ou a taxa de transferência para uma carga de trabalho realista em discos ativos numa VM C3 em execução sem perder o conteúdo dos discos de dados existentes, faça testes de referência em relação a um novo diretório no sistema de ficheiros existente e anexe novos volumes Hyperdisk Extreme à VM para as tarefas de testes de referência.
Para discos anexados com a interface NVMe, recomenda-se que distribua a carga de trabalho de E/S por todas as filas NVMe disponíveis para a VM. Isto maximiza o desempenho do volume do Hyperdisk. Nas VMs C3 com 176 vCPUs, existem quatro nós NUMA mapeados individualmente para quatro filas NVMe. Esta associação é assumida para os testes de referência nesta secção.
Prepare-se para os testes
Adicione novos discos Hyperdisk Extreme à sua VM, e consulte os limites de desempenho do Hyperdisk para determinar a configuração do disco necessária para o desempenho pretendido.
Associe-se à sua instância:
Instalar dependências:
sudo apt update sudo apt install -y fioListe os discos associados à sua VM e encontre o disco que quer testar.
sudo lsblkO comando anterior produz um resultado semelhante ao seguinte:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 10G 0 disk ├─nvme0n1p1 259:1 0 9.9G 0 part / ├─nvme0n1p14 259:2 0 4M 0 part └─nvme0n1p15 259:3 0 106M 0 part /boot/efi nvme0n2 259:4 0 2.5T 0 disk nvme0n3 259:5 0 2.5T 0 disk nvme0n4 259:6 0 2.5T 0 disk
Neste exemplo, estamos a testar o desempenho do Google Cloud Hyperdisk em três volumes Hyperdisk Extreme de 2500 GiB com dispositivos denominados
nvme0n2,nvme0n3envme0n4.
Teste de débito do Hyperdisk Extreme no C3
Esta secção mostra como realizar testes de referência do débito de leitura e gravação para discos Hyperdisk Extreme.
Preparação para testes
Antes de começar a realizar testes de referência do desempenho dos discos Hyperdisk Extreme associados a uma VM C3 com 176 vCPUs, conclua os seguintes passos.
Crie um novo diretório,
fiotest, no seu sistema operativo. Neste exemplo, o diretório raiz é/mnt/disks/mnt_dir:TEST_DIR=/mnt/disks/mnt_dir/fiotest sudo mkdir -p $TEST_DIRUma vez que a VM requer mais do que um disco para atingir os níveis de desempenho mais elevados, para simplificar, execute o RAID 0 em todos os volumes Hyperdisk anexados. Isto facilita a distribuição uniforme dos dados por vários volumes do Hyperdisk.
Neste exemplo, o RAID 0 é o desempenho em três volumes do Hyperdisk Extreme anexados à VM C3.
sudo mdadm --create /dev/md0 --level=0 --raid-devices=3 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4
Formate e monte o volume RAID
/dev/md0.
Testar a taxa de gravações
Teste a taxa de transferência de escrita executando escritas sequenciais com várias streams paralelas (pelo menos 16), usando um tamanho de bloco de E/S de 1 MiB e uma profundidade de E/S total de, pelo menos, 32 por fila NVMe.
# Running this command causes data loss on the targeted file on the device. # We strongly recommend using a throwaway disk. sudo fio --name=global --group_reporting=1 --filesize=1024G \ --filename=$TEST_DIR/fiotestfile --numjobs=4 --size=64G \ --offset_increment=64G --time_based --runtime=5m \ --ramp_time=10s --ioengine=libaio --direct=1 --verify=0 \ --bs=1M --iodepth=8 --rw=write \ --name=write_throughput --numa_cpu_nodes=0 \ --name=write_throughput_1 --numa_cpu_nodes=1 \ --name=write_throughput_2 --numa_cpu_nodes=2 \ --name=write_throughput_3 --numa_cpu_nodes=3
Teste a taxa de transferência de leitura
Teste a taxa de transferência de leitura executando leituras sequenciais com várias streams paralelas (pelo menos 16), usando um tamanho de bloco de E/S de 1 MiB e uma profundidade de E/S total de, pelo menos, 32 por fila NVMe.
sudo fio --name=global --group_reporting=1 --filesize=1024G \ --filename=$TEST_DIR/fiotestfile --numjobs=4 --size=64G \ --offset_increment=64G --time_based --runtime=5m \ --ramp_time=10s --ioengine=libaio --direct=1 \ --verify=0 --bs=1M --iodepth=8 --rw=read \ --name=read_throughput --numa_cpu_nodes=0 \ --name=read_throughput_1 --numa_cpu_nodes=1 \ --name=read_throughput_2 --numa_cpu_nodes=2 \ --name=read_throughput_3 --numa_cpu_nodes=3
Teste de referência de IOPS do Hyperdisk Extreme no C3
Para realizar testes de referência para o desempenho de I/O por segundo (IOPS), recomendamos que execute operações de I/O pequenas paralelas diretamente para ou a partir de discos não processados (sem RAID).
IOPS de gravação de teste
Teste as IOPS de escrita executando escritas aleatórias, usando um tamanho de bloco de E/S de 4 KiB e uma profundidade de E/S de, pelo menos, 256, usando, pelo menos, 2 filas NVMe.
# Running this command causes data loss on the targeted device. # We strongly recommend using a throwaway disk. sudo fio --name=global --group_reporting=1 \ --directory=/ --bs=4K --direct=1 \ --filesize=512G --iodepth=256 \ --iodepth_batch_complete_max=256 --iodepth_batch_submit=256 \ --ioengine=libaio --numjobs=5 --ramp_time=10s \ --randrepeat=0 --runtime=5m --rw=randwrite \ --time_based=1 --verify=0 \ --name=write_iops_test --filename=/dev/nvme0n2 --numa_cpu_nodes=0 \ --name=write_iops_test_1 --filename=/dev/nvme0n3 --numa_cpu_nodes=1 \ --name=write_iops_test_2 --filename=/dev/nvme0n4 --numa_cpu_nodes=2
IOPS de leitura de teste
Teste as IOPS de leitura fazendo leituras aleatórias, usando um tamanho de bloco de E/S de 4 KiB e uma profundidade de E/S de, pelo menos, 256, usando, pelo menos, 2 filas NVMe.
sudo fio --name=global --group_reporting=1 --directory=/ \ --bs=4K --direct=1 --filesize=512G --iodepth=256 \ --iodepth_batch_complete_max=256 --iodepth_batch_submit=256 \ --ioengine=libaio --numjobs=5 --ramp_time=10s \ --randrepeat=0 --runtime=5m --rw=randread \ --time_based=1 --verify=0 \ --name=read_iops_test --filename=/dev/nvme0n2 --numa_cpu_nodes=0 \ --name=read_iops_test_1 --filename=/dev/nvme0n3 --numa_cpu_nodes=1 \ --name=read_iops_test_2 --filename=/dev/nvme0n4 --numa_cpu_nodes=2
Teste de referência da latência do Hyperdisk Extreme no C3
Durante o teste da latência de E/S, a VM não pode atingir a largura de banda máxima nem os IOPS. Se
o fizer, a latência observada não reflete a latência de E/S do Hyperdisk real.
Por exemplo, se a VM atingir o limite de IOPS a uma profundidade de E/S de 30 e o comando fio tiver duplicado esse valor, o total de IOPS permanece igual e a latência de E/S comunicada duplica.
É suficiente segmentar um único dispositivo de disco não processado diretamente para obter latências de E/S realistas.
Latência de gravação de teste
Teste a latência de escrita executando escritas aleatórias, usando um tamanho de bloco de E/S de 4 KiB e uma profundidade de E/S de 4.
# Running this command causes data loss on the targeted device. # We strongly recommend using a throwaway disk. sudo fio --filename=/dev/nvme0n2 \ --filesize=512G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=4 --rw=randwrite \ --iodepth_batch_submit=4 --iodepth_batch_complete_max=4 \ --name=write_latency
Teste a latência de leitura
Teste a latência de leitura executando leituras aleatórias, usando um tamanho de bloco de E/S de 4 KiB e uma profundidade de E/S de 4.
sudo fio --filename=/dev/nvme0n2 \ --filesize=512G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=4 --rw=randread \ --iodepth_batch_submit=4 --iodepth_batch_complete_max=4 \ --name=read_latency
Limpar
Remova os ficheiros de teste.
sudo rm -rf $TEST_DIR/*Desmonte e pare o volume RAID.
sudo umount /dev/md0 sudo mdadm --stop /dev/md0Desassocie e elimine os volumes Hyperdisk anexados. Consulte os comandos
gcloud compute instances detach-diskegcloud compute disks delete.
Testes de referência do desempenho bruto do Hyperdisk
Se quiser medir o desempenho dos volumes do Hyperdisk sozinhos, fora do seu ambiente de desenvolvimento, pode testar o desempenho de leitura e escrita de um dispositivo de blocos num disco e numa VM descartáveis.
Os comandos seguintes pressupõem um volume Hyperdisk Extreme de 3500 GiB anexado à sua VM. Este tamanho do disco é necessário para atingir os limites de débito da VM de 32 vCPUs. Se o tamanho do dispositivo for diferente,
modifique o valor do argumento --filesize nos seguintes comandos.
Para mais informações sobre os limites de desempenho dos tipos de máquinas de VMs, consulte o artigo
Suporte de tipos de máquinas.
Prepare-se para os testes
Instalar dependências:
sudo apt-get update sudo apt-get install -y fioObtenha o caminho para o disco não processado. Armazene o caminho numa variável. O exemplo seguinte usa
/dev/nvme0n2como o caminho do disco não processado:TEST_DIR=/dev/nvme0n2Preencha o disco com dados diferentes de zero. As leituras do Hyperdisk a partir de blocos vazios têm um perfil de latência diferente dos blocos que contêm dados. Recomendamos que encha o disco antes de executar quaisquer testes de referência 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=$TEST_DIR --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
Se a VM usar a interface de disco NVMe para a ligação do Hyperdisk (se o nome do disco não processado tiver o prefixo
nvme), siga os passos abaixo para obter o número de nós NUMA disponíveis para a VM.A estratégia de testes de referência para discos NVMe difere para VMs com apenas um nó NUMA e VMs com mais de um nó NUMA. Quando testa o desempenho do Hyperdisk através da interface de disco NVMe, apenas são alocados 256 tamanhos de filas NVMe por fila. Devido aos tamanhos de filas NVMe limitados disponíveis e à potencial contenção proveniente dos outros discos anexados à mesma VM, estes testes de benchmark usam duas filas de discos NVMe para manter um tamanho de fila agregado capaz de processar a profundidade de E/S de 256.
Obtenha o número de nós NUMA.
lscpu | grep -i 'numa node(s)' | awk '{print $NF}'Se a VM tiver apenas 1 nó NUMA, obtenha o mapeamento da fila CPU para NVMe. Vai usar estas informações mais tarde para o parâmetro
--cpus-allowed.QUEUE_1_CPUS=$(cat /sys/class/block/nvme0n2/mq/*/cpu_list | sed -n 1p | tr -d " \t") QUEUE_2_CPUS=$(cat /sys/class/block/nvme0n2/mq/*/cpu_list | sed -n 2p | tr -d " \t")
Testar a taxa de gravações
Teste a taxa de transferência de gravação executando gravações sequenciais com vários fluxos paralelos (mais de 16), usando 1 MB como o tamanho de E/S e tendo uma profundidade de E/S igual ou superior a 64.
Se o Hyperdisk estiver anexado através da interface SCSI:
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --filename=$TEST_DIR \ --numjobs=16 --size=500G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --offset_increment=20G \ --name=write_throughput
Se o volume do Hyperdisk usar a interface NVMe:
Se a VM tiver apenas um nó NUMA, use o seguinte comando:
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --cpus_allowed_policy=split \ --offset_increment=20G --group_reporting \ --name=write_throughput --cpus_allowed=$QUEUE_1_CPUS \ --name=write_throughput_2 --cpus_allowed=$QUEUE_2_CPUS
Se a VM tiver mais do que um nó NUMA, use o seguinte comando:
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --offset_increment=20G --group_reporting \ --name=write_throughput --numa_cpu_nodes=0 \ --name=write_throughput_2 --numa_cpu_nodes=1
IOPS de gravação de teste
Para alcançar o máximo de IOPS do Hyperdisk, tem de manter uma fila de E/S profunda. Se, por exemplo, a latência de escrita for de 1 milissegundo, a VM pode atingir, no máximo, 1000 IOPS para cada E/S em voo. Para alcançar 15 000 IOPS de escrita, a VM tem de manter, pelo menos, 15 operações de E/S em curso. Se o disco e a VM puderem atingir 30 000 IOPS de escrita, o número de operações de E/S em curso tem de ser, pelo menos, 30. Se o tamanho de E/S for superior a 4 KB, a VM pode atingir o limite de largura de banda antes de atingir o limite de IOPS.
Teste as IOPS de escrita realizando escritas aleatórias, usando um tamanho de bloco de E/S de 4 KB e uma profundidade de E/S de, pelo menos, 256.
Se o volume do Hyperdisk Extreme estiver associado através da interface SCSI:
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --filename=$TEST_DIR \ --numjobs=16 --size=500G -time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --name=write_iops
Se o volume do Hyperdisk Extreme estiver associado através da interface NVMe:
Se a VM tiver apenas um nó NUMA, use o seguinte comando:
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --cpus_allowed_policy=split \ --group_reporting \ --name=write_write_iops --cpus_allowed=$QUEUE_1_CPUS \ --name=write_write_iops_2 --cpus_allowed=$QUEUE_2_CPUS
Se a VM tiver mais do que um nó NUMA, use o seguinte comando:
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --group_reporting \ --name=write_iops --numa_cpu_nodes=0 \ --name=write_iops_2 --numa_cpu_nodes=1
Latência de gravação de teste
Durante o teste da latência de E/S, a VM não pode atingir a largura de banda máxima nem os IOPS. Caso contrário, a latência observada não reflete a latência de E/S do Hyperdisk real. Por exemplo, se o limite de IOPS for atingido a uma profundidade de E/S de 30 e o comando fio tiver duplicado esse valor, o total de IOPS permanece o mesmo e a latência de E/S comunicada duplica.
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --filename=$TEST_DIR \ --filesize=500G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=4 --rw=randwrite \ --iodepth_batch_submit=4 --iodepth_batch_complete_max=4 \ --name=write_latency
Teste a largura de banda de leitura
Teste a largura de banda de leitura executando leituras sequenciais com vários fluxos paralelos (mais de 16), usando um tamanho de E/S de 1 MB e uma profundidade de E/S de, pelo menos, 64.
Se o volume do Hyperdisk Extreme estiver associado através da interface SCSI:
sudo fio --filename=$TEST_DIR \ --numjobs=16 --size=500G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --offset_increment=20G --name=read_bandwidth
Se o volume do Hyperdisk Extreme estiver associado através da interface NVMe:
Se a VM tiver apenas um nó NUMA, use o seguinte comando:
sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --cpus_allowed_policy=split \ --offset_increment=20G --group_reporting \ --name=read_bandwidth --cpus_allowed=$QUEUE_1_CPUS \ --name=read_bandwidth_2 --cpus_allowed=$QUEUE_2_CPUS
Se a VM tiver mais do que um nó NUMA, use o seguinte comando:
sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --offset_increment=20G --group_reporting \ --name=read_bandwidth --numa_cpu_nodes=0 \ --name=read_bandwidth_2 --numa_cpu_nodes=1
IOPS de leitura de teste
Para alcançar o máximo de IOPS do Hyperdisk, tem de manter uma fila de E/S profunda.
Se, por exemplo, o tamanho de E/S for superior a 4 KB, a VM pode atingir o limite de largura de banda antes de atingir o limite de IOPS. Para alcançar o máximo de IOPS de leitura disponíveis para um tipo de máquina, especifique --iodepth=256 para este teste.
Se o volume do Hyperdisk Extreme estiver associado através da interface SCSI:
sudo fio --filename=$TEST_DIR \ --numjobs=16 --size=500G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --name=read_iops
Se o volume do Hyperdisk Extreme estiver associado através da interface NVMe:
Se a VM tiver apenas um nó NUMA, use o seguinte comando:
sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --cpus_allowed_policy=split \ --group_reporting \ --name=read_iops --cpus_allowed=$QUEUE_1_CPUS \ --name=read_iops_2 --cpus_allowed=$QUEUE_2_CPUS
Se a VM tiver mais do que um nó NUMA, use o seguinte comando:
sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --group_reporting \ --name=read_iops --numa_cpu_nodes=0 \ --name=read_iops_2 --numa_cpu_nodes=1
Teste a latência de leitura
É importante encher o disco com dados para obter uma medição de latência realista. É importante que a VM não atinja os limites de IOPS ou débito durante este teste, porque, depois de o volume do Hyperdisk atingir o limite de saturação, rejeita as operações de E/S recebidas. Esta rejeição reflete-se como um aumento artificial na latência de E/S.
sudo fio --filename=$TEST_DIR \ --filesize=500G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=4 --rw=randread \ --iodepth_batch_submit=4 --iodepth_batch_complete_max=4 \ --name=read_latency
Limpar
Se usou um disco e uma VM descartáveis, conforme recomendado, após a conclusão dos testes de benchmark, pode:
- Desanexe e elimine o disco.
- Elimine a VM.
O que se segue?
- Saiba mais acerca dos preços do Hyperdisk.