Sábado 21/04/2018

ETIQUETA | hardware

Comprobar la velocidad de una tarjeta microSD en la Raspberry Pi es bastante fácil. Basta con medir el tiempo empleado en grabar y leer un archivo, de tamaño conocido.

dd if=/dev/zero of=/tmp/test.tmp bs=500K count=1024

Nos proporciona la velocidad de escritura creando un archivo temporal de 500MB. Este archivo no es necesario borrarlo ya que se auto-eliminará en el próximo arranque.

Ahora, procedemos a leerlo con:

dd if=/tmp/test.tmp of=/dev/null bs=500K count=1024

Esto nos proporcionará la velocidad de lectura.

Como caso práctico, vamos a realizar la medición de velocidad de una tarjeta microSD habitualmente recomendada para usar con la Raspberrypi. Se trata de una Sandisk Ultra de 32GB

microSD

Las características que promete, el fabricante, son magníficas con velocidades de hasta 98 MB/s en lectura.

especificaciones

Pero en la práctica estas cifras están muy lejos de la realidad. Las tarjetas SD están pensadas para su uso en cámaras fotográficas que escriben los datos en bloques (acceso secuencial), pero la Raspberrypi accede a la tarjeta de forma aleatoria, y además el hardware de la Raspberrypi tiene sus propias limitaciones.

Si colocáramos una microSD nueva, recién formateada, en una cámara de alta gama, las velocidades de lectura estarían más cerca de las especificaciones del fabricante, pero los números que arroja la prueba que vamos a realizar en la Raspberrypi son muy distitos.

Comenzamos la prueba con la creación de un fichero de 500 MB

dd if=/dev/zero of=/tmp/test.tmp bs=500K count=1024

escritura

La velocidad conseguida es de 17,6 MB/s.

Antes de proceder a su lectura, examinamos la memoria con:

free -mh

free

Vemos, en la columna "buff/cache", que se están usando 680M y la columna "free" indica que solo hay 53M libres. Pero estos datos hay que saber interpretarlos ya que, en realidad, tenemos disponibles "available" 667M. Lo que ocurre es que, Linux, tiende a reservarse todo el espacio disponible en forma de buffers (memoria intermedia) y de caché. El contenido de la caché es volátil; por lo tanto Linux puede liberar en gran medida este espacio.

Lo liberamos con:

sync; echo 3 | sudo tee /proc/sys/vm/drop_caches

liberar-cache

Ahora "buff/cache" se ha reducido a 79M y "free" nos indica que tenemos 653M libres. De esta manera, procedemos a su lectura de una forma más fiable. Este paso es recomendable hacerlo después de la escritura y antes de la lectura.

Para obtener la velocidad de lectura tecleamos:

dd if=/tmp/test.tmp of=/dev/null bs=500K count=1024

lectura

La velocidad de lectura conseguida es de 22,5 MB/s. Estos dos últimos pasos (limpieza y lectura) son convenientes realizarlos varias veces y tener en cuenta la media conseguida.

Con esto hemos comprobado que nuestros resultados son bastante inferiores a los 98 MB/s que promete el fabricante y nos ocasionan una duda ¿Merece la pena comprar tarjetas caras a las que no vamos a sacarle todo su partido?

Es evidente que cuanto mejor sea la tarjeta, mejor será el rendimiento, aunque siempre esté por debajo de las especificaciones. Pero no tenemos que olvidar que estamos usando un hardware barato y que sería incongruente montar una tarjeta que cueste más que la propia Raspberrypi. Existen buenas tarjetas como la Sandisk Ultra, usada en esta prueba, que están a unos precios muy asequibles. Esta, de 32G, se puede conseguir en el comercio local por 15€ y sus precios, afortunadamente, bajan día a día.

Bibliografía:
RPi SD cards Rendimiento de las tarjetas SD.
Linux: dominar la administración del sistema Autor: Sébastien ROHAUT. Página 330 "comando free".