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
Instale as dependências:
sudo apt update sudo apt install -y fio
Se o 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 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
.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
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.
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 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 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 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
Se o 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 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 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 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 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 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 fio
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
envme0n4
.
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_DIR
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
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/md0
Remova e exclua os volumes do Hyperdisk anexados. Consulte os comandos
gcloud compute instances detach-disk
egcloud 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 fio
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
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
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 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.