Depois de remover a maioria dos serviços que eu não preciso, ainda leva cerca de 28 segundos para inicializar, tirar uma foto e desligar. Eu gostaria de diminuir ainda mais isso, fiz um systemd-analyze blame
e obtive o seguinte:
7.476s disableusb.service
1.736s keyboard-setup.service
958ms kbd.service
789ms systemd-fsck-root.service
737ms systemd-setup-dgram-qlen.service
722ms fake-hwclock.service
580ms kmod-static-nodes.service
565ms console-setup.service
534ms dev-mqueue.mount
518ms systemd-udev-trigger.service
498ms networking.service
489ms raspi-config.service
449ms hdparm.service
444ms systemd-journal-flush.service
376ms systemd-tmpfiles-setup.service
375ms dhcpcd.service
345ms systemd-logind.service
332ms ntp.service
317ms systemd-modules-load.service
281ms tmp.mount
272ms triggerhappy.service
269ms sys-kernel-debug.mount
265ms [email protected]
223ms rsyslog.service
221ms sys-kernel-config.mount
212ms systemd-tmpfiles-setup-dev.service
200ms systemd-remount-fs.service
198ms systemd-sysctl.service
184ms boot.mount
173ms systemd-random-seed.service
168ms rc-local.service
167ms [email protected]
165ms var-log.mount
141ms udev-finish.service
130ms sys-fs-fuse-connections.mount
111ms systemd-user-sessions.service
94ms systemd-update-utmp.service
94ms alsa-restore.service
93ms systemd-update-utmp-runlevel.service
77ms systemd-udevd.service
55ms takepicture.service
disableusb.service
é meu e, ao contrário do que o nome indica, ele também faz outras coisas. Duvido que possa melhorar o tempo lá.
Meu sistema está funcionando sem cabeça, por serial. Eu só preciso de rede via Wi-Fi (o Wi-Fi não inicia porque desabilito a alimentação USB, mas às vezes não o desabilito para que possa iniciar).
Olhando para esta lista, vejo coisas como: 1.736s keyboard-setup.service
e 958ms kbd.service
. Eles levam quase 3 segundos. Preciso deles se não estiver usando um teclado? Caso contrário, como faço para desativá-los?
O que mais posso desativar com segurança a partir daqui?
Ok, há algo realmente estranho acontecendo aqui. Desabilitei mais alguns serviços, e ainda leva muito tempo no total, só que agora alguns serviços que levavam menos tempo antes demoravam muito mais ...
7.468s disableusb.service
1.676s console-setup.service
768ms systemd-logind.service
768ms systemd-fsck-root.service
726ms systemd-setup-dgram-qlen.service
714ms fake-hwclock.service
689ms networking.service
530ms systemd-journal-flush.service
524ms systemd-udev-trigger.service
509ms dev-mqueue.mount
509ms ntp.service
508ms kmod-static-nodes.service
439ms dhcpcd.service
334ms systemd-random-seed.service
331ms hdparm.service
318ms systemd-modules-load.service
281ms systemd-tmpfiles-setup.service
279ms [email protected]
279ms rsyslog.service
269ms systemd-remount-fs.service
265ms sys-kernel-config.mount
254ms systemd-tmpfiles-setup-dev.service
250ms systemd-sysctl.service
238ms rc-local.service
234ms systemd-udevd.service
232ms sys-kernel-debug.mount
224ms [email protected]
187ms tmp.mount
176ms sys-fs-fuse-connections.mount
175ms var-log.mount
133ms systemd-update-utmp.service
122ms systemd-update-utmp-runlevel.service
122ms systemd-user-sessions.service
119ms alsa-restore.service
91ms boot.mount
88ms udev-finish.service
76ms takepicture.service
Arquivo de serviço: (não faço ideia por que a sintaxe do código não funciona)
[Unit]
Description=Disable USB power
Before=networking.service
After=local-fs.target
DefaultDependencies=no
[Service]
Type=oneshot
ExecStart=/sbin/usb_down
[Install]
Aqui está o enredo: http://www.eternal-lands.com/plot.svg
systemd-analyze plot
e incluir a imagem aqui (isso deve produzir um bom gráfico SVG mostrando os horários e talvez esclarecer as coisas).disableusb.service
. BTW, você pode rapidamenteconvert plog.svg plog.jpg
se instalar oimagemagick
pacote /Respostas:
Isso implica que você está executando algo em primeiro plano, porque não é persistente; portanto, você sente que não há sentido em colocá-lo em segundo plano. No entanto, se levar muito tempo para fazer isso, talvez você deva colocá-lo em segundo plano assim que começar.
O problema aqui é simplesmente que é mais provável que você beneficie o tempo de inicialização do que deixá-lo em primeiro plano, embora isso possa não fazer nenhuma diferença. No entanto, se algo mais depender da conclusão (ao contrário de simplesmente concluir a inicialização com êxito, o que é mais aplicável a um serviço persistente), você deve deixá-lo como.
Eu nunca procurei, porque não importa muito para mim, mas acredito que há algo errado na maneira como a "configuração do teclado" é tratada no Raspbian. Já o vi rodar 90 segundos antes de ser morto pelo systemd.
Suponho que não, mas isso pode criar um aborrecimento para você, se você precisar de um teclado de repente ... ou talvez não faça nenhuma diferença - parte da minha suspeita é que ele realmente não está realizando nada, já que o "teclado setup "é algo que é configuração estática e pode ser alterado manualmente, conforme necessário.
Para desativar um serviço
sudo systemd disable ...
,.Estranho, isso ainda está lá, pois deve se desativar após a execução - mas isso pode não acontecer se você o ignorar. Isso pode estar relacionado à coisa do teclado. Se possível, você deve conectar um monitor e ver se ele aparece após a inicialização. De qualquer forma, isso é outra coisa que você também pode desativar.
Eu acho que você deveria fazer
disableusb.service
After=sysinit.target
.fonte
pi@raspberrypi:~$ sudo systemd disable raspi-config.service
e conseguiExcess arguments.
. Além disso, muitos desses serviços não aparecem listados emsystemctl list-unit-files
.networking.service
? Presumo que isso não tenha sido intencional, por isso recomendei iniciar após o sysinit (que aguarda a inicialização da rede). De qualquer forma, lembre-se de que se 28 segundos incluírem o seudisableusb
, é um tempo de inicialização bastante razoável para qualquer modelo de Pi. Nenhum deles é rápido.disableusb
precisa terminar antes do início da rede, porque é assim que você deseja garantir que o wifi não seja iniciado. Isso é idiota, para ser franco; você está jogando, coma meu bolo e coma também. Se você deseja desativar o USB para economizar energia, ótimo, mas deve lidar com o problema do wifi separadamente. Se você não pode ser incomodado, também não perca tempo tentando espremer segundos do seu tempo de inicialização.Olhando para o gráfico, parece claro que a desativação
console-setup.service
não acelerará nada de qualquer maneira. Como você pode ver,networking.service
está aguardando adisableusb.service
conclusão, portanto, um tempo de carregamento de 1,6 segundo paraconsole-setup.service
execução em paralelo não afetará o tempo geral de inicialização.Existe uma idéia no agendamento de um caminho crítico que, quando qualquer atividade nesse caminho é atrasada, causa atrasos em todo o projeto. As outras atividades têm 'flutuação', ou seja, não são críticas e podem ser adiadas sem afetar o tempo final de chegada.
É nesse caminho crítico que você deve economizar tempo, não nas atividades não críticas.
systemd-analyze critical-chain
ajudará a identificar as atividades críticas, embora você possa identificá-las na trama. Qualquer ganho marginaldisableusb.service
ajudaria significativamente o tempo de inicialização.Também pode ajudar a entender por que seus serviços demoram tanto. Para isso, o Bootchart2 pode ser útil. Pode ser instalado com:
Para ativá-lo, edite
/boot/cmdline.txt
e defina:Após a conclusão da inicialização, você encontrará o gráfico salvo
/run/log
como um arquivo SVG. Em seguida, volteinit=...
à sua configuração inicial (ou exclua-a se não estivesse lá antes).Veja também a página de manual para
systemd-bootchart
.fonte
raspistill -o /home/pi/test_boot.jpg
. Este é apenas um teste, eu posso modificar os parâmetros um pouco mais e economizar algum tempo, mas no futuro também quero ativar a saída bruta, o que significará mais ~ 10 MB para cada foto, o que provavelmente levará um segundo extra escrever. Vou tentar a coisa bootchart, espero que não requer um monitor :)Setting up bootchart2 (0.14.4-3) ... update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults update-rc.d: warning: stop runlevel arguments (6 0) do not match bootchart-done Default-Stop values (none)
. Quando iniciopybootchartgui -i
, recebo um aviso: caminho: /var/log/bootchart.tgz 'não existe, ignorando. Erro de análise: estado vazio: '/var/log/bootchart.tgz' não contém um gráfico de inicialização válido--timeout 1
e reduziu o tempo de inicialização para 15.389s :)Estou executando um zero raspberrypi sem cabeça e poderia raspar alguns segundos com o seguinte:
Systemd
Observe que
systemd-analyze
gera o tempo de inicialização:Saída mínima de inicialização
Na
boot/cmdline.txt
mudançatty1
paratty3
e acrescentarloglevel=3 quiet logo.nologo
no final depoisrootwait
Isso economizou outro segundo para mim.
Diversos
Esse cara consegue uma inicialização raspberrypi de 3 segundos: https://www.samplerbox.org/article/fastbootrpi
Este é um bom blog com algumas etapas para reduzir o tempo de inicialização: http://himeshp.blogspot.com/2018/08/fast-boot-with-raspberry-pi.html
DougieLawson explica alguns dos serviços raspberrpi https://www.raspberrypi.org/forums/viewtopic.php?t=195692
Tutorial detalhado como PDF
fonte