Reajustando el ODROID-XU4: Un Conjunto de Conocidas Modificaciones

Como muchos otros, estoy interesado en aprovechar al máximo mi ODROID-XU4. Durante el tiempo que lo he usado, he descubierto varios ajustes que mejoraron la velocidad o disminuyen el consumo de energía. En este artículo me gustaría compartir lo que he aprendido. Este artículo es una traducción autorizada del artículo alemán " ODROID-XU4: Tweaks unter Ubuntu 18.04 und Kernel 4.14". El artículo original en alemán lo puedes encontrar aquí https://blaumedia.com/blog/odroid-xu4-tweaks-unter-ubuntu-18-04-und-kernel-4-14/

Nota: Cualquier cambio en tu sistema puede anular tu garantía y afectar negativamente la estabilidad del sistema, así que haz los cambios bajo tu propia responsabilidad.

Pruebas de rendimiento y overclocking de la CPU

Hardkernel desaconseja cambiar los valores de la velocidad de reloj de la CPU del ODROID-XU4, ya que puede causar problemas de estabilidad y sobrecalentamiento. Para evitar este último problema, recomiendo cambiar el ventilador de viene de serie, tal y como describo en mi artículo: https://blaumedia.com/blog/odroid-xu4-luefter-und-kuehlkoerper-austausch/. El problema más habitual es el estrangulamiento térmico, que conlleva un overclocking automático del procesador para disminuir la posibilidad de dañar el hardware. Desafortunadamente, los problemas de estabilidad se dejan de lado inevitablemente hasta que crees una configuración que funcione perfectamente.

Por defecto, los cuatro núcleos pequeños son los núcleos ARM más eficientes del procesador, y los cuatro núcleos GRANDES, núcleos centrados en el rendimiento, funcionan con una velocidad de reloj máxima de 1,5 GHz y 2,0 GHz, respectivamente. Voy a explicar a continuación cómo personalizar y compilar el kernel para llegar a los 1.6 GHz y 2.1 GHz como velocidades máximas de reloj. No me te topado con ningún problema o fallo durante la semana que han durado mis pruebas, percibiendo un funcionamiento bastante estable.

Para poner de manifiesto el aumento del rendimiento, lleve a cabo una pequeña prueba de rendimiento con sysbench. Aquí tienes los primeros resultados (menos es mejor):

Tipo Nucleos Resultados pruebas sin overclock Resultados pruebas con overclock Diferencia
little.cores 35.644 seconds 33.408 seconds -6.27%
BIG.cores 21.695 seconds 20.624 seconds -4.94%
Both 13.583 seconds 12.994 seconds -4.34%

Como puedes ver, con un aumento de solo 0.1 GHz obtendrá un rendimiento bastante mejor. Especialmente en los núcleos pequeños porque su reloj base es de solo 1.5 GHz. Los comandos del terminal son:

little.cores

$ taskset -c 0,1,2,3 sysbench --test=cpu --num-threads=4 run
BIG.cores
$ taskset -c 4,5,6,7 sysbench --test=cpu --num-threads=4 run
both cores

$ sysbench --test=cpu --num-threads=8 run

Ejecuté tres veces todos los comandos y tomé como resultado la media. Por supuesto, el regulador de la CPU estaba configurado en “performance”. ¡Aunque es suficiente para llevar a cabo las pruebas de rendimiento! ¿Cómo podemos “overclockear” la CPU? Gracias a los comentarios de Ridge en el código del kernel, ha escrito un pequeño tutorial, disponible aquí: https://forum.odroid.com/viewtopic.php?f=93&t=30115 Del manual copié el código necesario; simplemente inicia sesión como root y copia el siguiente script en tu terminal. La compilación puede demorarse hasta unos 30 minutos, así que mientras tanto, ve a por un café y revisa tu correo electrónico.

# Last update: 27. July 2019

# Cloning Git Repo
cd /tmp
git clone --depth 1 https://github.com/hardkernel/linux -b odroidxu4-4.14.y
cd linux

# paste the new clock rates
sed -i 's/<1500000000>/<1600000000>/g' arch/arm/boot/dts/exynos5422-cpus.dtsi
sed -i 's/<2000000000>/<2100000000>/g' arch/arm/boot/dts/exynos5422-cpus.dtsi

sed -i '/&cluster_a15_opp_table {/a \
opp-2100000000 { \
opp-hz = /bits/ 64 <2100000000>; \
opp-microvolt = <1312500>; \
clock-latency-ns = <140000>; \
};' arch/arm/boot/dts/exynos5800.dtsi

sed -i '/&cluster_a7_opp_table {/a \
opp-1600000000 { \
opp-hz = /bits/ 64 <1600000000>; \
opp-microvolt = <1250000>; \
clock-latency-ns = <140000>; \
};' arch/arm/boot/dts/exynos5800.dtsi

sed -i '/PLL_35XX_RATE(2000000000, 250, 3, 0),/i \
PLL_35XX_RATE(2100000000, 175, 2, 0),' drivers/clk/samsung/clk-exynos5420.c

sed -i '/{ 2000000, E5420_EGL_DIV0(3, 7, 7, 4), },/i \
{ 2100000, E5420_EGL_DIV0(3, 7, 7, 4), },' drivers/clk/samsung/clk-exynos5420.c

sed -i '/{ 1500000, E5420_KFC_DIV(3, 5, 3), },/i \
{ 1550000, E5420_KFC_DIV(3, 5, 3), },' drivers/clk/samsung/clk-exynos5420.c

# compile kernel, readme: https://wiki.odroid.com/odroid-xu4/software/building_kernel#y
apt update && apt install -y git gcc g++ build-essential libssl-dev bc
make odroidxu4_defconfig
make -j8
make modules_install
cp -f arch/arm/boot/zImage /media/boot
cp -f arch/arm/boot/dts/exynos5422-odroidxu3.dtb /media/boot
cp -f arch/arm/boot/dts/exynos5422-odroidxu4.dtb /media/boot
cp -f arch/arm/boot/dts/exynos5422-odroidxu3-lite.dtb /media/boot
sync
Cuando la compilación haya terminado, puedes reiniciar el ODROID-XU4 escribiendo el comando "reboot " en tu terminal. Al arrancar, se cogerá el nuevo kernel y se usaran las nuevas frecuencias de reloj que hemos definido.

Prueba de rendimiento y Overclocking de la RAM

La velocidad de reloj de la RAM determina la velocidad de los datos. En otras palabras: cuanto más rápida sea la frecuencia de reloj, mayor será el ancho de banda. Hardkernel ha facilitado el overclock de la RAM ODROID-XU4. Por defecto, funciona a 825 MHz y es extremadamente fácil “overclockearla” a 933 MHz. Todo lo que tiene que hacer es buscar la línea setenv ddr_freq 825 en /media/boot/boot.ini y reemplazar el 825 por 933. De cualquier modo, aquí tienes el código listo para que lo utilices:

$ sed -i 's/setenv ddr_freq 825/setenv ddr_feq 933/' /media/boot/boot.ini
¿Qué mejoras de rendimiento podemos esperar? Nuevamente he realizado una pequeña prueba de rendimiento con sysbench. He utilizado el siguiente comando:
$ sysbench --test=memory --memory-block-size=1K --memory-total-size=10G --num-threads=1 run
El tiempo total de ejecución mejoró, paso de los 10.733 segundos a los 10.592 segundos, un cambio de -1.31%. En este caso, debemos decidir si aceptamos un mayor consumo de energía a cambio de esta "mejora del rendimiento". Yo, por mi parte, he habilitado los 933 MHz. Los pequeños ajustes de ODROID-XU4 proporcionan un buen rendimiento por lo general 🙂

Mejorar la velocidad de E/S

Asignamos los puertos USB3.0 y el puerto Ethernet a BIG.cores Sirva de fuente la siguiente contribución, gracias a Obihoernchen y a la publicación del blog: https://obihoernchen.net/1416/odroid-xu4-tune-network-and-usb-speed/ Lo siguiente procede de su publicación en el blog y la he utilizado para reajustar el ODROID-XU4. ¡Definitivamente deberías echar un vistazo a su blog!

Por defecto, las tareas/eventos creados por los puertos Ethernet o USB (interrupciones) se distribuyen a todos los núcleos. Por lo tanto, puede suceder que a little.core se le asigne la tarea de descargar 10 GB de Internet, donde un BIG.core podría completarlo en un tiempo mucho más corto. Para asegurarnos de que BIG.cores haga esto en el futuro, debes asegurarte desde principio de que el servicio irqbalance esté desactivado:

# systemctl disable irqbalance
Luego abrimos el archivo /etc/rc.local e insertamos lo siguiente antes de la salida 0:

usb2

# echo 6 > /proc/irq/103/smp_affinity_list
usb3
#echo 5 > /proc/irq/104/smp_affinity_list
network (usb3)
#echo 4 > /proc/irq/105/smp_affinity_list
Según las pruebas de rendimiento de Obihoernchen, las transferencias llegaron a alcanzar los 100 Mbit (12.5 MB/s). Para mí, esta configuración se ha convertido en un estándar.

Usando UASP para discos duros USB 3.0

Este es un consejo general y no incluye código de ejemplo, pero es uno de mis ajustes favoritos en el ODROID-XU4. Tal y como se describe y ha sido probado en mi artículo ODROID-XU4: SSD vs. eMMC comparison (Boost!), https://blaumedia.com/blog/odroid-xu4-ssd-vs-emmc-boost/ Por aquel entonces, solía recomendar encarecidamente usar un SSD con un adaptador SATA a USB que admitiese UASP. Aquí tienes una tabla de ese artículo:

Tipo Lectura (Cache) Lectura (Direct) Escritura
eMMC 804.54 MB/s 155.44 MB/s 45.0 MB/s
SSD (sin UASP) 890.57 MB/s 106.09 MB/s 125.00 MB/s
SSD (con UASP) 888.20 MB/s 343.56 MB/s 205.00 MB/s

Los adaptadores UASP mejoran bastante el rendimiento.

Reduciendo el consumo de energía.

Muchas personas seguramente utilizan el ODROID-XU4 como un pequeño servidor doméstico permitiéndoles ahorrar energía, como yo. Para reducir un poco el consumo de energía en el funcionamiento 24/7, aquí tienes algunos consejos.

Desactivando núcleos de la CPU

Prácticamente no requiere ningún esfuerzo desactivar los núcleos individuales. Pero primero debes saber que CPU0-CPU3 es tu little.cores y CPU4-7 son tus BIG.cores. Dependiendo de las necesidades de tu ODROID-XU4, debes considerar qué núcleos te gustaría desactivar.

Reemplaza el 0 en cpu0 por el núcleo deseado

# echo 0 > /sys/devices/system/cpu/cpu0/online

Downclocking de la GPU

De nuevo, el siguiente consejo procede del blog de Obihoernchen. Esta vez se trata de bajar la frecuencia de reloj de la GPU, el procesador de gráficos del ODROID-XU4. En modo servidor, siempre se ejecuta a una velocidad de reloj máxima de 600 MHz; sin ser usada ¡El blog Obihoernchen también incluye una evaluación en este sentido y probablemente se podrá lograr un ahorro de energía de entorno un 20%!

Para alcanzar este beneficio, debe instalar el paquete sysfsutils con APT:

# apt update && apt install sysfsutils
Luego tenemos que agregar lo siguiente en /etc/sysfs.conf dependiendo de tu núcleo (con uname -a puede averiguar con cuál has arrancado):

si el kernel es el 3.10 inserta lo siguiente:

# devices/11800000.mali/dvfs_max_lock = 177
si el kernel es el 4.9 inserta lo siguiente:
# devices/platform/11800000.mali\:/devfreq/11800000.mali\:/governor = powersave
si el kernel es el 4.4 inserta lo siguiente:
# devices/platform/11800000.mali/devfreq/devfreq0/governor = powersave
Con un último "systemctl restart sysfsutils" la mínima frecuencia del reloj queda activado.

Be the first to comment

Leave a Reply