Linux Tux in orange background

Como determinar a velocidade de seu memory card ou pendrive no Linux com o comando dd

Fazer uma análise do desempenho ou da performance de um dispositivo de armazenamento removível (cartão de memória, drive flash, pendrive etc) é bastante fácil.
Neste texto vou mostrar como usar o comando dd, como ferramenta padrão de qualquer distro Linux, para fazer um benchmarking nos seus dispositivos.
Este tipo de resultado pode ser interessante obter toda vez em que você precisar decidir qual dispositivo quer usar para instalar uma distro Linux Live, por exemplo — onde você vai precisar ter o máximo de desempenho.

A minha história é a seguinte: estou querendo revitalizar um dos meus notebooks antigos, que está sem o disco rigido.
Para isto, vou usar uma ou duas distribuições GNU/Linux Live rodando do pendrive ou do cartão de memória e vou optar por instalá-las nos dispositivos mais rápidos que eu tiver — ou, pelo menos, nos menos lerdos.
Os pendrives usados neste teste são antigos e a máquina conta apenas com 2GB de memória RAM.
Uma quantidade de memória RAM inferior a 3 GB é, na minha opinião, desestimulante para tentar rodar o Linux inteiramente na RAM — para isto, basta usar o parâmetro boot=toram na inicialização do GRUB, caso você queira tentar.
Se você tem também uma máquina antiga à qual gostaria de dar mais algum tempo de sobrevida (de 6 meses a 1 ano, ou mais… ), recomendo investir na compra de um drive em estado sólido SSD.
Além de ganhar velocidade, quando a máquina velha parar de funcionar definitivamente, você pode usar seu SSD em outra máquina.

Não esqueça de fazer backup completo dos dados armazenados nos dispositivos — os procedimentos descritos neste texto ocasionam perda de dados.
Seguem as descrições de cada metodologia usada.

Como determinar a velocidade de leitura e escrita de um dispositivo de armazenamento com o comando dd

O comando dd, no GNU/Linux é um dos comandos tradicionais. Vale a pena conhecê-lo melhor — trata-se de um “canivete suíço”, para realizar as mais variadas tarefas.
Quando terminar o teste, vou usá-lo para instalar as minhas distribuições favoritas dentro do pendrive — clique aqui, para ver como é fácil fazer isto.
O comando dd simplesmente copia dados de um lugar (indicado pelo parâmetro if=) para outro (of=).
Se você faz uso de um sistema de arquivos com caching, tenha em mente que este fator irá influenciar o teste e você poderá obter resultados irreais.
Para tentar driblar o cache, certifique-se de usar valores significativamente altos para o parâmetro ‘count’ do comando dd.
Isto irá forçar o sistema operacional a gravar os dados direto no dispositivo.
Minha sugestão é usar valores acima de 50Kb.
O teste com o dd consiste em enviar dados (aleatórios) para serem escritos direto no dispositivo conectado, com alguns parâmetros adicionados. Veja um exemplo:

sudo dd if=/dev/zero of=/dev/sdd bs=1M count=10241024+0 registros de entrada
1024+0 registros de saída
1073741824 bytes (1,1 GB) copiados, 229,927 s, 4,7 MB/s

Para o propósito deste post, a taxa de leitura do dispositivo terá mais impacto na performance.
Para obter a taxa de leitura sem a influência do cache, execute o seguinte comando antes de cada teste:

sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

Se quiser saber mais sobre o procedimento de limpar a memória cache no Linux, clique aqui.
Para testar a taxa de leitura, use qualquer arquivo dentro do pendrive em ‘if=’:

dd if=/media/pendrive/teste.log of=/dev/null bs=4k
51200+0 registros de entrada
51200+0 registros de saída
419430400 bytes (419 MB) copiados, 25,1704 s, 16,7 MB/s

Limpar o cache é opcional — mas, se você não fizer isto, vai obter uma taxa de leitura na casa dos GB/s, da qual você não irá usufruir na realidade.

O padrão USB 2.0 tem uma taxa máxima de 480 Mbits/s ou 60 Mbytes/s, teoricamente.
Em função de várias restrições, contudo, a taxa máxima de transferência acaba sendo 280 Mbits/s ou 35 Mbytes/s.
Além disto, a taxa de transferência vai depender da qualidade do seu dispositivo USB, além de outros fatores.

Como última dica, se você está testando cartões de memória para usar no Raspberry Pi e pretende usar aplicações/servidor de banco de dados MySQL ou PostgreSQL, use um blocksize = 8k. Assim:

dd if=/media/pendrive/teste.log of=/dev/null bs=8k

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como “Rick and Morty” e “BoJack Horseman”.
Me siga no Twitter e vamos trocar ideias!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *