Para comparar o desempenho do hiperdisco do Google Cloud,
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 Hyperdisk.
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
Instale as 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 à VM e encontre o disco que você quer testar.
sudo lsblkO 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.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_DIRSe a VM usar a interface de disco NVMe para o anexo do volume 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.
Consiga o número de nós NUMA.
lscpu | grep -i 'numa node(s)' | awk '{print $NF}'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.
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 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.
Se o volume do Hyperdisk estiver anexado 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
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 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.
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 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.
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 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 volume 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
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.
Conectar-se à instância:
Instale as dependências:
sudo apt update sudo apt install -y fioListe os discos anexados à VM e encontre o disco que você quer testar.
sudo lsblkO 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,nvme0n3envme0n4.
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.
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_DIRComo 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
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
Remova os arquivos de teste.
sudo rm -rf $TEST_DIR/*Desconecte e interrompa o volume RAID.
sudo umount /dev/md0 sudo mdadm --stop /dev/md0Remova e exclua os volumes do Hyperdisk anexados. Consulte os comandos
gcloud compute instances detach-diskegcloud 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
Instale as dependências:
sudo apt-get update sudo apt-get install -y fioConsiga o caminho para o disco bruto. Armazene o caminho em uma variável. O exemplo a seguir usa
/dev/nvme0n2como o caminho do disco bruto:TEST_DIR=/dev/nvme0n2Preencha 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
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.
Consiga o número de nós NUMA.
lscpu | grep -i 'numa node(s)' | awk '{print $NF}'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.
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
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 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.
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
Se o volume do Hyperdisk Extreme estiver anexado via 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
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.
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
Se o volume do Hyperdisk Extreme estiver anexado via 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
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.
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
Se o volume do Hyperdisk Extreme estiver anexado via 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
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
- Saiba mais sobre os preços do Hyperdisk.