¿Por qué vale la pena instalar un sistema operativo de 64 bits en la Raspberry Pi4?

imagen

Uno de los beneficios de trabajar para una empresa de software es que a menudo tiene la oportunidad de probar nuevos prototipos de hardware. Sin embargo, no en este caso: ¡compré una Raspberry Pi4 porque es muy barata!

El Raspberry Pi4 tiene un ARM Cortex A72 de cuatro núcleos, hasta 4 GB de memoria y un puerto Gigabit Ethernet, todo por solo $ 35.

En Raspberry Pi4 tengo OS Raspbian (basado en Debian), y la biblioteca de productos terminados, así que lo puse en la tarjeta SD para arrancar más rápido. Busqué en syslog y noté que tanto el kernel como todos los programas de usuario se compilaron como armv7, es decir, para memoria de 32 bits.

Sé que Raspberry Pi4 admite 64 bits, por lo que no quería ejecutar un sistema operativo de 32 bits. Tomé otra tarjeta de memoria y le puse Debian. Debian, que no contiene nada superfluo, se compiló como aarch64 , lo que significa memoria de 64 bits.

Después de descargar el sistema operativo de 64 bits, me interesé por lo mejor que funciona en 32 bits, por lo que realicé varias pruebas.

Pruebas sintéticas de velocidad


Lo primero que se me ocurrió fue la antigua prueba dhrystone, que existe desde el principio de los tiempos. Este programa fue escrito en 1988 y trata con cálculos matemáticos. Es poco probable que pueda simular la carga actual, y solo podemos usarla para mantener algún tipo de conectividad con hardware y programas antiguos.



Una aplicación de resumen moderna se simula mejor mediante cálculos hash, por lo que quería ejecutar una prueba con SHA1. Desafortunadamente, la utilidad sha1sum se compiló sin admitir libssl o funciones criptográficas del núcleo, por lo que tuve que compilarla desde la fuente.

Para evitar cuellos de botella en E / S, calculo un hash de un archivo de 2 GB con la opción truncar -s 2 GB, por lo que no hubo entrada ni salida de la tarjeta:



SHA1 es una prueba más realista que dhrystone, porque este algoritmo se usa en una gran cantidad de aplicaciones: torrents, git, etc.

RAM


Un sistema de 64 bits proporciona acceso a la memoria de 8 bytes por lectura / escritura. Escribí un programa simple que coloca un gran búfer: ella lo escribe y luego lo lee. Para garantizar la asignación de memoria real, utilicé mlock (). En esta prueba, el volumen del búfer es de 2 GB: el búfer de 3 GB funcionó en modo de 64 bits, y en el modo de 32 bits generó un error de "falta de memoria".



Codificación de audio


Noté que muchos usuarios de Raspberry Pi4 usan una computadora como centro multimedia, así que comencé la tarea de codificar audio con los dos códecs más populares.

Codifiqué la composición de "Ecos" de Pink Floyd porque es una pista bastante larga y puedes obtener valores medidos de ella. Para evitar retrasos de E / S, el archivo de origen y el de destino se almacenaron en ramfs:





Mediciones de velocidad de red


Otra opción para usar Raspberry Pi4 es como VPN o firewall. No recomiendo usar dichos sistemas para tales fines, pero muchas personas aún tienen una conexión lenta a Internet (menos de 100 MB), por lo que es posible que no presten atención al funcionamiento lento de la Raspberry Pi4.

Primera pregunta: ¿cuánto tráfico puede manejar la Raspberry Pi4? Necesitamos medir la potencia de red de la computadora, sin las limitaciones de las interfaces físicas, así que comencé la sesión de iperf3 entre los dos contenedores. Sin embargo, los contenedores intercambian datos a través de un par de veths, y veth acelera el tráfico a través de descargas falsas.

La descarga del cálculo de la suma de comprobación de IP se realiza simplemente al negarse a contarla, y al descargar la segmentación de TCP al negarse a segmentar y volver a ensamblar el tráfico: una gran parte de los datos de 64K simplemente se transfiere a la memoria tal como está.

Para evitar tales momentos, prohibí la descarga con el comando

ethtool -K veth0 tx off rx off tso off gro off gso off



Cortafuegos


El equipo de red más rápido es capaz de eliminar parte del tráfico, y la forma más rápida de hacerlo es a través de la regla TC. Para no alcanzar la velocidad máxima posible, utilicé el tamaño mínimo de trama de Ethernet, 64b.



Aunque ambos sistemas no alcanzaron la velocidad máxima de transferencia (1,5 Mb / s), el núcleo de 64 bits mostró una velocidad ligeramente mayor que el de 32 bits. Si desea usar Raspberry Pi4 como firewall, asegúrese de usar el kernel de 64 bits.

VPN


Otro caso de uso común para Raspberry Pi4 es un servidor VPN, o más bien, OpenVPN. Prefiero WireGuard, así que revisé ambos programas porque ambos son fáciles de instalar:



como era de esperar, OpenVPN es 10 veces más lento que WireGuard. Lo que no se esperaba era que OpenVPN funciona a la misma velocidad a 32 y 64 bps. WireGuard casi satura el puerto gigabit en ambos casos, tal vez hemos alcanzado el límite de NIC.

Para averiguar si WireGuard podría funcionar aún más rápido, realicé otra prueba con dos contenedores que no usaban Ethernet físico. El único problema era que tanto el cliente como el servidor iperf3 se estaban ejecutando en la Raspberry Pi4, cargando dos núcleos.



Como era de esperar, OpenVPN y WireGuard de 32 bits, limitados por la CPU, obtuvieron peores resultados, y WireGuard de 64 bits tuvo un mejor desempeño.

Conclusiones


A menudo leo declaraciones como "no vale la pena", "ganarás unos pocos milisegundos", etc., simplemente porque la Raspberry Pi4 no es una computadora muy poderosa. ¡Esto no es verdad! Como sabe cualquier persona involucrada en equipos integrados, la optimización lenta del software de hardware es aún más importante que en el hardware rápido.

Ya sabía que un sistema operativo de 64 bits funcionaría mejor en Raspberry Pi4, pero no sabía cuánto mejor. Entonces hice todas estas pruebas. ¡Espero que lo hayan disfrutado!

All Articles