¿Cómo mejorar el tiempo de arranque de Raspberry Pi?

27

Estoy creando una aplicación remota incorporable que no se activará permanentemente. He estado jugando con diferentes distribuciones de SO y puedo reducir el tiempo de arranque sustancialmente usando mejores tarjetas SD con velocidades de lectura más rápidas. No estoy fijado a ninguna distribución en particular, por lo que puedo despojarme tanto como sea necesario para usar una distribución mínima de Linux.

(Intenté buscar puntos de referencia que la gente haya ejecutado para mejorar el tiempo de arranque, pero no he encontrado nada con cifras difíciles).

También podría usar la raíz de compilación (vea también el video de YouTube Raspberry Pi - Super Fast Boot Time - Marshmallow Entertainment System ) ...

Layke
fuente
Debes votar para cerrar esta pregunta. Luego, los usuarios serán redirigidos a la pregunta original y agregarán más respuestas. Ya que aún no se ha marcado como contestado.
Piotr Kula
Solo estoy pensando que esta tiene mucha actividad (las opiniones obviamente no son tan altas, simplemente porque tiene menos de un día), más votos y más respuestas, así que pensé que sería mejor dejar esta. arriba, y luego posiblemente mueva su respuesta aquí. Es realmente una cuestión de conveniencia, creo. 1 usuario mueve su respuesta en lugar de 3 moviendo la suya y, por lo tanto, pierde todos los votos, conversaciones y cosas por el estilo. ¿Hay alguna razón por la que deberíamos ir de una manera u otra? No me importa, solo estoy pensando que las otras personas que respondieron pueden no querer moverse, y así perdemos contenido
RPiAwesomeness
@ppumkin Echa un vistazo a esta publicación de Meta.SE sobre el cierre de engaños: no elimines los buenos duplicados y esta publicación de blog de SE . Creo que están de acuerdo con mi punto anterior. A menos que el duplicado sea una copia y pegue del otro, o una calidad terrible, y debido a que este tiene muchas respuestas / actividad, deberíamos dejarlos abiertos.
RPiAwesomeness
1
@ppumkin Buenos puntos, siempre que este no se elimine. Originalmente revisé Leave Open, pero supongo que marcar esto como un duplicado es la forma correcta de hacerlo. Lo único que se me ocurre es que al menos quiero tener un Q / A de mayor calidad en el original marcado que en el duplicado. Definitivamente ese no es el caso aquí.
RPiAwesomeness
1
Sí, tienes razón. Hay más respuestas aquí. Parece haber recibido más atención. Supongo que debemos dejar que los moderadores decidan, ya que sabrán mejor qué hacer aquí. De todas formas. Bien hecho para obtener una gran cantidad de votos en su respuesta :) Estoy seguro de que el OP aprecia su contribución. +1
Piotr Kula

Respuestas:

13

Si combina Arch Linux con las características que sugirió Fred, debería obtener un sistema operativo de arranque generalmente rápido.

Lo que ralentiza los tiempos de arranque del sistema operativo es

  1. Velocidades lentas de lectura / escritura (E / S).

    Por lo que el uso de una tarjeta SD más rápida será ayudar, una tarjeta Clase 10 será sustancialmente más rápido que una tarjeta de clase 4 . No entendí cómo funcionaban las clases de tarjetas SD, y eso se ha señalado con bastante claridad en los comentarios, mi mal. En realidad, una tarjeta de Clase 10 será más rápida que una tarjeta de Clase 4 para transferencias de archivos grandes , como video HD y demás. Aparentemente, la clase 4 funciona igual de bien con archivos más pequeños. De nuevo, mi mal, pero bueno, todos aprendemos de vez en cuando.

  2. Una secuencia de inicio empantanada.

    Si tiene mucho software que se inicia durante la fase de arranque, el tiempo de arranque será más lento. Más software iniciando == Mayor tiempo de arranque.

    Por lo tanto, si necesita un arranque rápido, corte la mayor cantidad de software posible de la secuencia de inicio. Puede crear un script simple (o estoy seguro de que hay uno) que iniciará el software una vez que se complete la secuencia de inicio principal, extendiendo un poco más la carga.

Eso es básicamente eso. Arch Linux es probablemente el camino a seguir, combinado con las características que Fred mencionó, como dije antes. Arch es un sistema operativo muy mínimo y puede que no sea lo mejor para un principiante, pero si tiene experiencia en Linux, hágalo. Solo requiere un poco de configuración, ya que viene con el mínimo necesario para instalar y eso es todo .

Espero que tu proyecto salga bien!

RPiAwesomeness
fuente
3
La "clase" de la tarjeta SD es un indicador muy pobre de rendimiento en un sistema integrado. Las clasificaciones de "clase" son para transferencias de archivos secuenciales grandes (como las que tiene con una cámara digital de varios megapíxeles), no para archivos pequeños como secuencias de comandos de inicio. Las tarjetas de clase 4 superan regularmente a la mayoría de las tarjetas de clase 10 en operaciones de lectura y escritura de 4k en un factor de 100 o más. Hay tarjetas de Clase 10 con buenos IOPS, pero esos modelos son pocos y distantes entre sí.
Ben Voigt
Sí, estoy de acuerdo con @BenVoigt: cuando usé la clase 4, parecía que las pequeñas escrituras y las actualizaciones eran rápidas, pero sí las transferencias grandes en la clase 10 son mucho mejores. Desearía poder usar una tarjeta RAM alimentada por batería para un rendimiento instantáneo.
Piotr Kula
Lo siento, no lo sabía. Lo arreglaré de inmediato. Había entendido que cuanto mayor es la clase, mayor es la velocidad. Gracias por señalar eso, acabo de aprender algo: D Gracias por los votos a favor también :)
RPiAwesomeness
Me pregunto por qué mi respuesta fue rechazada. No me importa por completo la pérdida de reputación, solo quiero saber qué mereció el voto negativo, para poder mejorar mi respuesta.
RPiAwesomeness
7

Sugiero usar Arch Linux.

Obtengo un tiempo de arranque normal de 5s (kernel) + 5s (para el espacio de usuario) y no requiere mucho esfuerzo, ya que se usa systemdpara init.

10robinho
fuente
2
@goldilocks, también puedes usar systemd en raspbian. Se redujo a la mitad el tiempo de arranque para mí.
John La Rooy
@JohnLaRooy Es bueno saberlo. Supuse que la diferencia de rendimiento frente a init tradicional se debe principalmente a que systemd puede paralelizarse, pero probablemente también ahorre tiempo al no tener que bifurcar e interpretar los scripts de shell para todo.
Ricitos de oro
@goldilocks No estoy de acuerdo, lo intenté y systemdhace mucha diferencia en comparación con sysvinit. Mira mi respuesta .
Basj
@Basj Aún mejor saberlo. He eliminado mi comentario al respecto, probablemente no hace "mucha diferencia en términos de tiempos de arranque ya que es [en] un solo núcleo". Utilizo principalmente systemd, pero TBH no presto mucha atención a los tiempos de arranque.
Ricitos de oro
7

Escribí un artículo aquí al respecto.

En resumen: uso systemd.

Puede hacer que su aplicación RaspberryPi se ejecute fácilmente menos de 8 segundos después de enchufar el cable de alimentación, o menos de 3 segundos después de que se haya iniciado el arranque de Linux.

Un ejemplo aquí, mi servicio se llama samplerbox.service:

ingrese la descripción de la imagen aquí

Nota: No he intentado optimizar el tiempo de espacio del usuario porque no lo necesito: mi aplicación se inicia temprano de todos modos, por lo que no me importa si la atribución de DHCP / IP de red tarda 8 segundos después de que se haya lanzado mi aplicación.

Basj
fuente
4

Probablemente, la solución óptima es crear una distribución que haga exactamente lo que quieres que arranque, de esta manera tienes garantizadas tiempos mínimos (usando un sistema de inicio minimalista como sinit ). Alternativamente, puede considerar usar la función de suspensión al disco ( hibernación ) del kernel de Linux. Una vez arrancado, las operaciones de suspensión y reanudación más adelante son bastante rápidas y, mientras tanto, el sistema está completamente apagado.

Fred
fuente
3

El uso de un kernel enlazado estáticamente en lugar de controladores modprobing también puede aumentar drásticamente el rendimiento. Hay que hacer otras optimizaciones configurando y volviendo a compilar cuidadosamente un kernel.

Mono Código Borracho
fuente
1
Perdón por encontrar una respuesta de años. Pero, ¿puede darnos más información sobre cómo se podría "usar un kernel vinculado estáticamente"?
César
Echa un vistazo aquí: raspberrypi.org/documentation/linux/kernel/building.md .
Drunken Code Monkey
Para agregar a esto, para compilar un kernel vinculado estáticamente solo necesita ir a 'make menuconfig' o 'make xconfig' e incluir los controladores que necesita en el kernel, en lugar de seleccionarlos como módulos. Al hacerlo, los convierte en vmlinuz y le permite omitir la secuencia de la sonda mod en el arranque, lo que lleva una cantidad considerable de tiempo detectar y cargar los módulos del kernel según sea necesario.
Drunken Code Monkey
Gracias por su respuesta. Para que sea útil, ¿podría incluir algunos pasos reproducibles para que funcione? (Algo así como 1) Do this in command line, 2) Do this and this 3) Modify this and this in config.txt 4) Boot, it will take 3.2 seconds! 5) Here is the result of my benchmarks: ...)
Basj
En realidad no, recompilar un kernel no es un proceso simple de 5 pasos. Hay muchos procedimientos en la web para mostrarle cómo configurar y compilar un kernel de Linux ...
Drunken Code Monkey el
1

Usa TinyCoreLinux . Está hecho para una carga rápida y para sobrevivir a fallas de energía.

avra
fuente
Gracias por su respuesta. ¿Podría incluir algunos pasos reproducibles para que funcione? (Algo así como 1) Download an image here: +link 2) Flash it on your microSD 3) Modify this and this in config.txt 4) Boot, it will take 3.2 seconds!)
Basj
0

Puede intentar usar eINIT para acelerar el proceso de arranque: http://sourceforge.net/projects/einit/

Desafortunadamente en la actualidad (octubre de 2016), la página de inicio de eINIT señala:

eINIT solía ser una implementación alternativa del programa / sbin / init para Linux y FreeBSD. Bueno, supongo que todavía lo es, pero el proyecto ha estado suspendido por años.

Ricitos de oro
fuente
Estamos probando una nueva política con respecto a las respuestas sin información de solo enlace aquí . Si esta publicación no se edita para contener información que pueda ser una respuesta, aunque sea mínima, en 48 horas se convertirá a Community Wiki para simplificar que la comunidad la corrija.
Ghanima
-3

Elimine los módulos del núcleo que no usará.

mrpi64
fuente
44
Las respuestas en este sitio deben incluir los pasos necesarios para realizar las acciones sugeridas (cómo determinar qué módulos se cargan, cuáles son necesarios y cómo eliminarlos), y referencias y enlaces a más información.
Steve Robillard