Cuando las personas planea utilizar una placa de desarrollo como un Raspberry Pi para su proyecto, se centran principalmente en las especificaciones de la placa de desarrollo en sí, así como el soporte de software. Pero seleccionar los accesorios adecuados puede ser igual de crucial para un buen rendimiento y estabilidad. Por ejemplo, la selección de una fuente de alimentación adecuada es importante, ya que la placa puede colgarse o reiniciarse si no se alimenta con el voltaje y potencia adecuados. Igual de importante es también la selección de un cable micro USB, seleccionando uno con una resistencia mínima que se puede lograr a través de cables más cortos o un valor bajo AWG (mayor diámetro del conductor, contraintuitivamente los el calibre de un conductor esta inversamente relacionado con su diámetro). Otro elemento importante que puede afectar la estabilidad y el rendimiento de los sistemas son las tarjetas microSD, ya que se utiliza para albergar el sistema operativo en las placas de desarrollo.
Hasta hace pocos años atras, las tarjetas microSD eran el principal medio utilizado para almacenar datos como fotos, videos y música. En esos casos de uso, contienen archivos grandes que se benefician de altas velocidades de lectura y escritura secuenciales. Es por eso que la asociación SD creó diferentes clases para especificar una velocidad de escritura mínima con cada “clase de velocidad”, “clase de velocidad UHS” y más recientemente “clase de velocidad de vídeo”. Aquí un diagrama que ilustra dichas especificaciones:
Esta clasificación es útil, ya que no se necesitarán las mismas velocidades de escritura para copiar archivos de música o grabar archivos de vídeos en una cámara de 4K y las tarjetas con una clase inferior normalmente son más baratas. Tenga en cuenta que la mayoría (si es que no todos) las tarjetas de desarrollo de bajo costo son compatibles con UHS-II o interfaz UHS-III, por lo que pueden funcionar, pero no será capaz de alcanzar el máximo rendimiento de la tarjeta. Los controladores de tarjetas MicroSD también se conectan a menudo a través de SDIO, lo que limita el rendimiento secuencial a unos 23 MB/s.
Sin embargo, esas clases son sólo marginalmente útiles para las tarjetas microSD utilizadas en las tarjetas de desarrollo, ya que los sistemas operativos generan muchas pequeñas operaciones de lectura y escritura, por ejemplo, para bases de datos y cachés web, en lugar de manejar archivos grandes leidos y escritos secuencialmente. Es por eso que los dispositivos de almacenamiento también pueden incluir un parámetro llamado IOPS (Entradas/Salidas por segundo) que son más útiles para este tipo de casos de uso. La tabla a continuación sobre Samsung eMMC y UFS flash chip muestra algunos de esos números:
El único problema es que hasta hace poco, no había manera de que se pudiera saber los números de IOPS de lectura y escritura mínimos para tarjetas SD, ya que simplemente no estaban disponibles por los fabricantes, por lo que las personas recomendaban tarjetas microSD clase 10 que pueden o no ser las más adecuados para su uso en tarjetas de desarrollo. Sin embargo, desde la introducción del almacenamiento externo adoptado en Android, donde las tarjetas micro SD se podrían utilizar para aplicaciones en lugar de sólo datos, los valores de IOPS se hicieron más importante y la asociación SD ha introducido “clases de rendimiento” y las nuevas clases son A1 y A2 para tarjetas SD especificando Valores IOPS de lectura y escritura mínimos junto con una velocidad de escritura secuencial sostenida mínima de 10 MB/s.
Aquí un diagrama con las especificaciones de las nuevas “Clases de Rendimiento”:
En teoría esto suena genial y podríamos suponer que el problema resuelto entonces. Pero no es así, ya que los fabricantes sólo han empezado a usar logos de rendimiento de aplicaciones en sus tarjetas microSD de mayor capacidad con capacidades de 256 GB o mayores. Que por lo general suelen costar varias veces el precio de una placa de desarrollo típica. Por lo tanto, necesitamos confiar en la comunidad para probar los valores de IOPS de lectura y escritura.
Hay varios programas que pueden probar el rendimiento de las tarjetas microSD. Por ejemplo en Linux podemos usar hdparm y dd. Pero hdparm sólo prueba la velocidad secuencial por un tiempo muy corto y dd sólo prueba la velocidad secuencial, además muchas personas no incluyen el tiempo que tardó en agotar el caché a la tarjeta real, lo que conduce a resultados potencialmente engañosos y en su mayoría irrelevante para el uso en tarjetas de desarrollo.
Así que en su lugar, existen herramientas específicas para probar tanto las velocidades secuenciales como el rendimiento de Entrada/Salida al azar. Bonnie++ es uno de ellos, pero recientemente iozone se ha convertido en la referencia para las pruebas de Entrada/Salida de disco.
Muchos tutoriales recomiendan flash firmware con Win32DiskImager en Windows, o dd en Linux. Sin embargo, aunque no he experimentado el problema, me han dicho que este último no siempre detecta errores al parpadear, y ahora se recomienda una nueva herramienta: Etcher. Funciona en Windows, Linux o Mac OS usando una GUI o la línea de comandos, y verificará la tarjeta SD después de parpadear asegurándose de que nada ha fallado durante el proceso.
Así que si deseamos confirmar que tanto rinde una tarjeta microSD en nuestro Raspberry Pi, no hay como realizar pruebas para verificar que obtenemos aquello por lo que pagamos. Espero que esta información sea últil y cualquier duda la pueden dejar en los comentarios.