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 fio
Se 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 lsblk
O 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_DIR
Se 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 fio
Liste os discos associados à sua VM e encontre o disco que quer testar.
sudo lsblk
O 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
,nvme0n3
envme0n4
.
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_DIR
Uma 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/md0
Desassocie e elimine os volumes Hyperdisk anexados. Consulte os comandos
gcloud compute instances detach-disk
egcloud 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 fio
Obtenha o caminho para o disco não processado. Armazene o caminho numa variável. O exemplo seguinte usa
/dev/nvme0n2
como o caminho do disco não processado:TEST_DIR=/dev/nvme0n2
Preencha 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.