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

1

Atualmente, estou tentando reduzir o tempo necessário para inicializar o meu beaglebone green e iniciar um script python. Meu script python simples apenas liga um revezamento em uma capa.

Estou usando o tempo necessário para o relay girar como o tempo necessário para inicializar e fazer algo útil.

Anteriormente, o revezamento levaria 18 segundos e eu consegui baixar para 14 segundos 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 foto recortada do gráfico de inicialização atual: Bootchart

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

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

    
por Tom 25.10.2016 / 06:42

1 resposta

2

Seu programa precisa manter o estado (você precisa de um disco gravável?) O que você provavelmente pode fazer em jejum não é usar um sistema init. Em vez disso, considere anexá-lo aos seus argumentos do Kernel (muito provavelmente em 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ão acho que você pode executar um script como init. Talvez seja necessário escrever um pequeno programa de wrapper em uma linguagem compilada que gerará seu aplicativo python.

Tenha em mente que seu programa shell / wrapper também precisa manipular sinais (identificadores de identificador init / systemd para programas que não possuem manipuladores de sinal padrão). Você pode ser capaz de usar algo como dumb-init que é normalmente usado para contêineres do Docker.

Se você precisa de um volume gravável, você pode ter seu programa wrapper montando 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 em uma VM de desktop primeiro, pois os parâmetros do kernel podem ser um pouco complicados em sistemas embarcados / uBoot.

    
por 25.10.2016 / 07:18