Comment améliorer le temps de démarrage de Raspberry Pi?

27

Je crée une application distante intégrable qui ne sera pas activée en permanence. J'ai joué avec différentes distributions de système d'exploitation et je peux réduire considérablement le temps de démarrage en utilisant de meilleures cartes SD avec des vitesses de lecture plus rapides. Je ne suis pas fixé sur une distribution particulière, donc je peux me déshabiller autant que nécessaire pour utiliser une distribution Linux minimale.

(J'ai essayé de rechercher des repères que les gens ont exécutés pour améliorer le temps de démarrage, mais je n'ai rien trouvé avec des chiffres précis.)

Je pourrais aussi utiliser build root (voir aussi la vidéo YouTube Raspberry Pi - Super Fast Boot Time - Marshmallow Entertainment System ) ...

Layke
la source
Vous devriez voter pour clore cette question. Ensuite, les utilisateurs seront redirigés vers la question d'origine et ajouteront plus de réponses. Depuis que l'un n'a pas encore été marqué comme répondu.
Piotr Kula
Je pense juste que celui-ci a beaucoup d'activité (les vues ne sont évidemment pas aussi élevées, simplement parce que celui-ci a moins d'un jour), plus de votes et plus de réponses, donc j'ai pensé qu'il serait préférable de laisser celui-ci et éventuellement déplacer votre réponse ici. C'est vraiment une question de commodité, je pense. 1 utilisateur déplaçant sa réponse plutôt que 3 déplaçant la sienne et perdant ainsi tous les votes, conversations et autres. Y a-t-il une raison pour laquelle nous devrions aller dans un sens ou dans l'autre? Cela ne me dérange pas, je pense simplement que les autres personnes qui ont répondu peuvent ne pas vouloir bouger, et donc nous perdons du contenu
RPiAwesomeness
@ppumkin Consultez cet article Meta.SE concernant la fermeture de dupes: ne supprimez pas les bons doublons et cet article de blog SE . Je pense qu'ils sont d'accord avec mon point précédent. À moins que le doublon ne soit un copier-coller de l'autre, ou une qualité terrible, et parce que celui-ci a beaucoup de réponses / activité, nous devons simplement les laisser tous les deux ouverts.
RPiAwesomeness
1
@ppumkin Bons points, tant que celui-ci n'est pas supprimé. À l'origine, j'ai examiné Leave Open, mais je suppose que le marquer comme un doublon est la bonne façon de procéder. La seule chose à laquelle je peux penser est que je veux au moins avoir un Q / A de meilleure qualité sur l'original marqué que sur le duplicata. Ce n'est certainement pas le cas ici.
RPiAwesomeness
1
Oui, tu as raison. Il y a plus de réponses ici. Semble avoir obtenu plus d'attention. Je suppose que nous devons laisser aux modérateurs le soin de décider car ils sauront mieux quoi faire ici. En tous cas. Bravo pour avoir obtenu des votes sur votre réponse :) Je suis sûr que le PO apprécie votre contribution. +1
Piotr Kula

Réponses:

13

Si vous combinez Arch Linux avec les fonctionnalités suggérées par Fred, vous devriez obtenir un système d'exploitation à démarrage généralement rapide.

Ce qui ralentit les temps de démarrage du système d'exploitation est

  1. Vitesses de lecture / écriture (E / S) lentes.

    Donc , vous en utilisant une carte SD plus rapide va aider, une carte de classe 10 sera sensiblement plus rapide qu'une carte de classe 4 . J'ai mal compris comment fonctionnaient les classes de cartes SD, et cela a été souligné très clairement dans les commentaires, ma mauvaise. En fait, une carte de classe 10 sera plus rapide qu'une carte de classe 4 pour les transferts de fichiers volumineux tels que la vidéo HD et ainsi de suite. Apparemment, la classe 4 fonctionne aussi bien avec des fichiers plus petits. Encore une fois, mon mauvais, mais bon, nous apprenons tous de temps en temps.

  2. Une séquence d'initialisation enlisée.

    Si vous avez beaucoup de logiciels qui se déclenchent pendant la phase de démarrage, le temps de démarrage sera plus lent. Plus de logiciels démarrent == Temps de démarrage plus long.

    Ainsi, si vous avez besoin d'un démarrage rapide, coupez autant de logiciels que possible de la séquence d'initialisation. Vous pouvez créer un script simple (ou je suis sûr qu'il y en a un) qui lancera le logiciel une fois la séquence de démarrage principale terminée, répartissant la charge un peu plus.

C'est essentiellement ça. Arch Linux est probablement le chemin à parcourir, combiné avec les fonctionnalités mentionnées par Fred, comme je l'ai déjà dit. Arch est un système d'exploitation très minimal et n'est peut-être pas la meilleure chose à utiliser pour un débutant, mais si vous avez de l'expérience sous Linux, alors allez-y. Cela prend juste un peu de configuration, car il est livré avec le strict minimum à installer et c'est tout .

J'espère que votre projet va bien!

RPiAwesomeness
la source
3
La «classe» de la carte SD est un très mauvais indicateur de performance dans un système embarqué. Les classements "classe" concernent les transferts de fichiers séquentiels volumineux (comme vous le faites avec un appareil photo numérique multi-mégapixels), et non les petits fichiers tels que les scripts de démarrage. Les cartes de classe 4 surpassent régulièrement la plupart des cartes de classe 10 en lecture et écriture 4k d'un facteur 100 ou plus. Il existe des cartes de classe 10 avec de bons IOPS, mais ces modèles sont rares.
Ben Voigt
Oui, je suis d'accord avec @BenVoigt - lorsque j'ai utilisé la classe 4, il semblait que les petites écritures et les mises à jour étaient rapides, mais les gros transferts sur la classe 10 sont bien meilleurs. J'aimerais pouvoir utiliser une carte RAM alimentée par batterie pour des performances instantanées.
Piotr Kula
Je suis désolé, je ne le savais pas. Je vais arranger ça immédiatement. J'avais compris que plus la classe est élevée, plus la vitesse est élevée. Merci d'avoir signalé cela, je viens d'apprendre quelque chose: D Merci aussi pour les votes positifs :)
RPiAwesomeness
Je me demande pourquoi ma réponse a été rejetée. Je ne me soucie pas entièrement de la perte de rep, je veux juste savoir ce qui méritait le downvote, afin que je puisse améliorer ma réponse.
RPiAwesomeness
7

Je suggère d'utiliser Arch Linux.

J'obtiens un temps de démarrage normal de 5s (noyau) + 5s (vers l'espace utilisateur) et cela ne nécessite pas beaucoup d'efforts, car il utilise systemdfor init.

10robinho
la source
2
@goldilocks, vous pouvez également utiliser systemd sur raspbian. Cela a réduit de moitié le temps de démarrage pour moi.
John La Rooy
@JohnLaRooy Bon à savoir. Je supposais que la différence de performances par rapport à l'initialisation traditionnelle serait principalement due au fait que systemd peut se paralléliser, mais cela permet également de gagner du temps en n'ayant pas à bifurquer et à interpréter les scripts shell pour tout.
goldilocks
@goldilocks Je ne suis pas d'accord, j'ai essayé et systemdfait beaucoup de différence par rapport à sysvinit. Voir ma réponse .
Basj
@Basj Encore mieux à savoir. J'ai supprimé mon commentaire à ce sujet, ce qui ne fait probablement pas "beaucoup de différence en termes de temps de démarrage car il s'agit d'un seul cœur". J'utilise principalement systemd - mais TBH je ne fais pas très attention aux temps de démarrage.
goldilocks
7

J'ai écrit un article ici à ce sujet.

En bref: utilisez systemd.

Vous pouvez facilement faire fonctionner votre application RaspberryPi moins de 8 secondes après avoir branché le cordon d'alimentation ou moins de 3 secondes après le démarrage de Linux.

Un exemple ici, mon service s'appelle samplerbox.service:

entrez la description de l'image ici

Remarque: Je n'ai pas essayé d'optimiser le temps de l'espace utilisateur parce que je n'en ai pas besoin: mon application démarre tôt de toute façon, donc cela ne me dérange pas si l'attribution de réseau DHCP / IP prend 8 secondes après le lancement de mon application.

Basj
la source
4

La solution optimale est probablement de construire une distribution qui ne fait exactement que ce que vous voulez qu'elle démarre, de cette façon, vous êtes garanti un temps minimal (en utilisant un système d'initialisation minimaliste comme sinit ). Vous pouvez également envisager d'utiliser la fonction de suspension sur disque ( hibernation ) du noyau Linux. Une fois démarré, les opérations de suspension et de reprise plus tard sont assez rapides et le système est entièrement éteint entre-temps.

Fred
la source
3

L'utilisation d'un noyau lié statiquement au lieu de pilotes de modprobing peut également augmenter considérablement les performances. Il y a d'autres optimisations à faire en configurant et recompilant soigneusement un noyau.

Drunk Code Monkey
la source
1
Désolé de heurter une réponse vieille de plusieurs années. Mais pouvez-vous donner plus d'informations sur la façon dont on pourrait "utiliser un noyau lié statiquement"?
Caesar
Jetez un œil ici: raspberrypi.org/documentation/linux/kernel/building.md .
Drunken Code Monkey
Pour ajouter à cela, pour compiler un noyau lié statiquement, il vous suffit de passer par 'make menuconfig' ou 'make xconfig' et d'inclure les pilotes dont vous avez besoin dans le noyau, au lieu de les sélectionner en tant que modules. Cela les fait cuire dans vmlinuz et vous permet d'ignorer la séquence modprobe au démarrage, ce qui prend beaucoup de temps pour détecter et charger les modules du noyau selon leurs besoins.
Drunken Code Monkey
Merci pour votre réponse. Pour qu'il soit utile, pourriez-vous inclure quelques étapes reproductibles pour le faire fonctionner? (Quelque chose comme 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
Pas vraiment, recompiler un noyau n'est pas un processus simple en 5 étapes. Il existe de nombreuses
Drunken Code Monkey
1

Utilisez TinyCoreLinux . Il est conçu pour un chargement rapide et pour survivre aux pannes de courant.

avra
la source
Merci pour votre réponse. Pourriez-vous inclure quelques étapes reproductibles pour le faire fonctionner? (Quelque chose comme 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

Vous pouvez essayer d'utiliser eINIT pour accélérer le processus de démarrage:: http://sourceforge.net/projects/einit/

Malheureusement actuellement (octobre 2016), la page d'accueil eINIT note:

eINIT était autrefois une implémentation alternative du programme / sbin / init pour Linux et FreeBSD. Eh bien, je suppose que c'est toujours le cas, mais le projet est suspendu depuis des années maintenant.

goldilocks
la source
Nous essayons une nouvelle politique en ce qui concerne les réponses de lien sans information uniquement ici . Si ce message n'est pas modifié pour contenir des informations pouvant servir de réponse, même minime, il sera converti en Wiki communautaire en 48 heures pour simplifier sa correction par la communauté.
Ghanima
-3

Supprimez tous les modules du noyau que vous n'utiliserez pas.

mrpi64
la source
4
Les réponses sur ce site doivent inclure les étapes nécessaires pour effectuer les actions suggérées (comment déterminer quels modules sont chargés, lesquels sont nécessaires et comment les supprimer), ainsi que des références et des liens vers des informations supplémentaires.
Steve Robillard