Para avaliar o desempenho do hiperdisco , use o testador de E/S flexível (FIO) em vez de outras ferramentas de benchmarking de disco, como dd
. Por padrão, dd
usa uma profundidade de fila de E/S muito baixa, portanto é difícil garantir que o benchmark esteja gerando um número suficiente de bytes e operações de E/S para testar com precisão o desempenho do disco.
Além disso, dispositivos especiais usados com dd
costumam ser 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
em seus benchmarks de desempenho de hiperdiscos.
Para medir o IOPS e a taxa de transferência de um disco em uso em uma instância em execução , compare o sistema de arquivos com a configuração pretendida. Use esta opção para testar uma carga de trabalho realista sem perder o conteúdo do disco existente. Observe que quando você compara o sistema de arquivos em um disco existente, há muitos fatores específicos do seu ambiente de desenvolvimento que podem afetar os resultados do benchmarking e você pode não atingir os limites de desempenho do disco .
Para medir o desempenho bruto de um hiperdisco , compare diretamente o dispositivo de bloco. Use esta opção para comparar o desempenho bruto do disco com os limites de desempenho do disco .
Os comandos a seguir funcionam com sistemas operacionais Debian ou Ubuntu com o gerenciador de pacotes apt
.
Comparação de IOPS e taxa de transferência de um disco em uma instância em execução
Se você quiser medir o IOPS e a taxa de transferência para uma carga de trabalho realista em um disco ativo em uma instância de VM em execução sem perder o conteúdo do disco, compare com um novo diretório no sistema de arquivos existente.
Prepare-se para o teste
Instale dependências:
sudo apt update sudo apt install -y fio
Se o seu hiperdisco ainda não estiver formatado, formate e monte o disco .
No terminal, liste os discos anexados à sua VM e encontre o disco que deseja testar.
sudo lsblk
O comando anterior produz uma saída semelhante a esta:
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 testando um volume Hyperdisk Extreme de 3.500 GiB com nome de dispositivo
nvme0n2
.Crie um novo diretório,
fiotest
, no disco. Neste exemplo, o disco é 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 o anexo do hiperdisco (se o nome do disco bruto tiver o prefixo
nvme
), execute as etapas a seguir para obter o número de nós NUMA disponíveis para a VM.A estratégia de benchmarking para discos NVMe difere para VMs com apenas um nó NUMA e VMs com mais de um nó NUMA. Ao testar o desempenho do hiperdisco usando a interface de disco NVMe, apenas 256 tamanhos de fila NVMe são alocados por fila. Devido aos tamanhos limitados de fila NVMe disponíveis e à contenção potencial proveniente de outros discos conectados à mesma VM, esses testes de benchmark usam duas filas de disco NVMe para manter um tamanho de fila agregado capaz de lidar com a profundidade 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. Você usará essas informações posteriormente 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")
Teste a taxa de transferência de gravação
Teste o rendimento de gravação executando gravações sequenciais com vários fluxos paralelos (16+), usando um tamanho de bloco de E/S de 1 MB e uma profundidade de E/S de pelo menos 64.
Se o hiperdisco 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 hiperdisco 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 de 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
Teste de gravação de IOPS
Teste 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.
Se o hiperdisco estiver conectado usando 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 hiperdisco 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 de 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 o rendimento de leitura realizando leituras sequenciais com vários fluxos paralelos (16+), usando um tamanho de bloco de E/S de 1 MB e uma profundidade de E/S de pelo menos 64.
Se o hiperdisco 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 hiperdisco 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 de 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
Teste de leitura de IOPS
Teste IOPS de leitura realizando 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 hiperdisco 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 hiperdisco 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 de 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*
Comparativo de IOPS e taxa de transferência para Hyperdisk Extreme em VMs C3
O Google Cloud Hyperdisk Extreme oferece maior desempenho em VMs C3 com 176 vCPUs. Para atingir os limites de desempenho mais altos, você deve anexar vários volumes Hyperdisk Extreme à VM.
Para medir a E/S por segundo (IOPS) ou a taxa de transferência para uma carga de trabalho realista em discos ativos em uma VM C3 em execução sem perder o conteúdo dos discos de dados existentes, compare com um novo diretório no sistema de arquivos existente e anexe novos volumes Hyperdisk Extreme à VM para as tarefas de benchmarking.
Para discos anexados à interface NVMe, é recomendado distribuir a carga de trabalho de E/S por todas as filas NVMe disponíveis para a VM. Isso maximiza o desempenho do hiperdisco. Em VMs C3 com 176 vCPUs, há quatro nós NUMA mapeados 1 para 1 para quatro filas NVMe. Este mapeamento é assumido para os testes de benchmark nesta seção.
Prepare-se para o teste
Adicione novos discos Hyperdisk Extreme à sua VM e consulte os limites de desempenho do Hyperdisk para obter a configuração de disco necessária para o desempenho desejado.
Conecte-se à sua instância:
Instale dependências:
sudo apt update sudo apt install -y fio
Liste os discos anexados à sua VM e encontre o disco que você deseja testar.
sudo lsblk
O comando anterior produz uma saída semelhante a esta:
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 testando o desempenho do Google Cloud Hyperdisk em três volumes Hyperdisk Extreme de 2.500 GiB com dispositivos chamados
nvme0n2
,nvme0n3
envme0n4
.
Taxa de transferência de referência do Hyperdisk Extreme em C3
Esta seção mostra como avaliar a taxa de transferência de leitura e gravação para discos Hyperdisk Extreme.
Preparação para teste
Antes de começar a avaliar o desempenho dos discos Hyperdisk Extreme anexados a uma VM C3 com 176 vCPUs, conclua as etapas a seguir.
Crie um novo diretório,
fiotest
, em seu sistema operacional. Neste exemplo, o diretório raiz é/mnt/disks/mnt_dir
:TEST_DIR=/mnt/disks/mnt_dir/fiotest sudo mkdir -p $TEST_DIR
Como a VM requer mais de um disco para atingir os mais altos níveis de desempenho, para simplificar, execute o RAID 0 em todos os volumes de hiperdisco conectados. Isso facilita a distribuição uniforme dos dados em vários volumes de hiperdisco.
Neste exemplo, RAID 0 é o desempenho em três volumes 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
.
Teste a taxa de transferência de gravação
Teste o rendimento de gravação executando gravações sequenciais com vários fluxos paralelos (pelo menos 16), usando um tamanho de bloco de E/S de 1 MiB e uma profundidade total de E/S 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 o rendimento de leitura realizando leituras sequenciais com vários fluxos paralelos (pelo menos 16), usando um tamanho de bloco de E/S de 1 MiB e uma profundidade total de E/S 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
IOPS de referência do Hyperdisk Extreme em C3
Para avaliar o desempenho de E/S por segundo (IOPS), recomendamos realizar pequenas operações paralelas de E/S diretamente de ou para discos brutos (sem RAID).
Teste de gravação de IOPS
Teste IOPS de gravação executando gravações aleatórias, usando um tamanho de bloco de E/S de 4 KiB e uma profundidade de E/S de pelo menos 256, utilizando 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
Teste de leitura de IOPS
Teste IOPS de leitura realizando leituras aleatórias, usando um tamanho de bloco de E/S de 4 KiB e uma profundidade de E/S de pelo menos 256, utilizando 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
Latência de referência do Hyperdisk Extreme em C3
Ao testar a latência de E/S, a VM não deve atingir a largura de banda máxima ou IOPS. Se isso acontecer, a latência observada não refletirá a latência real de E/S do hiperdisco. Por exemplo, se a VM atingir o limite de IOPS em uma profundidade de E/S de 30 e o comando fio
tiver dobrado esse valor, o total de IOPS permanecerá o mesmo e a latência de E/S relatada dobrará.
É suficiente direcionar diretamente um único dispositivo de disco bruto para obter latências de E/S realistas.
Testar latência de gravação
Teste a latência de gravação executando gravações 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
Latência de leitura de teste
Teste a latência de leitura realizando 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 arquivos de teste.
sudo rm -rf $TEST_DIR/*
Desmonte e pare o volume RAID.
sudo umount /dev/md0 sudo mdadm --stop /dev/md0
Desanexe e exclua os volumes de hiperdisco anexados. Consulte os comandos
gcloud compute instances detach-disk
egcloud compute disks delete
.
Comparando o desempenho bruto do hiperdisco
Se você quiser medir o desempenho apenas dos volumes do hiperdisco, fora do seu ambiente de desenvolvimento, poderá testar o desempenho de leitura e gravação de um dispositivo de bloco em um disco descartável e em uma VM.
Os comandos a seguir pressupõem um volume Hyperdisk Extreme de 3.500 GiB conectado à sua VM. Esse tamanho de disco é necessário para atingir os limites de taxa de transferência de VM de 32 vCPU. Se o tamanho do seu dispositivo for diferente, modifique o valor do argumento --filesize
nos comandos a seguir. Para obter mais informações sobre os limites de desempenho para tipos de máquinas VM, consulte Suporte a tipos de máquinas .
Prepare-se para o teste
Instale dependências:
sudo apt-get update sudo apt-get install -y fio
Obtenha o caminho para o disco bruto. Armazene o caminho em uma variável. O exemplo a seguir usa
/dev/nvme0n2
como caminho de disco bruto:TEST_DIR=/dev/nvme0n2
Preencha o disco com dados diferentes de zero. As leituras de hiperdiscos de blocos vazios têm um perfil de latência diferente dos blocos que contêm dados. Recomendamos preencher o disco antes de executar qualquer benchmark 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 o anexo do hiperdisco (se o nome do disco bruto tiver o prefixo
nvme
), execute as etapas a seguir para obter o número de nós NUMA disponíveis para a VM.A estratégia de benchmarking para discos NVMe difere para VMs com apenas um nó NUMA e VMs com mais de um nó NUMA. Ao testar o desempenho do hiperdisco usando a interface de disco NVMe, apenas 256 tamanhos de fila NVMe são alocados por fila. Devido aos tamanhos limitados de fila NVMe disponíveis e à contenção potencial proveniente de outros discos conectados à mesma VM, esses testes de benchmark usam duas filas de disco NVMe para manter um tamanho de fila agregado capaz de lidar com a profundidade 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. Você usará essas informações posteriormente 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")
Teste a taxa de transferência de gravação
Teste o rendimento de gravação executando gravações sequenciais com vários fluxos paralelos (16+), usando 1 MB como tamanho de E/S e tendo uma profundidade de E/S de 64 ou superior.
Se o hiperdisco estiver conectado usando a 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 hiperdisco 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 de 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
Teste de gravação de IOPS
Para atingir o IOPS máximo do hiperdisco, você deve manter uma fila de E/S profunda. Se, por exemplo, a latência de gravação for de 1 milissegundo, a VM poderá atingir, no máximo, 1.000 IOPS para cada E/S em andamento. Para atingir 15.000 IOPS de gravação, a VM deve manter pelo menos 15 operações de E/S em andamento. Se o disco e a VM puderem atingir 30.000 IOPS de gravação, o número de operações de E/S em andamento deverá ser de pelo menos 30. Se o tamanho de E/S for maior que 4 KB, a VM poderá atingir o limite de largura de banda antes de atingir o limite de IOPS.
Teste 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.
Se o volume Hyperdisk Extreme estiver conectado usando 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 Hyperdisk Extreme estiver conectado usando 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=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 de 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
Testar latência de gravação
Ao testar a latência de E/S, a VM não deve atingir a largura de banda máxima ou IOPS; caso contrário, a latência observada não refletirá a latência real de E/S do hiperdisco. Por exemplo, se o limite de IOPS for atingido em uma profundidade de E/S de 30 e o comando fio
tiver dobrado esse valor, o IOPS total permanecerá o mesmo 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 --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 realizando leituras sequenciais com vários fluxos paralelos (16+), usando um tamanho de E/S de 1 MB e uma profundidade de E/S de pelo menos 64.
Se o volume Hyperdisk Extreme estiver conectado usando a 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 Hyperdisk Extreme estiver conectado usando a 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 de 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
Teste de leitura de IOPS
Para atingir o IOPS máximo do hiperdisco, você deve manter uma fila de E/S profunda. Se, por exemplo, o tamanho de E/S for maior que 4 KB, a VM poderá atingir o limite de largura de banda antes de atingir o limite de IOPS. Para atingir o IOPS máximo de leitura disponível para um tipo de máquina, especifique --iodepth=256
para este teste.
Se o volume Hyperdisk Extreme estiver conectado usando a 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 Hyperdisk Extreme estiver conectado usando a 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 de 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
Latência de leitura de teste
É importante preencher 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 de rendimento durante este teste porque, depois que o volume do hiperdisco atinge seu limite de saturação, ele retrocede nas operações de E/S recebidas. Esse retrocesso se reflete 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 você usou um disco descartável e uma VM conforme recomendado, depois de concluir os testes de benchmark, você poderá:
- Desconecte e exclua o disco.
- Exclua a VM.
O que vem a seguir
- Saiba mais sobre os preços do hiperdisco .