부팅 시간을 더 줄이려면 어떻게해야합니까?


11

필요하지 않은 대부분의 서비스를 제거한 후에도 부팅하고 사진을 찍고 종료하는 데 약 28 초가 걸립니다. 나는 이것을 더 낮추고 싶습니다. 그리고 나는 systemd-analyze blame다음을 얻었습니다.

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 systemd-fsck@dev-mmcblk0p6.service
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 user@1000.service
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이름은 내 이름과 달리 다른 것들도 마찬가지입니다. 나는 거기에서 시간을 향상시킬 수 있을지 의심 스럽다.

시스템이 직렬로 헤드리스로 실행되고 있습니다. Wi-Fi를 통한 네트워킹 만 필요합니다 (USB 전원을 비활성화하여 Wi-Fi가 시작되지 않지만 때로는 비활성화하지 않아 시작할 수 있습니다).

이 목록을 보면 다음 1.736s keyboard-setup.service과 같은 것들이 958ms kbd.service있습니다. 거의 3 초가 걸립니다. 키보드를 사용하지 않는 경우 필요합니까? 그렇지 않은 경우 어떻게 비활성화합니까?

여기서 안전하게 무엇을 비활성화 할 수 있습니까?

좋아, 여기에 정말로 이상한 것이 있습니다. 더 많은 서비스를 비활성화했지만 여전히 총 ​​시간이 오래 걸리지 만 이제는 더 오래 걸리는 일부 서비스 만 훨씬 오래 걸립니다 ...

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 systemd-fsck@dev-mmcblk0p6.service
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 user@1000.service
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

서비스 파일 : (코드 구문이 작동하지 않는 이유를 모르겠습니다)

[Unit]
Description=Disable USB power
Before=networking.service
After=local-fs.target
DefaultDependencies=no

[Service]
Type=oneshot
ExecStart=/sbin/usb_down

[Install]

줄거리는 다음과 같습니다. http://www.eternal-lands.com/plot.svg

여기에 이미지 설명을 입력하십시오


1
아마도 systemd-analyze plot이미지 를 실행 하고 여기에 이미지를 포함 시키면 문제가 무엇인지 더 분명 할 수 있습니다 (타이밍을 보여주는 멋진 SVG 차트를 생성하고 아마도 정리할 것입니다).
Aurora0001

1
제안에 감사드립니다. 줄거리를 추가하기 위해 게시물을 편집했습니다.
Radu

의 서비스 파일에 붙여 넣어야합니다 disableusb.service. BTW, 당신은 패키지 convert plog.svg plog.jpg를 설치하면 빨리 imagemagick/
goldilocks

서비스 파일을 추가하기 위해 질문을 편집했습니다.
Radu

질문 : 어떤 종류의 SD 카드가 있습니까? 더 빠른 SD 카드는 이러한 최적화보다 빠른 부팅 시간을 제공 할 수 있습니다. 최소 60mb / s 등급입니까?
cybernard

답변:


7
7.476s disableusb.service

이것은 영구적이지 않기 때문에 포 그라운드에서 무언가를 실행하고 있음을 의미하므로 배경에 아무런 의미가 없습니다. 그러나 그 일을하는 데 시간이 오래 걸리면 대신 시작하자마자 배경으로 포크해야합니다.

여기서 문제는 부팅 시간을 전경에 두는 것보다 부팅 시간에 도움이 될 수 있다는 것입니다. 그러나 다른 서비스가 완료에 의존하는 경우 (지속적인 서비스에 더 적합한 초기화를 성공적으로 완료하는 것이 아니라) 그대로 두어야합니다.

1.736s keyboard-setup.service 및 958ms kbd.service와 같은 것을 봅니다. 거의 3 초가 걸립니다.

그다지 중요하지 않기 때문에 본 적이 없었지만 "키보드 설정"이 Raspbian에서 처리되는 방식에 문제가 있다고 생각합니다. systemd에 의해 죽기 전에 90 초 동안 실행되는 것을 보았습니다.

키보드를 사용하지 않는 경우 필요합니까? 그렇지 않은 경우 어떻게 비활성화합니까?

나는 그렇지 않다고 생각하지만 갑자기 키보드가 필요하다면 번거 로움이 생길 수 있습니다 ... 아니면 전혀 차이가 없을 수도 있습니다. setup "은 정적 구성이며 필요에 따라 수동으로 변경할 수 있습니다.

서비스를 비활성화하려면 sudo systemd disable ....

raspi-config.service

홀수 후에는 스스로 비활성화해야하기 때문에 여전히 존재합니다.하지만 무시하면 발생할 수 없습니다. 키보드와 관련이있을 수 있습니다. 가능하면 모니터를 연결하고 부팅 후 팝업되는지 확인해야합니다. 어쨌든 이것은 비활성화 할 수도있는 다른 것입니다.

줄거리는 다음과 같습니다. http://www.eternal-lands.com/plot.svg

나는 당신이 만들어야한다고 생각합니다 disableusb.service After=sysinit.target.


나는 pi@raspberrypi:~$ sudo systemd disable raspi-config.service~을했다 Excess arguments.. 또한 해당 서비스 중 다수가에 나열되어 있지 않습니다 systemctl list-unit-files.
Radu

1
와의 관계는 networking.service어떻습니까? 의도하지 않은 것으로 가정하고 있기 때문에 sysinit (네트워킹 초기화 대기) 후에 시작하는 것이 좋습니다. 어쨌든 28 초에가 포함되어 있으면 disableusbPi의 모든 모델에 대해 꽤 합리적인 부팅 시간입니다. 그들 중 누구도 빠르지 않습니다.
goldilocks

1
USB를 비활성화하면 Wi-Fi 시작을 막는 것이 아니라 전력을 절약하는 역할이 있습니다. 아이디어는 wifi가 때때로 시작되어야하며,이 경우 스크립트가 전원을 비활성화하지 않아야한다는 것입니다.
Radu

2
disableusbWi-Fi가 시작되지 않도록하려면 네트워크가 시작되기 전에 완료해야 한다고 주장하는 경우 최적화를 시도하는 데 시간을 낭비하고 있습니다 . 솔직히 말하면 바보 일뿐입니다. 당신은 놀고 내 케이크를 먹고도 먹고 있습니다. 전원을 절약하기 위해 USB를 사용하지 않으려면 Wi-Fi 문제를 별도로 처리해야합니다. 귀찮게 할 수 없다면 부팅 시간을 초 단위로 짜내는 데 시간을 낭비하지 마십시오.
goldilocks

1
나는 당신이 말하는 것을 이해하지 못한다고 생각합니다. 나는 당신이 제안한대로 대부분의 스크립트를 옮겼으며 부팅 시간이 거의 2 초 증가했다고 말했습니다.
Radu

3

그래프를 보면, 비활성화 console-setup.service해도 실제로는 속도가 빨라지지 않는 것이 분명 합니다. 보시다시피 완료 networking.service될 때까지 대기 disableusb.service중이므로 1.6 초의 console-setup.service병렬 실행 시간 은 전체 부팅 시간에 전혀 영향을 미치지 않습니다.

이 경로의 활동이 지연 될 때 전체 프로젝트에 지연이 발생 하는 중요한 경로 를 예약하는 아이디어가 있습니다 . 다른 액티비티에는 '플로트'가 있습니다. 즉 중요하지 않으며 최종 마무리 시간에 영향을주지 않고 지연 될 수 있습니다.

그것은 이것이다 임계 경로 당신이 아니라 중요하지 않은 활동에 시간을 저장해야합니다. systemd-analyze critical-chain줄거리에서 많은 부분을 발견 할 수 있지만 중요한 활동을 식별하는 데 도움이됩니다. 약간의 증가는 disableusb.service부팅 시간에 큰 도움이됩니다.

서비스가 그렇게 오래 걸리는지 이해하는 데 도움이 될 수도 있습니다 . 이를 위해 Bootchart2 가 유용 할 수 있습니다. 다음과 같이 설치할 수 있습니다.

apt-get install systemd-bootchart

실제로 활성화하려면 편집 /boot/cmdline.txt하고 설정하십시오.

init=/lib/systemd/systemd-bootchart

부팅이 완료되면 차트 /run/log가 SVG 파일로 저장 됩니다. 그런 다음 init=...초기 설정으로 되 돌리십시오 (또는 이전에없는 경우 삭제).

에 대한 매뉴얼 페이지systemd-bootchart 도 참조하십시오 .


disableusb.service가 수행하는 유일한 CPU 비용이 많이 드는 것 raspistill -o /home/pi/test_boot.jpg입니다. 이것은 단지 테스트 일뿐입니다. 매개 변수를 조금 더 수정하고 시간을 절약 할 수는 있지만 앞으로는 각 그림마다 ~ 10MB 정도의 원시 출력을 활성화하려고합니다. 아마도 약간의 시간이 걸릴 것입니다 쓰기. 나는 부트 차트를 시도 할 것이다. 모니터가 필요하지 않기를 바란다. :)
Radu

나는 PNG도 생산된다고 생각한다. Raspbian에 저장되는 문서에 기록되어 있어야합니다.
Aurora0001

불행히도 작동하지 않습니다. 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). 시작할 때 pybootchartgui -i다음과 같은 경고 메시지가 나타납니다. 경고 : '/var/log/bootchart.tgz'경로가 존재하지 않습니다. 구문 분석 오류 : 빈 상태 : '/var/log/bootchart.tgz'에 유효한 부팅 차트가 없습니다
Radu

2
아, 부트 차트는 이제 Stretch에서 systemd-bootchart 라고하며 systemd 와 더 밀접하게 통합되어 있습니다. @Radu를 적절한 단계로 편집했습니다.
Aurora0001

1
그래서 카메라 앱의 지연 시간이 5 초라는 것을 알았습니다. 내가 사용 --timeout 1하고 부팅 시간을 15.389s로 줄였습니다 :)
Radu

2

나는 머리가없는 raspberrypi Zero를 실행 중이며 몇 초 동안 면도를 할 수 있습니다.

체계화

# Don't start the Light Display Manager on headless
sudo systemctl disable lightdm.service

# In a headless environment you don't need the keyboard setup.
sudo systemctl disable keyboard-setup.service

# Checks if the country is set in the WIFI config. This is likely a regulatory precaution.
sudo systemctl disable wifi-country.service

# Unless you have an external joystick or something that uses `/dev/input/`
sudo systemctl disable triggerhappy.service 

# I read that the swap file actually slows the PI down and decreases SD card lifetime. 
sudo systemctl disable dphys-swapfile.service

# Disable Bluetooth unless you need it
sudo systemctl disable hciuart.service

# Unless you have a hardware button to disable the WIFI you won't need this
sudo systemctl mask systemd-rfkill.service # disabling won't work


# Open GL should be obsolete on a headless machine
sudo systemctl disable gldriver-test.service

# Only disable this one if you're not using `/etc/rc.local`
sudo systemctl mask rc-local

# You might to re-enable this service when making changes using `sudo raspi-config`
sudo systemctl disable raspi-config.service

systemd-analyze부팅 시간 이 출력됩니다.

Startup finished in 1.532s (kernel) + 20.862s (userspace) = 22.395s

최소 부팅 출력

에서 boot/cmdline.txt의 변화 tty1tty3하고 APPEND loglevel=3 quiet logo.nologo종료 후에서rootwait

이것은 나를 위해 또 다른 초를 절약했습니다.

기타

이 사람은 3 초의 라즈베리 피 부팅을 달성합니다 : https://www.samplerbox.org/article/fastbootrpi

다음은 부팅 시간을 줄이는 몇 가지 단계가 포함 된 좋은 블로그입니다. http://himeshp.blogspot.com/2018/08/fast-boot-with-raspberry-pi.html

DougieLawson은 일부 raspberrpi 서비스에 대해 설명합니다 https://www.raspberrypi.org/forums/viewtopic.php?t=195692

PDF 로 제공되는 심층 튜토리얼

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.