Come migliorare il tempo di avvio per Raspberry Pi?


27

Sto creando un'applicazione remota incorporabile che non sarà accesa in modo permanente. Ho giocato con diverse distribuzioni del sistema operativo e posso ridurre notevolmente il tempo di avvio utilizzando schede SD migliori con velocità di lettura più elevate. Non sono fissato a nessuna particolare distribuzione, quindi posso ridurre quanto necessario per utilizzare una distribuzione Linux minima.

(Ho cercato di cercare benchmark che le persone hanno eseguito per migliorare il tempo di avvio, ma non ho trovato nulla con cifre difficili.)

Potrei anche usare build root (vedi anche video YouTube Raspberry Pi - Super Fast Boot Time - Marshmallow Entertainment System ) ...


Dovresti votare per chiudere questa domanda. Quindi gli utenti verranno reindirizzati alla domanda originale e aggiungeranno altre risposte. Siccome uno non è stato ancora contrassegnato come risposta.
Piotr Kula,

Sto solo pensando che questo ha molta attività (le opinioni ovviamente non sono così alte, semplicemente perché questa ha meno di un giorno), più voti e più risposte, quindi ho pensato che sarebbe stato meglio lasciarlo in alto, e quindi eventualmente spostare la risposta qui. Penso sia davvero una questione di convenienza. 1 utente sposta la propria risposta anziché 3 sposta la propria e perde così tutti i voti, le conversazioni e simili. C'è qualche motivo per cui dovremmo andare in un modo o nell'altro? Non mi dispiace, sto solo pensando che le altre persone che hanno risposto potrebbero non voler muoversi, e quindi perdiamo contenuto
RPiAwesomeness

@ppumkin Dai un'occhiata a questo post Meta.SE relativo alla chiusura dei duplicati : non eliminare buoni duplicati e questo post sul blog SE . Penso che siano d'accordo con il mio punto precedente. A meno che il duplicato non sia una copia-incolla dell'altro, o una qualità terribile, e poiché questo ha molte risposte / attività, dovremmo lasciarli entrambi aperti.
RPiAwesomeness,

1
@ppumkin Punti positivi, purché questo non venga cancellato. Inizialmente ho recensito Leave Open, ma immagino che contrassegnarlo come duplicato sia la strada giusta da percorrere. L'unica cosa a cui riesco a pensare è che almeno voglio avere un Q / A di qualità superiore sull'originale contrassegnato, piuttosto che sul duplicato. Questo non è sicuramente il caso qui.
RPiAwesomeness,

1
Sì, hai ragione. Ci sono più risposte qui. Sembra avere più attenzione. Suppongo che dovremo lasciare ai moderatori la decisione perché sapranno meglio cosa fare qui. Comunque. Ben fatto con l'assegnazione di voti sulla tua risposta :) Sono sicuro che l'OP apprezza il tuo contributo. +1
Piotr Kula,

Risposte:


13

Se combini Arch Linux con le funzionalità suggerite da Fred, dovresti ottenere un sistema operativo con avvio in genere veloce.

Ciò che rallenta i tempi di avvio del sistema operativo è

  1. Velocità di lettura / scrittura (I / O) lente.

    Quindi, utilizzando una scheda SD più veloce sarà di aiuto, una scheda di classe 10 sarà notevolmente più veloce di una scheda di classe 4 . Ho frainteso il modo in cui le classi di schede SD funzionavano, e questo è stato sottolineato abbastanza chiaramente nei commenti, mio ​​male. In realtà, una scheda di classe 10 sarà più veloce di una scheda di classe 4 per trasferimenti di file di grandi dimensioni come video HD e quant'altro. Apparentemente la Classe 4 si comporta altrettanto bene con file più piccoli. Ancora una volta, mia cattiva, ma ehi, impariamo tutti di tanto in tanto.

  2. Una sequenza init impantanata.

    Se hai molti software che si accendono durante la fase di avvio, il tempo di avvio sarà più lento. Più avvio software == Tempo di avvio più lungo.

    Pertanto, se è necessario un avvio rapido, tagliare quanto più software possibile dalla sequenza init. Puoi creare un semplice script (o sono sicuro che ce ne sia uno là fuori) che avvierà il software dopo il completamento della sequenza di avvio principale, distribuendo il carico un po 'di più.

È praticamente tutto. Arch Linux è probabilmente la strada da percorrere, unita alle funzionalità menzionate da Fred, come ho detto prima. Arch è un sistema operativo molto minimale e potrebbe non essere la cosa migliore da usare per un principiante, ma se hai esperienza in Linux, prova. Ci vuole solo un po 'di configurazione, in quanto viene fornito con il minimo indispensabile per l'installazione e il gioco è fatto .

Spero che il tuo progetto vada bene!


3
La "classe" della scheda SD è un indicatore molto scarso delle prestazioni in un sistema incorporato. Le classificazioni di "classe" si riferiscono a trasferimenti di file sequenziali di grandi dimensioni (come nel caso di una fotocamera digitale multi-megapixel), non a file di piccole dimensioni come script di avvio. Le carte di Classe 4 superano regolarmente la maggior parte delle carte di Classe 10 su operazioni di lettura e scrittura 4K di un fattore pari o superiore a 100. Esistono schede di classe 10 con buoni IOPS, ma quei modelli sono pochi e lontani tra loro.
Ben Voigt,

Sì, sono d'accordo con @BenVoigt - quando ho usato la classe 4 mi è sembrato che le piccole scritture e gli aggiornamenti fossero veloci, ma i grandi trasferimenti sulla classe 10 sono molto migliori. Vorrei poter utilizzare una scheda RAM alimentata a batteria per prestazioni istantanee.
Piotr Kula,

Mi dispiace, non lo sapevo. Lo riparerò immediatamente. Avevo capito che maggiore era la classe maggiore era la velocità. Grazie per averlo sottolineato, ho appena imparato qualcosa: D Grazie anche per i voti :)
RPiAwesomeness

Mi chiedo perché la mia risposta sia stata sottoposta a voto negativo. Non mi dispiace del tutto la perdita di reputazione, voglio solo sapere cosa ha meritato il downvote, quindi posso migliorare la mia risposta.
RPiAwesomeness

7

Suggerisco di usare Arch Linux.

Ottengo un tempo di avvio normale di 5s (kernel) + 5s (nello spazio utente) e non richiede molto sforzo, perché sta usando systemdper init.


2
@goldilocks, puoi usare anche systemd su raspbian. Ha dimezzato il tempo di avvio per me.
John La Rooy,

@JohnLaRooy Buono a sapersi. Stavo supponendo che la differenza di prestazioni rispetto a init tradizionale sarebbe dovuta principalmente al fatto che systemd può parallelizzarsi, ma probabilmente risparmia tempo anche senza dover forzare e interpretare gli script di shell per tutto.
Riccioli d'oro

@goldilocks Non sono d'accordo, ho provato e systemdfa molta differenza rispetto a sysvinit. Vedere la mia risposta .
Basj,

@Basj Ancora meglio da sapere. Ho eliminato il mio commento a riguardo probabilmente non facendo "molta differenza in termini di tempi di avvio poiché è [su] un singolo core". Uso principalmente systemd, ma TBH non presta molta attenzione ai tempi di avvio.
riccioli d'oro

7

Ho scritto un articolo qui al riguardo.

In breve: usare systemd.

Puoi facilmente far funzionare l'app RaspberryPi meno di 8 secondi dopo aver collegato il cavo di alimentazione o meno di 3 secondi dopo l'avvio di Linux.

Un esempio qui, il mio servizio si chiama samplerbox.service:

inserisci qui la descrizione dell'immagine

Nota: non ho cercato di ottimizzare il tempo dello spazio utente perché non ne ho bisogno: la mia app si avvia comunque in anticipo, quindi non mi dispiace se l'attribuzione di rete DHCP / IP impiega 8 secondi dopo l'avvio della mia app.


4

La soluzione ottimale è probabilmente quella di creare una distribuzione che faccia esattamente ciò che si desidera all'avvio, in questo modo vengono garantiti tempi minimi (utilizzando un sistema di inizialismo minimalista come sinit ). In alternativa, potresti prendere in considerazione l'uso della funzione di sospensione su disco ( ibernazione ) del kernel Linux. Una volta avviato, le operazioni di sospensione e ripresa in seguito sono piuttosto rapide e nel frattempo il sistema è completamente spento.


3

L'uso di un kernel collegato staticamente invece dei driver di modprobing può anche aumentare notevolmente le prestazioni. Ci sono altre ottimizzazioni da effettuare configurando e ricompilando attentamente un kernel.


1
Mi dispiace dare una risposta vecchia di anni. Ma puoi dare qualche informazione in più su come si potrebbe fare "usando un kernel staticamente collegato"?
Cesare,


Per aggiungere ciò, per compilare un kernel collegato staticamente è sufficiente passare attraverso 'make menuconfig' o 'make xconfig' e includere i driver necessari nel kernel, invece di selezionarli come moduli. In questo modo li cucina in vmlinuz e ti consente di saltare la sequenza modprobe all'avvio, che impiega molto tempo per rilevare e caricare i moduli del kernel quando sono necessari.
Drunken Code Monkey,

La ringrazio per la risposta. Per essere utile, potresti includere alcuni passaggi riproducibili per farlo funzionare? (Qualcosa del genere 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

Non proprio, la ricompilazione di un kernel non è un processo semplice in 5 passaggi. Ci sono molte procedure sul web per mostrarti come configurare e compilare un kernel Linux ...
Drunken Code Monkey

1

Usa TinyCoreLinux . È progettato per un caricamento rapido e per resistere a interruzioni di corrente.


La ringrazio per la risposta. Potresti includere alcuni passaggi riproducibili per farlo funzionare? (Qualcosa del genere 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

Potresti provare a utilizzare eINIT per accelerare il processo di avvio:: http://sourceforge.net/projects/einit/

Purtroppo al momento (ottobre 2016) le note sulla homepage di eINIT:

eINIT era un'implementazione alternativa del programma / sbin / init per Linux e FreeBSD. Bene, suppongo che lo sia ancora, ma il progetto è in sospeso da anni.


Stiamo provando una nuova politica per quanto riguarda le risposte di solo collegamento senza informazioni qui . Se questo post non viene modificato per contenere informazioni che possono rappresentare una risposta, per quanto minima, in 48 ore verrà convertito in Wiki della comunità per semplificarne la correzione da parte della community.
Ghanima

-3

Rimuovi tutti i moduli del kernel che non utilizzerai.


4
Le risposte su questo sito dovrebbero includere i passaggi necessari per eseguire le azioni suggerite (come determinare quali moduli vengono caricati, quali sono necessari e come rimuoverli), riferimenti e collegamenti a ulteriori informazioni.
Steve Robillard,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.