Um dos aspecto mais importantes na avaliação de performance de uma solução de Nuvem é a velocidade de acesso ao disco persistentes que a imagem enxerga. Obviamente temos diferentes tecnologias de disco, sejam elas os discos rotativos eletromagnéticos (HDD), com interface SATA ou SAS, discos baseados em estado sólido (SDD) ou mais recentemente discos NVME.
Abaixo encontraremos alguns comandos de fácil execução e que quando avaliados em conjunto, podemo servir de base de comparação para a avaliação das necessidades e do desempenho que a nuvem entrega.
Talvez o mais simples e mais rápido seja uma escrita linear simples de um arquivo via DD:
Para escrever 1G bytes:
dd if=/dev/zero of=/root/perf-ssd bs=1G count=1 oflag=direct
Para escrever 2G bytes:
dd if=/dev/zero of=/root/perf-ssd bs=2G count=1 oflag=direct
Por exemplo, para avaliar a performance de leitura do vda1, podemos:
hdparm -Tt /dev/vda1
O fio possibilita testes mais complexos, tanto lineares quanto randômicos, de escrita e leitura.
sudo fio --time_based --runtime=1800 --gtod_reduce=1 --numjobs=4 --size=1g --description=4K_QD64_RandWrite --blocksize=4K --rw=randwrite --direct=1 --ioengine=libaio --iodepth=64 --group_reporting=1 --name=rdwrite
Parâmetros tipicamente modificados:
Para mais detalhes: https://linux.die.net/man/1/fio
Testes de Random Read e Random Write em geral são feitos com blocos pequenos, no intuito de medir IOPS:
fio --time_based --gtod_reduce=1 --numjobs=4 --runtime=300 --size=1g --description=4K_RandRead --blocksize=4K --rw=randread --direct=1 --ioengine=libaio --iodepth=64 --group_reporting=1 --name=randread
sudo fio --time_based --gtod_reduce=1 --numjobs=4 --runtime=300 --size=1g --description=4K_RandWrite --blocksize=4K --rw=randwrite --direct=1 --ioengine=libaio --iodepth=64 --group_reporting=1 --name=randwrite
Testes de Sequential Read and Write são feitos para medir taxa de escrita e leitura e usam blocos grandes:
sudo fio --time_based --gtod_reduce=1 --numjobs=1 --runtime=300 --size=1g --description=2G_SeqRead --blocksize=2048K --rw=read --direct=1 --ioengine=libaio --iodepth=128 --group_reporting=1 --name=seqread
sudo fio --time_based --gtod_reduce=1 --numjobs=1 --runtime=300 --size=1g --description=2G_SeqWrite --blocksize=2048K --rw=write --direct=1 --ioengine=libaio --iodepth=128 --group_reporting=1 --name=seqwrite