Performance de Disco
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.
Escrita Linear - DD
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
Leitura de Disco - HDParm
Por exemplo, para avaliar a performance de leitura do vda1, podemos:
hdparm -Tt /dev/vda1
Flexible I/O Tester
O fio possibilita testes mais complexos, tanto lineares quanto randômicos, de escrita e leitura.
Syntaxe
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:
- –time_based: Define que o teste vai rodar com base no tempo.
- –runtime: Define o tempo para rodar o teste em segundos.
- –numjobs: Número de clones (processes/threads performing the same workload). Default: 1.
- –size: Tamanho total em bytes.
- –description: Description
- –blocksize: Block size. Default: 4k.
- –rw: Define o tipo de teste: randwrite, randread, write, read.
- –name: Define o file_name.
Para mais detalhes: https://linux.die.net/man/1/fio
Exemplos
Testes de Random Read e Random Write em geral são feitos com blocos pequenos, no intuito de medir IOPS:
- Test Random Read (300s = 5min):
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
- Test Random Write (300s = 5min):
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:
- Test Sequential Read (300s = 5min):
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
- Test Sequenctial Write (300s = 5min):
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