====== 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