Como reduzir o tempo de inicialização de um beaglebone usando systemd

Como reduzir o tempo de inicialização de um beaglebone usando systemd

Atualmente estou tentando reduzir o tempo que leva para inicializar meu beaglebone green e iniciar um script python. Meu script python simples apenas ativa um relé em uma capa.

Estou usando o tempo que leva para o relé girar como o tempo que leva para inicializar e fazer algo útil.

Anteriormente, o relé demorava 18 segundos e eu reduzi para 14 segundos brincando com o systemd.

Eu criei um arquivo de unidade simples que iniciará meu programa python

[Unit]
Description=Relaycheck run on startup
DefaultDependencies=no
After=systemd-system.slice

[Service]
WorkingDirectory=/home/
ExecStart=/home/relaycheck2.py
StandardOutput=null

[Install]
Alias=relaycheck2.service

E aqui está uma imagem recortada do gráfico de inicialização atual: Gráfico de inicialização

No meu entender, meu serviço está sendo executado bem cedo e os serviços demorados, como rede, não afetam meu serviço de retransmissão. Isso está correto?

Há mais alguma coisa que eu possa fazer para reduzir o tempo de inicialização usando o systemd?

Responder1

Seu programa precisa manter o estado (você precisa de um disco gravável?) A coisa mais rápida que você provavelmente pode fazer é não usar um sistema init. Em vez disso, considere anexar isso aos seus argumentos do Kernel (provavelmente no seu ambiente/configuração do uBoot):

init=/path/to/your/program

Portanto, em vez de executar systemd(o gerenciador de processos), o kernel do Linux executará seu programa como o primeiro processo. Agora você disse que este era um script Python. Eu nãopensarvocê pode executar um script como init. Pode ser necessário escrever um pequeno programa wrapper em uma linguagem compilada que gerará seu aplicativo python.

Tenha em mente que seu programa shell/wrapper também precisa manipular sinais (init/systemd manipula sinais para programas que não possuem manipuladores de sinal padrão). Você pode conseguir usar algo comoidiota-initque normalmente é usado para contêineres Docker.

Se você precisar de um volume gravável, você pode fazer com que seu programa wrapper monte uma partição para você também (não precisa ser sua partição raiz. Você pode querer montar um pendrive para armazenamento).

Eu tentaria isso primeiro em uma VM de desktop, pois os parâmetros do kernel podem ser um pouco complicados em sistemas embarcados/uBoot.

informação relacionada