Önyükleme süremi nasıl daha fazla azaltabilirim?


11

İhtiyacım olmayan hizmetlerin çoğunu kaldırdıktan sonra, önyükleme yapmak, resim çekmek ve kapanmak yaklaşık 28 saniye sürer. Bunu daha da düşürmek istiyorum ve yaptım systemd-analyze blameve aşağıdakileri aldım:

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.servicebenim ve isminin ima ettiği gibi başka şeyler de yapıyor. Oradaki zamanı geliştirebileceğimden şüpheliyim.

Sistemim seri olarak başsız çalışıyor. Sadece wifi üzerinden ağa ihtiyacım var (wifi başlamıyor çünkü wifi başlamıyor, ancak bazen devre dışı bırakmayacağım, böylece başlayabilir).

Bu listeye baktığımda şöyle şeyler görüyorum: 1.736s keyboard-setup.serviceand 958ms kbd.service. Neredeyse 3 saniye sürüyorlar. Klavye kullanmıyorsam onlara ihtiyacım var mı? Değilse, bunları nasıl devre dışı bırakabilirim?

Buradan başka ne güvenli bir şekilde devre dışı bırakabilirim?

Tamam, burada gerçekten garip bir şey var. Daha fazla hizmeti devre dışı bıraktım ve toplamda bu kadar uzun sürüyor, sadece şimdi daha az zaman alan bazı hizmetler çok daha uzun sürüyor ...

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

Hizmet dosyası: (kod sözdiziminin neden çalışmadığı hakkında bir fikriniz yok)

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

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

[Install]

Arsa: http://www.eternal-lands.com/plot.svg

resim açıklamasını buraya girin


1
Belki systemd-analyze plotgörüntüyü buraya koyarsanız ve buraya eklerseniz sorunun ne olduğu daha açık olabilir (bu, zamanlamaları gösteren güzel bir SVG grafiği üretmeli ve belki de işleri temizleyecektir).
Aurora0001

1
Öneri için teşekkürler, arsa eklemek için gönderiyi düzenledim.
Radu

İçin hizmet dosyasına yapıştırmalısınız disableusb.service. BTW, hızlı olabilir convert plog.svg plog.jpgyüklemek eğer imagemagickpaket /
Goldilocks

Hizmet dosyasını eklemek için soruyu düzenledim.
Radu

Soru: Ne tür SD kartınız var? Daha hızlı bir SD kart, bu optimizasyonlardan daha hızlı açılış süreleri sağlayabilir. En az 60mb / s olarak derecelendirildi mi?
cybernard

Yanıtlar:


7
7.476s disableusb.service

Bu, ön planda bir şey çalıştırdığınız anlamına gelir, çünkü kalıcı değildir, bu yüzden arka planda bir nokta olmadığını hissedersiniz. Ancak, işini yapmak o kadar uzun sürerse, belki de başlar başlamaz arka plana çatallanmalıdır.

Buradaki sorun, önyükleme sürenize fayda sağlamanın, ön planda bırakmaktan daha olası olması, ancak her iki şekilde de bir fark yaratmayabilir. Bununla birlikte, başka bir şey tamamlanmasına bağlıysa (başlatma işlemini başarıyla tamamlamanın aksine, kalıcı bir hizmet için daha uygulanabilir), o zaman olarak bırakmalısınız.

1.736s keyboard-setup.service ve 958ms kbd.service gibi şeyleri görüyorum. Neredeyse 3 saniye sürüyorlar.

Bu konuya hiç bakmadım çünkü benim için çok önemli değil, ama inanıyorum ki Raspbian'da "klavye kurulumunun" işlenme şekli hakkında yanlış bir şey var. Systemd tarafından öldürülmeden 90 saniye önce koştuğunu gördüm.

Klavye kullanmıyorsam onlara ihtiyacım var mı? Değilse, bunları nasıl devre dışı bırakabilirim?

Sanmıyorum, ama aniden bir klavyeye ihtiyacınız varsa bu sizin için bir güçlük yaratabilir ... ya da hiç fark etmeyebilir - şüphemin bir kısmı, aslında "klavye" setup "statik bir yapılandırmadır ve gerektiği gibi manuel olarak değiştirilebilir.

Bir servisi devre dışı bırakmak için sudo systemd disable ...,.

raspi-config.service

Garip bu hala orada çünkü çalıştırıldıktan sonra kendini devre dışı bırakması gerekiyordu - ama görmezden gelirseniz bu olmayabilir. Bu klavye ile ilgili olabilir. Mümkünse bir monitör takmalı ve önyükleme sonrası çıkıp çıkmadığını görmelisiniz. Her durumda, bu devre dışı bırakabileceğiniz başka bir şeydir.

Arsa: http://www.eternal-lands.com/plot.svg

Bence yapmalısın disableusb.service After=sysinit.target.


Yaptım: pi@raspberrypi:~$ sudo systemd disable raspi-config.serviceve aldım Excess arguments.. Ayrıca, bu hizmetlerin çoğu listede görünmüyor systemctl list-unit-files.
Radu

1
İlişki ne olacak networking.service? Bunun kasıtlı olmadığını varsayıyorum, bu yüzden sysinit'ten sonra başlatılmasını tavsiye ettim (ağın başlatılmasını bekler). Her neyse, 28 saniyenizi içeriyorsa disableusb, herhangi bir Pi modeli için oldukça makul bir önyükleme süresi olduğunu unutmayın. Hiçbiri hızlı değil.
goldilocks

1
USB'nin devre dışı bırakılması, sadece wifi'nin başlamasını önlemek için değil, güç tasarrufu rolüne sahiptir. Fikir şu ki, wifi bazen başlamalıdır ve komut dosyası bu durumda gücü devre dışı bırakmaz.
Radu

2
disableusbAğ başlamadan önce bitirmek zorunda ısrar etmek istiyorsanız optimize etmeye çalışarak zamanınızı boşa harcıyorsunuz çünkü wifi'nin başlamamasını sağlamak istediğiniz budur. Açıkçası bu aptalca; Sen oynuyorsun kekimi ye ve de ye. Güçten tasarruf etmek için USB'yi devre dışı bırakmak istiyorsanız, harika, ancak wifi sorunuyla ayrı olarak ilgilenmelisiniz. Rahatsız edilemezseniz, önyükleme sürenizden saniyeler sıkmaya çalışırken zamanınızı boşa harcamayın.
goldilocks

1
Ne dediğini anladığımı sanmıyorum. Size söylediğiniz gibi senaryonun büyük bölümünü taşıdığımı söyledim ve önyükleme süresi neredeyse 2 saniye arttı ...
Radu

3

Grafiğe bakıldığında, devre dışı bırakmanın console-setup.serviceaslında hiçbir şeyi hızlandırmayacağı açık görünüyor . Gördüğünüz gibi networking.service, disableusb.servicetamamlanana kadar beklemektedir , bu nedenle console-setup.serviceparalel çalışma için 1,6 saniyelik yükleme süresi toplam önyükleme süresini etkilemez.

Bu yoldaki herhangi bir aktivite geciktiğinde tüm projede gecikmelere neden olan kritik bir yolun planlanması konusunda bir fikir vardır . Diğer faaliyetler 'yüzdürme' özelliğine sahiptir, yani kritik değildirler ve son bitiş zamanını etkilemeden gecikebilirler.

Kritik olmayan aktivitelerden değil, zamandan tasarruf etmeniz gereken bu kritik yoldur . systemd-analyze critical-chainkritik faaliyetleri tanımlamanıza yardımcı olacaktır, ancak bunları arsada hemen hemen görebilirsiniz. Herhangi bir marjinal kazanç disableusb.service, önyükleme sürenize önemli ölçüde yardımcı olacaktır.

Hizmetlerinizin neden bu kadar uzun sürdüğünü anlamanız da yardımcı olabilir . Bunun için Bootchart2 yararlı olabilir. Şunlarla kurulabilir:

apt-get install systemd-bootchart

Bunu gerçekten etkinleştirmek için düzenleyin /boot/cmdline.txtve ayarlayın:

init=/lib/systemd/systemd-bootchart

Önyükleme tamamlandıktan sonra, grafiği /run/logbir SVG dosyası olarak kaydedilmiş bulacaksınız . Ardından, init=...başlangıç ​​ayarlarına geri dönün (veya daha önce orada değilse silin).

Ayrıca man sayfasına bakınsystemd-bootchart .


Disableusb.service bunu tek cpu pahalı şey yapar raspistill -o /home/pi/test_boot.jpg. Bu sadece bir test, parametreleri biraz daha değiştirebilir ve biraz zaman kazandırabilirim, ancak gelecekte de, muhtemelen ekstra bir saniye sürecek olan her bir resim için ~ 10 MB veya daha fazla anlamına gelecek ham çıktıyı etkinleştirmek istiyorum. yazmak. Önyükleme olayını deneyeceğim, umarım monitör gerektirmez :)
Radu

Bence bir PNG de üretiliyor; Raspbian'a kaydettiği belgelerde belirtilmelidir.
Aurora0001

Ne yazık ki, işe yaramıyor. 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). Başladığımda pybootchartgui -ibir: uyarı: path '/var/log/bootchart.tgz' yok, yok sayılıyor. Ayrıştırma hatası: boş durum: '/var/log/bootchart.tgz' geçerli bir bootchart içermiyor
Radu

2
Oh, şimdi Bootchhart şimdi Stretch sistemd-bootchart denir ve systemd ile daha yakından entegre olduğu ortaya çıkıyor . @Radu'yu uygun adımlarla düzenledim.
Aurora0001

1
Yani, kamera uygulamasının sadece 5 saniye gecikme olduğunu öğrendim. Kullandım --timeout 1ve önyükleme süresini 15.389'lara düşürdü :)
Radu

2

Ben başsız bir ahududu Sıfır çalışan ve ondan böyle birkaç saniye tıraş olabilir:

systemd

# 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

Lütfen systemd-analyzeönyükleme süresini çıktıladığını unutmayın :

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

Minimum önyükleme çıktısı

Gelen boot/cmdline.txtdeğişim tty1için tty3ve ekleme yapılması loglevel=3 quiet logo.nologobitiminden sonra enrootwait

Bu benim için bir saniye daha kazandı.

Çeşitli

Bu adam 3 saniyelik bir ahududu önyüklemesi yapar: https://www.samplerbox.org/article/fastbootrpi

Bu, önyükleme süresini azaltmak için bazı adımlarla iyi bir blog: http://himeshp.blogspot.com/2018/08/fast-boot-with-raspberry-pi.html

DougieLawson, raspberrpi hizmetlerinden bazılarını açıklıyor https://www.raspberrypi.org/forums/viewtopic.php?t=195692

PDF olarak derinlemesine eğitim

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.