MySQL en una Raspberry Pi 3 (II)

By | 26/12/2016

Introducción

En uno de mis últimos artículos me lamentaba de que no existieran versiones de 64 bits de Linux para la Raspberry Pi 3, lo que intuitivamente me hacía pensar que MySQL no podría hacer uso de todas las capacidades de la plataforma. Recientemente SUSE liberó la primera versión de su sistema operativo SUSE Linux Enterprise Server 12 para la Raspberry Pi 3, la cual funciona en 64 bits (aarch64).

En este artículo se analiza la performance de MySQL 5.7.11 sobre SLES 12 SP2 para Raspberry Pi  3 trabajando con las mismas configuraciones, bases de datos y pruebas del artículo anterior.

Entorno de pruebas

A modo de recordatorio, las especificaciones de la Raspberry Pi 3 Model B y la memoria microSD son:

  • Procesador 4 x 1.2GHz 64-bit ARMv8
  • 1 GB de memoria RAM
  • Conexión a LAN de 100Mbps
  • Memoria SD SanDisk Ultra 32GB microSDHC UHS-I

El sistema operativo utilizado es SUSE Linux Enterprise Server 12 SP2. SUSE distribuye una versión de prueba del sistema operativo que puede utilizarse por 365 días (renovables) y que puede descargarse previo registro a través de su página web. También proveen una versión que no requiere registro pero que no posee acceso a repositorios y/o actualizaciones.

La descarga es un archivo comprimido raw (942MB comprimido, 5,41GB sin comprimir) , que puede copiarse a una memoria microSD mediante HDD Raw Copy Tool en Windows o mediante dd en Linux.

Resultados de las pruebas

Contrario a lo que esperaba, los resultados en SLES 12 fueron prácticamente idénticos a los obtenidos en Ubuntu Mate 16.04. En las 10 consultas ejecutadas sobre las base de datos la diferencia entre ambos sistemas operativos (siempre con las mismas configuraciones) no escapaba de entre -5% y +5% lo que parece indicar que el procesador no es el principal cuello de botella de la plataforma.

Esta sorpresa me llevó a realizar algunas modificaciones sobre my.cnf, a fines de poder determinar donde puede encontrarse el cuello de botella. Al aumentar el tamaño del caché InnoDB mediante innodb_buffer_pool_size, intentando dar lugar a que todas las tablas queden en memoria, llegué a obtener una mejora de hasta el 60%. Esto claramente indica que el principal cuello de botella es el almacenamiento.

Las limitaciones de la Raspberry Pi en cuanto a velocidad de lectura y escritura se encuentran sobradamente documentadas. Existe además mucha información en la red sobre el rendimiento de diferentes memorias microSD en la Raspberry Pi. Una de las pruebas más interesantes demuestra diferencias de más del 200% y puede verse en la siguiente tabla (el tiempo indicado para la Raspberry Pi 3 corresponde al tiempo de instalación de NOOBS. Ver fuente):

Tamaño Velocidad Fabricante Especificaciones (R/W) Windows Raspberry Pi 3
32 GB U3 SanDisk Extreme Plus 95 / 90 MB/s 7,8 MB/s 5,7 MB/s
16 GB U3 SanDisk Extreme 90 / 40 MB/s 7,8 MB/s 5,7 MB/s
32 GB U1 Transcend 400X 45 / 25 MB/s 5,5 MB/s 4,1 MB/s
8 GB U1 Kingston 45 / 10 MB/s 3,1 MB/s 2,8 MB/s
32 GB Class 4 SanDisk 16 / 6 MB/s 2,6 MB/s 2,3 MB/s
8 GB Class 4 SanDisk 12 / 6 MB/s 2,4 MB/s 2,2 MB/s

Benchmarks más específicos (esto es, concentrados en la velocidad de lectura y escritura) determinan que la velocidad máxima de lectura/escritura para la Raspberry Pi 3 Model B se encuentra en el orden de los 20MB/s (sin overclock), muy por debajo de lo que puede conseguirse en una PC estándar y lo que permite explicar en gran medida la diferencia de rendimiento de MySQL entre una Raspberry Pi y una PC.

Resumen

En base a las pruebas realizadas podemos afirmar que el rendimiento de MySQL en una Raspberry Pi 3 es similar en el caso de utilizar un sistema operativo de 32 o 64 bits y que el principal cuello de botella está en el almacenamiento, existiendo grandes diferencias en función del modelo de memoria microSD utilizado.

Más información