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

15

Estou criando um eletrodoméstico que usa como Raspberry Pi internamente para lidar com a interface do usuário e a conexão WiFi necessária. Conectado ao R-Pi, tenho uma tela LCD AdaFruit:

LCD Adafruit

e um dongle USB Wifi:

Dongle USB WiFi

E também um teclado. Nada mais. O sistema operacional é o OpenElec , que é um sistema operacional bastante reduzido.

No entanto, quando o usuário liga o dispositivo, o R-Pi leva muitos segundos para aceitar a entrada do usuário.

Por que demora tanto tempo se estiver inicializando com flash? Dezenas de segundos parecem uma grande quantidade de computação.

Existe algo que possa ser feito para fazer uma inicialização do Raspberry Pi em menos de 5 segundos? Eles podem entrar em algum tipo de modo de hibernação, onde grava sua RAM em FLASH, e depois lê-la novamente na inicialização?

Caso contrário, existe uma alternativa ao Raspberry-Pi, com recursos semelhantes (pequena tela LCD, USB para o dongle WiFi), que pode inicializar em menos de 5 segundos?

Rocketmagnet
fonte
Ótima pergunta, você seria capaz de colar o log de inicialização e vincular a ele? Não pode fazer muito w / out sabendo o que está fazendo durante a inicialização;)
MDMoore313
2
O que é inicialização? Você está executando um sistema operacional mínimo e despojando-o aos ossos - sem desktop, etc.?
Scott Seidman
2
@ScottSeidman - Adicionado OpenElec à minha pergunta.
11
Eu concordo com @BigHomie. Não é possível sugerir nenhuma melhoria sem ver o que está acontecendo durante a inicialização.
11
@NickAlexeev - Aah, o antigo problema de sobreposição de Stackexchanges. Eu acho que todas as perguntas do R-Pi estariam no tópico por lá.

Respostas:

13

Não trabalhei com um Raspberry Pi, mas reduzi o tempo de inicialização com sistemas Linux incorporados, por isso tenho algumas respostas gerais.

1) O OpenElec pode ser uma distribuição embutida perfeitamente viável, mas as distribuições para iniciantes / demonstrações tendem a ser lançadas na pia da cozinha para oferecer uma ampla variedade de recursos, mas isso geralmente significa que existem serviços que você não precisa. Portanto, procure nos diretórios init e desligue ou adie qualquer coisa não essencial para seus propósitos. Se você não precisa de nada gráfico, em sistemas mais lentos, os processos X windows ou gráficos podem ser porcos em tempo real. Não necessariamente porque não pode gerar gráficos adequadamente, mas obter todas as bibliotecas carregadas na memória leva tempo. E leva tempo para carregar, quando tudo o que você deseja também está carregando ou aguardando para carregar.

2) Os cartões SD têm velocidades de leitura diferentes; compre o mais rápido que o dispositivo puder suportar. Ou talvez veja se um dispositivo USB carrega mais rápido. Você provavelmente não precisará dos cartões de 40 Mb / s, mas passar de um cartão SD barato para um que possa lidar com transferências de 10 Mb / s pode fazer uma diferença - novamente, dependendo dos cartões SD que o Pi pode suportar). Como uma tangente: executar um cartão SD se o sistema de arquivos for gravável não é ótimo para estabilidade a longo prazo. Se você precisar, considere definir as configurações de inicialização para tratar a placa como somente leitura ou faça outros arranjos do sistema inteiramente.

3) Se você realmente precisa de gráficos, às vezes é mais fácil obter a ilusão de ser inicializado do que estar 100% pronto para qualquer entrada. Existem programas de tela inicial de inicialização do console que podem exibir um gráfico rapidamente, enquanto todos os outros serviços necessários são iniciados. Vi casos em que um gráfico inicial do painel de controle é usado como uma tela de inicialização estática que é trocada por uma tela ativa quando o sistema está pronto - o usuário raramente realmente deseja inserir dados dentro de 2-3 segundos após a exibição da tela acima.

Se você ainda procura tempos de inicialização mais rápidos, procure aqui uma lista de áreas para analisar.


fonte
2
Concentre-se especialmente no ponto 2. A inicialização do kernel e os scripts init levam aproximadamente 30: 70% de tempo de inicialização, respectivamente. O kernel personalizado inicia 40% mais rápido, os scripts de inicialização personalizados podem melhorar em 90% os originais, o que significa que você pode reduzir pela metade o tempo de inicialização.
SF.
Você está absolutamente certo, eu troquei os nºs 1 e 2 porque passaria algum tempo com os scripts init antes de qualquer outra coisa.
8

Por que demora tanto tempo se estiver inicializando com flash?

Parte da resposta pode ser uma questão de pura taxa de transferência. Enquanto os cartões SD usam armazenamento flash NAND, eles só podem transmitir dados em série. Em comparação com, digamos, um chip flash NAND que foi soldado à placa que pode se comunicar com a CPU diretamente com um barramento paralelo. A taxa de transferência geral seria aproximadamente dependente de algumas coisas, como a velocidade do relógio do barramento e o tamanho dos arquivos que você está transferindo.

A taxa de transferência de um cartão SD é realmente bastante baixa em comparação com um disco rígido moderno SATA III ou mesmo SATA II. Com falta de uma porta SATA, o USB 3.0 é outra alternativa que possui uma taxa de transferência bastante alta por um custo relativamente baixo.

Mais informações podem ser encontradas aqui , aqui e aqui .

Existe algo que possa ser feito para fazer uma inicialização do Raspberry Pi em menos de 5 segundos?

A CPU que o Pi usa é bastante barata (daí o preço). Isso significa que falta interfaces de alta velocidade como SATA ou USB 3.0. Com exceção da emulação de software desses protocolos (que provavelmente também sofrerão com grandes problemas de taxa de transferência), não há muito o que fazer além de aparar a gordura do sistema operacional.

Eles podem entrar em algum tipo de modo de hibernação, onde grava sua RAM em FLASH, e depois lê-la novamente na inicialização?

De acordo com o OpenElec, o Pi não suporta hibernação , mas se você ler um pouco mais adiante, eles têm alguns conselhos sobre como acelerar o seu Pi .

David Freitag
fonte
3

De um modo geral, a leitura do SD é muito lenta, portanto afeta drasticamente.

Experimente o bootchart e descubra se há algum ponto para melhorar o tempo de inicialização.

Ou, você pode configurar seu próprio kernel para que ele tenha muito pouco tamanho. Ou pular alguma inicialização desnecessária (procure algo estranho ou algo assim) pode ajudar.

Younggun Kim
fonte