Publicado por & archivado en Benchmarking.

Recientemente me he comprado una memoria USB 3 SanDisk Extreme de 64GB (SDCZ80-064G-FFP), que se supone es de lo más rápido del mercado. Para ver realmente a que velocidad puedo grabar datos desde mi equipo, porque no me fío de los datos de los fabricantes, he hecho lo siguiente.

Primero he insertado la memoria, que se monta automáticamente, y tras borrar las basuras que trae para usar desde Windows o Mac (¡eh! SanDisk, algunos usamos Linux), he abierto un terminal y me he cambiado a la ruta donde está montada la memoria.

cd /media/usuario/8090-DB30/

 

Y ahora, para medir la velocidad de escritura, voy a crear un archivo de 1GB con dd lleno de ceros (en bloques de 4k):

dd if=/dev/zero of=./testfile bs=4k count=262144 status=progress

 

Tardará un poco dependiendo de la velocidad y el tamaño de la memoria o el disco que estés verificando, y mientras crea el archivo no aparece nada en el terminal, hay que esperar para ver los datos. Una vez que haya terminado verás algo como esto:

1024+0 registros leídos
1024+0 registros escritos
1073741824 bytes (1,1 GB) copiados, 5,60934 s, 169 MB/s

 

La velocidad de escritura son unos impresionantes 169 MB/s, que es mucho más rápido que el disco duro mecánico más rápido que haya visto nunca.

Ahora, para probar la velocidad de lectura, hay que borrar el caché de disco, porque si no leerá directo de la RAM y el dato será incorrecto, la primera vez que lo leí me dio nada menos que 4,2GB/s, que evidentemente no se corresponde con la velocidad real de la memoria. Para borrar la caché puedes usar esto:

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

 

Una vez borrado el caché del disco, ya se puede medir la velocidad de lectura:

dd if=./testfile of=/dev/null bs=4k status=progress

 

Este es el resultado:

262144+0 registros leídos
262144+0 registros escritos
1073741824 bytes (1,1 GB) copiados, 5,8765 s, 183 MB/s

En cuanto al SanDisk, estoy impresionado de lo rápido que es, no llega a la velocidad de mi SSD, un Samsung 850 EVO que con el mismo test me dio un resultado de 514 MB/s de escritura y 528 MB/s de lectura, pero para ser una memoria USB las velocidades son impresionantes, y desde luego mucho más rápido que los discos duros convencionales, que son 6 veces más lentos en escritura y 3 veces más lentos en lectura de datos.

El día que las memorias igualen en precio y capacidad a los discos duros estos habrán muerto, pero no se si eso será pronto porque las memorias basadas en flash aun son caras, esta de 64GB me ha costado 37€ y la de 128GB costaba 66€ y por ese dinero puedes comprarte un disco duro de buena marca de 1TB, así que de momento, por el mismo dinero tienes 8 veces más capacidad, pero es lo único, porque los discos duros son más grandes, más lentos y más delicados. El problema es que hoy en día (febrero de 2017), de haber memorias USB de 1TB, haciendo una regla de tres, costarían más de 500€, y eso es demasiado caro.

Actualización mayo 2020: Ya tenemos pendrives de 1TB y discos NVMe de hasta 2TB con velocidades sostenidas de hasta 4000 MB/s, hace unos meses cambié de ordenador y me compré uno con interface PCIe, por tan solo 65€ me he comprado un Crucial P1 CT500P1SSD8 de 500GB que da una velocidad en la prueba de 1700 MB/s.

También acabo de comprar por sólo 6,95€ unos pendrive SanDisk Ultra Flair USB 3.0 Flash Drive 32GB, son monísimos, muy pequeños, y los hay hasta de 256GB. En este caso hice varias pruebas, usando archivos de 1GB como en el caso anterior, en el formato FAT32 que traían ya, pero también en formato EXT4 y NTFS, el resultado fue sorprendente, estos son los datos:

FAT32 (1GiB): 105 MB/s

NTFS (1GiB): 129 MB/s

EXT4 (1GiB): 130 MB/s

La velocidad de escritura no es fácil obtenerla porque el sistema de caché de Linux se traga los datos de forma inmediata dando resultados poco relevantes, pero hice un archivo de 30GB para evitar que el caché pudiera afectar tanto al resultado, al principio la velocidad es alta, pero se va equilibrando y al final el resultado es mucho más aproximado a la realidad, mi ordenador tiene 32GB de memoria, así que para hacer la prueba abrí aplicaciones hasta consumir unos 12GB, vacié el caché y ejecuté dd para crear el archivo de prueba. El resultado es probablemente bastante cercano a la velocidad real de escritura, la de lectura es mucho más precisa. Si se ejecuta un vaciado del caché con sync al tiempo que se crea el archivo de test, el resultado es similar, entre 29 MB/s y 32 MB/s.

EXT4 (30GB)
Escritura: 26,5 MB/s
Lectura: 130 MB/s

 

Usando la prueba de rendimiento de Gnome Disks el resultado es similar:
Tasa media de lectura: 139,3 MB/s
Tasa media de escritura: 28,2 MB/s

En las pruebas con dd se ve una pérdida de rendimiento de FAT32 respecto a EXT4 y NTFS, pero usando hdparm para medir la velocidad fue aun peor.

hdparm -t /dev/sda

hdparm (FAT32)
Timing buffered disk reads: 188 MB in 3.02 seconds = 62.34 MB/sec

hdparm (EXT4)
Timing buffered disk reads: 436 MB in 3.01 seconds = 144.81 MB/sec

hdparm (NTFS)
Timing buffered disk reads: 442 MB in 3.01 seconds = 147.81 MB/sec

En este test la velocidad en NTFS y EXT4 es más del doble que en FAT32, lo que deja claro que si se necesita pasar archivos entre sistemas Windows y Linux es mejor usar NTFS.

Una reflexión es que aunque estos pequeños pendrives siguen sin llegar a la velocidad del modelo «Extreme» (que ha bajado de precio a unos 25€ con la salida de la nueva generación), por menos de 7€ se pueden obtener unas tasas de transferencia bastante buenas.

Personalmente uso estos pendrives para hacer live CDs con multibootcd que contienen varias distribuciones de Linux y lógicamente interesa mucho que sean rápidos, pero con transferencias sobre los 130 MB/s es más que suficiente para este uso.

Los nuevos pendrives USB 3.1 de alta velocidad y 128GB, como el Sandisk Extreme Pro (44€) o el Corsair Flash Voyager GTX (67€), prometen transferencias de más de 400MB/s, (habría que probarlos). En los comentarios de compradores el modelo de Sandisk parece tener bastantes fallos, por lo que de comprar alguno creo que me inclinaría por el Corsair aunque sea más caro, además está disponible hasta 1TB (368€).

A pesar de que son el triple de rápidos no compensa el coste para cualquier aplicación, por ejemplo, con el SanDisk Ultra Flair arrancan los discos de instalación de Linux en segundos, por lo que no se obtendría una ventaja importante al tener más velocidad para esta aplicación. El modelo de 128GB del Ultra Flair cuesta 18€, así que por el mismo precio del Corsair se pueden comprar casi 4 Ultra Flair de la misma capacidad.

Tal vez si se necesitan transferir archivos muy grandes, como vídeos, pueda compensar la velocidad añadida, pero hay que tener en cuenta que el disco de origen debe tener también al menos la misma velocidad, por lo que los archivos deben estar en un disco SSD o NVMe para que se pueda aprovechar esa velocidad, si el origen es un disco SATA convencional o una red o a través de una conexión WiFi, no habrá diferencia.

Además, por el precio de un Corsair Flash Voyager GTX de 1TB es posible comprar un disco SATA de 14TB, por ejemplo el Seagate Exos 14TB (368€), que puede ofrecer una tasa de transferencia sostenida de 260MB/s, por lo que aun sigue siendo demasiado caro como alternativa para almacenar grandes cantidades de datos, cierto que no es comparable el tamaño y el peso de un pendrive con un disco duro, pero también es 14 veces más caro.

Las memorias flash avanzan a gran velocidad, cada vez tienen mayor densidad y más duración, pero creo que aun pasará mucho tiempo hasta que puedan igualar la relación capacidad/precio de los discos duros mecánicos, que siguen siendo más convenientes para almacenar grandes cantidades de datos.

 

3 Comentarios para “Medir la velocidad de un disco o memoria USB”

  1. Linuxica

    Gracias por la aportación, pero a mí no funciona.
    Cada vez que mido la velocidad de escritura el resultado cambia y es significativo. Los 7,3 mb que me dio el otro día se han reducido hoy a 3.9 en un primer intento y a 3.5 en un segundo.
    He procurado en este último intento no lanzar ninguna otra aplicación que pudiera ralentizar su escritura, pero aún así la velocidad ha bajado.
    ¿A ti siempre te da el mismo resultado?

    Responder
    • admin

      A mi me da resultados muy consistentes y lo hago habitualmente en muchos equipos y con cada nuevo disco que compro.

      Variaciones importantes en distintas pruebas podrían ser resultado de una escritura diferida en disco y que se esté tragando todo lo que genera dd en la RAM o en un caché del disco, sobre todo si son discos híbridos (mecánicos con flash).

      Podría estar escribiendo en el caché y que al acabarse la memoria tirara de swap, lo que explicaría por qué se ralentiza algunas veces.

      Si la velocidad de escritura es mayor que la de lectura (tras el drop del caché), casi seguro que es eso lo que está pasando, en esos casos debes tomar como buena la velocidad de lectura, pero no la de escritura.

      Podrías probar a desconectar el swap:
      sudo swapoff -a

      Y hacer la prueba con un archivo mucho más grande para que no entre en la memoria (esto genera un archivo de 16GB):
      dd if=/dev/zero of=./testfile bs=8k count=2048000

      Tardará más, pero si te da resultados más consistentes y velocidades de escritura más bajas que de lectura, sería más acertado hacerlo así.

      No olvides reconectar el swap tras la prueba:
      sudo swapon -a

      Responder
      • Linuxica

        Hola, gracias por la aclaración.
        Doy por hecho que es lo que dices porque en efecto cuando copio archivos desde el administrador de archivos a veces los muestra como ya transferidos en «notificaciones» cuando realmente no lo están, de ahí que quisiera comprobar la velocidad real de mis usb.
        Pensé que eso no sucedería desde la línea de comandos y probé con «cp» pero ahí tampoco indica la tasa de transferencia, así que lo intenté con la solución que tú proponías.
        Un saludo y muchas gracias por la ayuda y por tus magníficos tutoriales.

        Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *