Como melhorar o tempo de inicialização do Raspberry Pi?

27

Estou criando um aplicativo remoto incorporado que não será permanentemente ativado. Venho brincando com diferentes distribuições de SO e posso reduzir o tempo de inicialização substancialmente usando melhores cartões SD com velocidades de leitura mais rápidas. Não estou fixo a nenhuma distribuição específica, portanto, posso reduzir o necessário para usar uma distribuição mínima do Linux.

(Tentei procurar referências que as pessoas executaram para melhorar o tempo de inicialização, mas não encontrei nada com números concretos.)

Eu também poderia usar a raiz de construção (veja também o vídeo do YouTube Raspberry Pi - Tempo de inicialização super rápido - Sistema de entretenimento Marshmallow ) ...

Layke
fonte
Você deve votar para encerrar esta pergunta. Em seguida, os usuários serão redirecionados para a pergunta original e adicionarão mais respostas. Desde que um ainda não tenha sido marcado como respondido.
Piotr Kula
Eu só estou pensando que este tem muita atividade (as opiniões obviamente não são tão altas, simplesmente porque este tem menos de um dia), mais votos e mais respostas, então eu pensei que seria melhor deixar este para cima e, possivelmente, mova sua resposta para cá. É realmente uma questão de conveniência, eu acho. 1 usuário movendo sua resposta ao invés de 3 movendo suas respostas e perdendo todos os votos, conversas e coisas do gênero. Existe alguma razão pela qual devemos seguir um caminho ou outro? Eu não me importo, eu só estou pensando que as outras pessoas que responderam não pode querer mover-se, e, assim, o conteúdo perder
RPiAwesomeness
@ppumkin Confira esta postagem no Meta.SE sobre o fechamento de dupes: Não exclua boas duplicatas e esta postagem no blog do SE . Eu acho que eles concordam com o meu argumento anterior. A menos que a duplicata seja uma cópia e pasta da outra, ou uma qualidade terrível, e como essa possui muitas respostas / atividades, devemos deixar as duas abertas.
RPiAwesomeness 26/03
11
@ppumkin Bons pontos, desde que este não seja excluído. Eu revi originalmente o Leave Open, mas acho que marcar isso como uma duplicata é o caminho certo a seguir. A única coisa em que consigo pensar é que, pelo menos, quero ter uma Q / A de qualidade mais alta no original marcado do que na duplicata. Definitivamente não é o caso aqui.
RPiAwesomeness 27/03
11
Sim, você está certo. Há mais respostas aqui. Parece ter mais atenção. Suponho que precisamos deixar que os moderadores decidam, pois eles saberão melhor o que fazer aqui. De qualquer forma. Bem feito com a obtenção de votos na sua resposta :) Estou certo de que o OP agradece sua contribuição. +1
Piotr Kula

Respostas:

13

Se você combinar o Arch Linux com os recursos sugeridos por Fred, deverá obter um sistema operacional de inicialização geralmente rápido.

O que diminui o tempo de inicialização do sistema operacional é

  1. Velocidades lentas de leitura / gravação (E / S).

    Então você usar um cartão SD mais rápido vai ajudar, um cartão de Classe 10 será substancialmente mais rápido do que um cartão de Classe 4 . Eu entendi mal como as classes de cartões SD funcionavam, e isso foi claramente indicado nos comentários, que é ruim. Na verdade, um cartão Classe 10 será mais rápido que um cartão Classe 4 para transferências de arquivos grandes , como vídeo HD e outros enfeites. Aparentemente, a classe 4 funciona tão bem com arquivos menores. Mais uma vez, meu mal, mas ei, todos aprendemos de vez em quando.

  2. Uma sequência init atolada.

    Se você tiver muitos softwares que são inicializados durante a fase de inicialização, o tempo de inicialização será mais lento. Mais software iniciando == Maior tempo de inicialização.

    Portanto, se você precisar de uma inicialização rápida, corte o máximo de software da sequência init possível. Você pode criar um script simples (ou tenho certeza que existe um por aí) que iniciará o software após a conclusão da sequência principal de inicialização, espalhando a carga um pouco mais.

É basicamente isso. O Arch Linux é provavelmente o caminho a percorrer, combinado com os recursos que Fred mencionou, como eu disse antes. O Arch é um sistema operacional muito mínimo e pode não ser a melhor coisa para um iniciante, mas se você tem experiência no Linux, faça isso. É preciso apenas um pouco de configuração, pois ele vem com o mínimo necessário para instalar e é isso .

Espero que seu projeto corra bem!

RPiAwesomeness
fonte
3
A "classe" do cartão SD é um indicador muito ruim de desempenho em um sistema incorporado. As classificações de "classe" são para grandes transferências seqüenciais de arquivos (como você possui com uma câmera digital de vários megapixels), não para arquivos pequenos, como scripts de inicialização. As placas da classe 4 superam regularmente a maioria das placas da classe 10 em operações de leitura e gravação em 4k por um fator de 100 ou mais. Existem placas Classe 10 com boas IOPS, mas esses modelos são poucos e distantes entre si.
Ben Voigt
Sim, eu concordo com @BenVoigt - quando usei a classe 4, parecia que pequenas gravações e atualizações eram rápidas, mas sim grandes transferências na classe 10 são muito melhores. Eu gostaria de poder usar um cartão de memória RAM alimentado por bateria para desempenho instantâneo.
Piotr Kula
Me desculpe, eu não sabia disso. Vou consertar isso imediatamente. Eu tinha entendido que quanto maior a classe, maior a velocidade. Obrigado por apontar isso, eu aprendi uma coisa: D Obrigado pelas upvotes também :)
RPiAwesomeness
Eu estou querendo saber por que minha resposta foi reduzida. Eu não me importo totalmente com a perda de representante, eu só quero saber o que mereceu o voto negativo, para que eu possa melhorar minha resposta.
RPiAwesomeness 29/03/14
7

Eu sugiro usar o Arch Linux.

Eu recebo um tempo de inicialização normal de 5s (kernel) + 5s (para o espaço do usuário) e não requer muito esforço, porque está sendo usado systemdpara o init.

10robinho
fonte
2
@goldilocks, você também pode usar o systemd no raspbian. Isso reduziu pela metade o tempo de inicialização para mim.
John La Rooy
@JohnLaRooy É bom saber. Eu estava assumindo que a diferença de desempenho em relação ao init tradicional seria principalmente porque o systemd pode paralelizar, mas provavelmente também economiza tempo por não ter que bifurcar e interpretar scripts de shell para tudo.
goldilocks
@goldilocks Não concordo, tentei e systemdfaz muita diferença em comparação com sysvinit. Veja minha resposta .
Basj
@ Basj Ainda melhor para saber. Excluí meu comentário sobre ele provavelmente não fazendo "muita diferença em termos de tempo de inicialização, pois é um núcleo único". Eu uso principalmente o systemd - mas TBH não presto muita atenção aos tempos de inicialização.
goldilocks
7

Eu escrevi um artigo aqui sobre isso.

Em resumo: use systemd.

Você pode facilmente executar o aplicativo RaspberryPi em menos de 8 segundos depois de conectar o cabo de alimentação ou em menos de 3 segundos após o início da inicialização do Linux.

Um exemplo aqui, meu serviço é chamado samplerbox.service:

insira a descrição da imagem aqui

Nota: Não tentei otimizar o tempo do espaço do usuário porque não preciso: meu aplicativo é iniciado cedo de qualquer maneira, por isso não me importo se a atribuição de DHCP / IP da rede demorar 8 segundos após o lançamento do aplicativo.

Basj
fonte
4

A solução ideal é provavelmente criar uma distribuição que faça exatamente o que você deseja na inicialização, desta forma você terá tempos mínimos garantidos (usando um sistema init minimalista como o sinit ). Como alternativa, você pode considerar o uso do recurso de suspensão em disco ( hibernação ) do kernel do Linux. Depois de inicializadas, as operações de suspensão e retomada mais tarde são bastante rápidas e o sistema fica totalmente desativado nesse meio tempo.

Fred
fonte
3

O uso de um kernel vinculado estaticamente em vez de drivers modprobing também pode aumentar drasticamente o desempenho. Existem outras otimizações a serem feitas configurando e recompilando cuidadosamente um kernel.

Código Bêbado Macaco
fonte
11
Desculpe encontrar uma resposta de anos. Mas você pode dar mais informações sobre como alguém poderia "usar um kernel vinculado estaticamente"?
Caesar
Dê uma olhada aqui: raspberrypi.org/documentation/linux/kernel/building.md .
Drunken Code Monkey
Para adicionar isso, para compilar um kernel vinculado estaticamente, basta passar por 'make menuconfig' ou 'make xconfig' e incluir os drivers necessários no kernel, em vez de selecioná-los como módulos. Isso os prepara para o vmlinuz e permite pular a sequência modprobe na inicialização, o que leva um tempo considerável para detectar e carregar os módulos do kernel conforme necessário.
Drunken Code Monkey
Obrigado pela sua resposta. Para que seja útil, você pode incluir algumas etapas reproduzíveis para que funcione? (Algo 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
Na verdade, recompilar um kernel não é um processo simples de 5 etapas. Há uma abundância de how-to de na web para mostrar-lhe como configurar e compilar um kernel Linux ...
Drunken Code Monkey
1

Use TinyCoreLinux . Foi feito para carregamento rápido e para sobreviver a falhas de energia.

avra
fonte
Obrigado pela sua resposta. Você poderia incluir algumas etapas reproduzíveis para que funcionasse? (Algo 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

Você pode tentar usar o eINIT para acelerar o processo de inicialização:: http://sourceforge.net/projects/einit/

Infelizmente, atualmente (outubro de 2016), a página inicial do eINIT observa:

O eINIT costumava ser uma implementação alternativa do programa / sbin / init para Linux e FreeBSD. Bem, suponho que ainda seja, mas o projeto está em espera há anos.

goldilocks
fonte
Estamos tentando uma nova política em relação às respostas somente para links sem informação aqui . Se esta postagem não for editada para conter informações que possam responder, mesmo que mínimas, em 48 horas, ela será convertida em Wiki da Comunidade para simplificar a correção pela comunidade.
Ghanima
-3

Remova todos os módulos do kernel que você não usará.

mrpi64
fonte
4
As respostas neste site devem incluir as etapas necessárias para executar as ações sugeridas (como determinar quais módulos são carregados, quais são necessários e como removê-los) e referências e links para mais informações.
9788 Steve Rogillard