Overclocking de Raspberry Pi 3 para MySQL

Introducción

No queda ninguna duda que la Raspberry Pi 3 es un dispositivo maravilloso: por menos de $40 dólares tenemos un procesador quad-core de 64 bits a 1,2 Ghz y 1 GB de RAM que permiten ejecutar MySQL con una muy buena relación precio/performance. A pesar de esto, siempre existen posibilidades de aumentar las prestaciones de un equipo mediante overclocking para así obtener un mejor rendimiento.

En este artículo se analizan las capacidades de overclocking de la Raspberry Pi 3 Model B y como influye el overclocking en el rendimiento de MySQL.

Entorno de pruebas

Las pruebas fueron realizadas sobre una Raspberry Pi 3 Model B, que cuenta con el siguiente hardware:

  • Procesador 4 x 1.2GHz 64-bit ARMv8
  • 1 GB de memoria RAM
  • Memoria SD SanDisk Ultra 32GB microSDHC UHS-I
  • Conexión a LAN de 100Mbps
  • Ubuntu Mate 16.04 (32 bits)
  • MySQL 5.7.17

Las bases de datos son las mismas utilizadas en este artículo.

Overclocking del Procesador y la Memoria

Un aspecto interesante de la Raspberry Pi es que desde el 19 de septiembre de 2012 es posible overclockear la placa sin anular la garantía (ver este artículo al respecto). El overclocking en una placa puede ser detectado ya que algunos cambios en la configuración (over_voltage > 6, force_turbo = 1 y temp_limit > 85) activan un bit de garantía (o bit de overclocking) en el SoC de forma permanente.

La mayoría de los aspectos overclockeables de la Raspberry Pi se encuentran en /boot/config.txt (archivo que cumple la función de una BIOS) y que, entre otros parámetros, permite definir:

  • gpu_mem: memoria disponible para la GPU en megabytes (mínimo es 16 MB)
  • arm_freq: frecuencia de la CPU ARM en MHz. El valor por defecto es 700 MHz aunque la Raspberry Pi 3 viene configurada para trabajar en 600 MHz. Este es el valor mínimo de funcionamiento (o frecuencia en idle) ya que la frecuencia es ajustada de forma automática hasta los 1200 MHz en caso de ser necesario.
  • core_freq: define la frecuencia del GPU. Tiene un impacto en la CPU ya que esta variable define la frecuencia de la caché L2. El valor por defecto es 250 MHz.
  • sdram_freq: frecuencia de la memoria RAM en MHz. El valor por defecto es 400 MHz.
  • over_voltage: define el ajuste de voltaje dado a la CPU/GPU. Varía entre -16 (0.8V) y 8 (1.4V) con pasos de 0.025V. El valor por defecto es 0 que representa 1.2V.
  • force_turbo: deshabilita la cpufreq dinámica y los valores mínimos por defecto. Es requerido setear este parámetro en 1 (por defecto es 0) para poder hacer uso de varias de las opciones de configuración.
  • temp_limit: límite de temperatura (por defecto 85 grados celsius). Si la temperatura definida es superada, los valores de frecuencia son reseteados a default.

Los valores seteados en las pruebas fueron:

arm_freq=1350
core_freq=500
over_voltage=4
disable_splash=1
force_turbo=1
boot_delay=1
sdram_freq=450

Los cuales brindaron una mejora promedio total de casi el 10% en la ejecución de las consultas. Estos valores de configuración, además, brindaron estabilidad en la placa ya que se mantuvo trabajando por más de 24hs sin encontrar ningún inconveniente.

Overclocking de la memoria microSD

En un artículo reciente observé que la memoria microSD parece ser el principal cuello de botella de la Raspberry Pi a la hora de ejecutar MySQL. Diversas fuentes en Internet (ver referencias al pie de este artículo) indican que la velocidad máxima por default está en el orden de los 20 MB/s y con overcloking llega a los 40 MB/s.

La memoria utilizada en las pruebas (SanDisk Ultra 32GB microSDHC UHS-I) bajo Windows permite lecturas secuenciales de hasta 85 MB/s y lecturas aleatorias de hasta 7 MB/s (pruebas realizadas con CrystalDiskMark 5.2.1). Lamentablemente en la Raspberry Pi la velocidad de lectura (sin overcloking) fue de solo 13.29 MB/s.

El overclocking de la memoria microSD esta limitado a la frecuencia de lectura que por defecto se encuentra en 50Mhz pero sin ningún problema puede ser aumentada a 100Mhz (soportado por memorias UHS y superiores). Aumentar la frecuencia a 100 Mhz brinda una mejora increíble ya que la velocidad de lectura pasó a 26.55 MB/s, prácticamente el doble. El cambio en frecuencia puede hacerse modificando/agregando el siguiente parámetro al archivo /boot/config.txt

dtparam=sd_overclock=100

O bien, ejecutando el siguiente comando:

sudo bash -c 'printf "dtoverlay=sdhost,overclock_50=100\n" >> /boot/config.txt'

Las pruebas de velocidad en ambos casos fueron realizadas mediante este script.

Para el caso de MySQL la mejora (incluyendo la mejora dada por el overclocking del procesador y la memoria) llegó a ser de hasta el 60% (en el caso particular de la Consulta 10, con un tiempo original de 5.615 segundos y un tiempo overclockeado de 3.510 segundos) siendo la mejora promedio total del 18%.

Comentarios adicionales

Algunas cuestiones adicionales a tener en cuenta a la hora de hacer overclocking:

  1. Las capacidades de overclocking de cada placa son independientes y no necesariamente cualquier Raspberry Pi 3 funcionará de forma estable con los valores mencionados en este post. Algunas placas incluso soportarán velocidades superiores. Sugiero avanzar en pequeños pasos (5 Mhz o 10 Mhz) para evaluar la estabilidad de la placa y detectar el umbral de estabilidad.
  2. Si bien es sugerido utilizar un disipador y/o ventilador en el procesador y la memoria, en las pruebas realizadas para este artículo no se utilizó ninguno.
  3. Al hacer overclocking se sugiere utilizar una fuente de buena calidad ya que desde luego la placa consumirá más electricidad. La fuente debería proveer como mínimo 2 o 2.5 A.
  4. En caso de perder estabilidad en el sistema, presionar la tecla Shift mientra la Raspberry Pi bootea para deshabilitar todas las opciones de overclocking.

Resumen

Las pruebas realizadas permiten confirmar que hacer overclocking en la Raspberry Pi 3 Model B brinda una mejora promedio de aproximadamente el 18% en la ejecución de MySQL.

Más información

  • https://www.raspberrypi.org/documentation/configuration/config-txt.md
  • http://www.jeffgeerling.com/blog/2016/how-overclock-microsd-card-reader-on-raspberry-pi-3
  • http://www.pidramble.com/wiki/benchmarks/microsd-cards
  • https://github.com/retropie/retropie-setup/wiki/Overclocking
  • https://haydenjames.io/raspberry-pi-3-overclock/
  • https://github.com/retropie/retropie-setup/wiki/Overclocking