Testes de Desempenho de Disco em VPS Linux

Testes de Desempenho de Disco em VPS Linux

Com a popularização dos VPS no Brasil, principalmente por grande players do mercado, se tornaram uma excelente opção pra hospedagens de sistemas para pequenas empresas, que demandam uma configuração específica e blogs com uma visitação maior.

Um VPS é, a grosso modo, um fatiamento de um hardware físico em várias instâncias virtuais através de alguma tecnologia de virtualização, sendo as mais comuns estilo container (como OpenVZ e até o Docker) ou total (Xen, KVM, VMWare…)

É importante entender que há um limite de recursos no servidor em que seu VPS está alocado, CPU, memória, disco, etc…

Mas e se houverem problemas de desempenho no disco, como descobrir?

Bom, a primeira medida é entender que containers genericamente compartilham os recursos do sistema operacional que hospeda o serviço, então é muito mais fácil praticar oversell (vender mais recursos do que efetivamente ter de capacidade).

Já a virtualização total (que também alguns fornecedores têm chamado mercadologicamente de VM), normalmente exige que, ao menos a memória, seja exclusiva, além de todo aparato comum desse tipo de virtualização já ser isolada, a memória acaba sendo alocada unicamente para sua instância.

Então se a memória é exclusiva a tendência é que os problemas de desempenho estejam relacionados à CPU e ao disco. Particularmente, a maioria das vezes que encontrei problemas de desempenho foi no disco e é bem simples de encontrar indícios desse subdimencionamento.

É importante ressaltar que alguns fornecedores limitam o uso do disco intencionalmente e as sugestões que deixo aqui são apenas para você ter o entendimento do que está acontecendo e embasamento ao abrir um chamado.

O primeiro comando é pra verificar a capacidade da máquina de gravar no disco um arquivo grande:

dd if=/dev/zero of=testedisco bs=64k count=16k conv=fdatasync && rm -rf testedisco

Ele grava zeros no arquivo testedisco e logo após deleta, quanto maior o resultado em MB/s melhor. No meu teste, tive o seguinte resultado:

1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.6192 s, 663 MB/s

Ali vemos que em 1.6192 segundos foram gravados 663 MB/s, o que é adequado pra disco NVME.

O segundo comando é pra verificar a latência de I/O:

ioping -c 15 .

O comando testa a latência do disco. Quanto menor é melhor. Neste exemplo peguei de um servidor de e-mail, em produção, no horário comercial, com discos SSD nível enterprise e em RAID.

Uma alta latência nesse quesito causa lentidão geral na máquina host, fazendo com que o VPS comece a ficar lento e costuma resultar em alto uso de CPU.

4 KiB <<< . (ext4 /dev/vda1): request=1 time=237.1 us (warmup)
4 KiB <<< . (ext4 /dev/vda1): request=2 time=359.9 us
4 KiB <<< . (ext4 /dev/vda1): request=3 time=323.9 us
4 KiB <<< . (ext4 /dev/vda1): request=4 time=296.4 us
4 KiB <<< . (ext4 /dev/vda1): request=5 time=502.4 us
4 KiB <<< . (ext4 /dev/vda1): request=6 time=309.8 us
4 KiB <<< . (ext4 /dev/vda1): request=7 time=306.4 us (fast)
4 KiB <<< . (ext4 /dev/vda1): request=8 time=322.1 us
4 KiB <<< . (ext4 /dev/vda1): request=9 time=370.1 us
4 KiB <<< . (ext4 /dev/vda1): request=10 time=366.0 us
4 KiB <<< . (ext4 /dev/vda1): request=11 time=393.4 us
4 KiB <<< . (ext4 /dev/vda1): request=12 time=343.7 us
4 KiB <<< . (ext4 /dev/vda1): request=13 time=330.6 us
4 KiB <<< . (ext4 /dev/vda1): request=14 time=389.1 us
4 KiB <<< . (ext4 /dev/vda1): request=15 time=282.4 us (fast)

— . (ext4 /dev/vda1) ioping statistics —
14 requests completed in 4.90 ms, 56 KiB read, 2.86 k iops, 11.2 MiB/s
generated 15 requests in 14.0 s, 60 KiB, 1 iops, 4.29 KiB/s
min/avg/max/mdev = 282.4 us / 349.7 us / 502.4 us / 53.6 us

Mas e que parâmetros devem ser adequados?

Esta pergunta depende da aplicação que está rodando, por exemplo, o impacto deve ser baixo num servidor web que faz cache em memória dos principais acessos (por exemplo a página inicial de um blog), já para um servidor de banco de dados é desastroso.

É preciso conhecer um pouco do fornecedor. Se ele coloca os discos em RAID “na barriga” do servidor, ou seja, no próprio host a tendência é de ter bem menor desempenho do que os que usam um storage. Curiosamente quem usa storage costuma vender como “Cloud Server” ao invés de VPS, mas isso é outra matéria.

Basicamente podemos pensar nos discos por tecnologia, por si só sabemos que os NVME, SSD e os HDs têm diferenças substanciais de velocidade.

Eu não quero criar uma tabela de mínimo, porque na prática isso é bem complicado de elencar, mas eu diria que o mínimo razoável pra um serviço VPS que diz usar SSD é entregar 100 MB/s (pensando que é +/- o que um HD comum entrega). Particularmente, eu prefiro fornecedores que entregam mais de 250 MB/s nos VPS mais básicos.

Se você tiver sugestões ou ideias para este post, deixa aqui nos comentários, certamente há muitas outras formas de fazer essa análise e também é interessante “ouvir” outros pontos de vista 🙂