Comparativo de mercado do desempenho do Hyperdisk


Para comparar o desempenho do hiperdisco, use o testador flexível de E/S (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. Portanto, é difícil garantir que a comparação 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, os dispositivos especiais usados com dd geralmente são 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, nos comparativos de mercado do desempenho do Hyperdisk.

Para medir IOPS e capacidade 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. Observação: quando você compara os sistemas de arquivos em um disco já 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 Hyperdisk, compare diretamente o dispositivo de transferência por blocos. 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 processamento de 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-o com um novo diretório nos sistemas de arquivos que já existem.

Preparar para o teste

  1. Conecte-se à instância.

  2. Instale as dependências:

    sudo apt update
    sudo apt install -y fio
    
  3. Se o Hyperdisk ainda não estiver formatado, formate e monte o disco.

  4. No terminal, liste os discos anexados à VM e encontre o disco que você quer testar.

    sudo lsblk
    

    O comando anterior produz um resultado semelhante a este:

    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 do Hyperdisk Extreme de 3.500 GiB com o nome de dispositivo nvme0n2.

  5. 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
    
  6. Se a VM usar a interface de disco NVMe para o anexo do Hyperdisk (se o nome do disco bruto tiver o prefixo nvme), execute as seguintes etapas para conseguir o número de nós NUMA disponíveis para a VM.

    A estratégia de comparativo de mercado para discos NVMe é diferente para VMs com apenas um nó NUMA e VMs com mais de um nó NUMA. Ao testar o desempenho do Hyperdisk usando a interface de disco NVMe, apenas 256 tamanhos de fila da NVMe são alocados por fila. Devido à limitação de tamanhos de fila da NVMe disponíveis e à possível contenção vinda de outros discos anexados à mesma VM, esses testes de comparativo de mercado usam duas filas de disco NVMe para manter um tamanho de fila agregado capaz de processar a profundidade de E/S de 256.

    1. Consiga o número de nós NUMA.

      lscpu | grep -i 'numa node(s)' | awk '{print $NF}'
      
    2. Se a VM tiver apenas um nó NUMA, consiga o mapeamento de filas entre CPU e 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")
      

Testar capacidade de processamento para gravação

Teste a capacidade de processamento para 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.

  1. Se o 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
    
  2. Se o Hyperdisk usar a interface NVMe:

    1. 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
      
    2. 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
      

Testar IOPS de gravação

Teste IOPS de gravação realizando 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.

  1. Se o Hyperdisk estiver conectado via 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
    
  2. Se o Hyperdisk usar a interface NVMe:

    1. 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
      
    2. 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
      

Testar capacidade processamento para leitura

Teste a capacidade de processamento para leitura realizando 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.

  1. Se o 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
    
  2. Se o Hyperdisk usar a interface NVMe:

    1. 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
      
    2. 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
      

Testar IOPS de leitura

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.

  1. Se o 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
    
  2. Se o Hyperdisk usar a interface NVMe:

    1. 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
      
    2. 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 capacidade de processamento do Hyperdisk Extreme em VMs C3

O Google Cloud Hyperdisk Extreme oferece maior desempenho em VMs C3 com 176 vCPUs. Para atingir limites de desempenho mais altos, anexe vários volumes Hyperdisk Extreme à VM.

Para medir a E/S por segundo (IOPS, na sigla em inglês) ou a capacidade de uma carga de trabalho realista em discos ativos em uma VM C3 em execução sem perder o conteúdo dos discos de dados atuais, compare com um novo diretório no sistema de arquivos atual. e anexar novos volumes extremos do Hyperdisk à VM para as tarefas de comparação.

Para discos anexados à interface NVMe, é recomendável distribuir a carga de trabalho de E/S em todas as filas NVMe disponíveis para a VM. Isso maximiza a performance do Hyperdisk. Em VMs C3 com 176 vCPUs, há quatro nós NUMA mapeados de 1 para 1 a 4 filas NVMe. Esse mapeamento é usado para os testes comparativos desta seção.

Preparar para o teste

  1. Adicione novos discos extremos do hiperdisco à VM e consulte os limites de desempenho do hiperdisco para determinar a configuração de disco necessária para o desempenho de destino.

  2. Conectar-se à instância:

  3. Instale as dependências:

    sudo apt update
    sudo apt install -y fio
    
  4. Liste os discos anexados à VM e encontre o disco que você quer testar.

    sudo lsblk
    

    O comando anterior produz um resultado semelhante a este:

    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 hiperdisco do Google Cloud em três volumes extremos do Hyperdisk do Google Cloud de 2.500 GiB com dispositivos chamados nvme0n2, nvme0n3 e nvme0n4.

Capacidade de comparação da capacidade do Hyperdisk Extreme no C3

Nesta seção, mostramos como comparar as capacidades de leitura e gravação para discos extremos do hiperdisco.

Preparação para o teste

Antes de começar a comparar o desempenho dos discos extremos do hiperdisco anexados a uma VM C3 com 176 vCPUs, conclua as etapas a seguir.

  1. Crie um novo diretório, fiotest, no sistema operacional. Neste exemplo, o diretório raiz é /mnt/disks/mnt_dir:

    TEST_DIR=/mnt/disks/mnt_dir/fiotest
    sudo mkdir -p $TEST_DIR
    
  2. Como a VM requer mais de um disco para atingir os níveis mais altos de desempenho, para simplificar, execute o RAID 0 em todos os volumes do hiperdisco anexados. Isso facilita a distribuição uniforme dos dados entre vários volumes do Hyperdisk.

    Neste exemplo, RAID 0 é o desempenho em três volumes extremos do hiperdisco anexados à VM C3.

    sudo mdadm --create /dev/md0 --level=0 --raid-devices=3 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4
    
  3. Formate e ative o volume RAID /dev/md0.

Testar capacidade de processamento para gravação

Teste a capacidade de gravação executando gravações sequenciais com vários streams paralelos (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

Testar capacidade processamento para leitura

Teste a capacidade de leitura executando leituras sequenciais com vários streams paralelos (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

IOPS de comparativo de mercado do Hyperdisk Extreme no C3

Para comparar o desempenho de E/S por segundo (IOPS), recomendamos realizar pequenas operações de E/S paralelas diretamente de ou para discos brutos (sem RAID).

Testar IOPS de gravação

Teste as IOPS de gravação executando gravações aleatórias com um tamanho de bloco de E/S de 4 KiB e uma profundidade de E/S de pelo menos 256, utilizando pelo menos duas 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

Testar IOPS de leitura

Teste as IOPS de leitura executando 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 duas 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 comparação do Hyperdisk Extreme no C3

Durante o teste de latência de E/S, a VM não pode atingir a largura de banda ou as IOPS máximas. Nesse caso, a latência observada não vai refletir a latência real de E/S do hiperdisco. Por exemplo, se a VM atingir o limite de IOPS a uma profundidade de E/S de 30 e o comando fio tiver dobrado esse valor, o total de IOPS vai permanecer o mesmo, e a latência de E/S relatada dobrará de dois minutos.

Para conseguir latências de E/S realistas, basta segmentar um único dispositivo de disco bruto diretamente.

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

Testar 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

  1. Remova os arquivos de teste.

    sudo rm -rf $TEST_DIR/*
    
  2. Desconecte e interrompa o volume RAID.

    sudo umount /dev/md0
    sudo mdadm --stop /dev/md0
    
  3. Remova e exclua os volumes do Hyperdisk anexados. Consulte os comandos gcloud compute instances detach-disk e gcloud compute disks delete.

Comparativo de mercado do desempenho bruto do Hyperdisk

Se você quiser medir o desempenho de volumes do Hyperdisk isoladamente, fora do ambiente de desenvolvimento, teste o desempenho de leitura e gravação de um dispositivo de transferência por blocos em uma VM e um disco descartável.

Os comandos a seguir pressupõem um volume do Hyperdisk Extreme de 3.500 GiB anexado à VM. Esse tamanho de disco é necessário para alcançar os limites de capacidade de processamento da VM de 32 vCPUs. Se o tamanho do dispositivo for diferente, modifique o valor do argumento --filesize nos comandos a seguir. Para mais informações sobre os limites de desempenho para tipos de máquina de VM, consulte Suporte a tipos de máquina.

Preparar para o teste

  1. Conecte-se à instância.

  2. Instale as dependências:

    sudo apt-get update
    sudo apt-get install -y fio
    
  3. Consiga o caminho para o disco bruto. Armazene o caminho em uma variável. O exemplo a seguir usa /dev/nvme0n2 como o caminho do disco bruto:

    TEST_DIR=/dev/nvme0n2
    
  4. Preencha o disco com dados diferentes de zero. As leituras do Hyperdisk de blocos vazios têm um perfil de latência diferente dos blocos 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=$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
    
  5. Se a VM usar a interface de disco NVMe para o anexo do Hyperdisk (se o prefixo do nome do disco bruto for nvme), execute as etapas a seguir para conseguir o número de nós NUMA disponíveis para a VM.

    A estratégia de comparativo de mercado para discos NVMe é diferente para VMs com apenas um nó NUMA e VMs com mais de um nó NUMA. Ao testar o desempenho do Hyperdisk usando a interface de disco NVMe, apenas 256 tamanhos de fila da NVMe são alocados por fila. Devido à limitação de tamanhos de fila da NVMe disponíveis e à possível contenção vinda de outros discos anexados à mesma VM, esses testes de comparativo de mercado usam duas filas de disco NVMe para manter um tamanho de fila agregado capaz de processar a profundidade de E/S de 256.

    1. Consiga o número de nós NUMA.

      lscpu | grep -i 'numa node(s)' | awk '{print $NF}'
      
    2. Se a VM tiver apenas um nó NUMA, consiga o mapeamento de filas entre CPU e 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")
      

Testar capacidade de processamento para gravação

Teste a capacidade de processamento para gravação realizando gravações sequenciais com vários streams paralelos (16+), usando 1 MB como tamanho de E/S e profundidade de E/S igual ou superior a 64.

  1. Se o Hyperdisk estiver anexado via 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
    
  2. Se o Hyperdisk usar a interface NVMe:

    1. 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
      
    2. 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
      

Testar IOPS de gravação

Para alcançar o valor máximo de IOPS do Hyperdisk, mantenha 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 trânsito. Para atingir 15.000 IOPS de gravação, a VM precisa 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 precisará ser pelo menos 30. 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.

Teste IOPS de gravação realizando 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.

  1. Se o volume do Hyperdisk Extreme estiver anexado via 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
    
  2. Se o volume do Hyperdisk Extreme estiver anexado via interface NVMe:

    1. 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
      
    2. 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

Durante o teste da latência de E/S, é necessário que a VM não alcance o valor máximo de largura de banda ou IOPS. Caso contrário, a latência observada não refletirá a latência de E/S real do Hyperdisk. 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 --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

Testar largura de banda de leitura

Teste a capacidade de processamento para leitura realizando leituras sequenciais com vários streams paralelos (16+), usando um tamanho de E/S de 1 MB e uma profundidade de E/S de pelo menos 64.

  1. Se o volume do Hyperdisk Extreme estiver anexado via 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
  2. Se o volume do Hyperdisk Extreme estiver anexado via interface NVMe:

    1. 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
    2. 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

Testar IOPS de leitura

Para alcançar o valor máximo de IOPS do Hyperdisk, mantenha 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 valor máximo de IOPS de leitura disponível para um tipo de máquina, especifique --iodepth=256 para esse teste.

  1. Se o volume do Hyperdisk Extreme estiver anexado via 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
    
  2. Se o volume do Hyperdisk Extreme estiver anexado via interface NVMe:

    1. 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
      
    2. 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
      

Testar 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 de processamento durante esse teste porque, depois que o volume do Hyperdisk atinge o limite de saturação, ele contesta as operações de E/S recebidas. Essa contestação é refletida 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 uma VM ou um disco descartável conforme recomendado, após concluir os testes de comparativo de mercado, será possível:

  • Remover e excluir o disco.
  • Exclua a VM.

A seguir