ฉันจะลดเวลาการบูทของฉันให้มากขึ้นได้อย่างไร?


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เป็นของฉันและไม่เหมือนกับชื่อที่บอกเป็นนัยว่ามันทำสิ่งอื่นเช่นกัน ฉันสงสัยว่าฉันสามารถปรับปรุงเวลาที่นั่น

ระบบของฉันกำลังทำงานโดยไม่มีหัว ฉันต้องการเครือข่ายผ่าน wifi เท่านั้น (wifi ไม่ได้เริ่มทำงานเพราะฉันปิดการใช้งานพลังงาน usb แต่บางครั้งฉันจะไม่ปิดการทำงานเพื่อที่จะสามารถเริ่มต้นได้)

มองไปที่รายการนี้ผมเห็นสิ่งต่างๆเช่น: และ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 ฉันเห็นมันทำงาน 90 วินาทีก่อนที่จะถูก systemd ฆ่า

ฉันต้องการมันหรือไม่ถ้าฉันไม่ได้ใช้คีย์บอร์ด? ถ้าไม่ฉันจะปิดการใช้งานได้อย่างไร

ฉันคิดว่าไม่ แต่สิ่งนี้อาจสร้างความยุ่งยากให้กับคุณหากคุณต้องการแป้นพิมพ์ ... หรืออาจสร้างความแตกต่างไม่ได้เลย - ส่วนหนึ่งของความสงสัยของฉันคือว่าจริง ๆ แล้วมันไม่ได้ทำอะไรเลยตั้งแต่ "แป้นพิมพ์" การตั้งค่า "เป็นสิ่งที่มีการกำหนดค่าแบบคงที่และสามารถเปลี่ยนแปลงได้ด้วยตนเองตามที่ต้องการ

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 วินาทีของคุณdisableusbเป็นเวลาบูตที่สมเหตุสมผลสำหรับ Pi รุ่นใด ๆ ไม่มีใครเร็วเลย
goldilocks

1
การปิดใช้งาน usb มีบทบาทในการประหยัดพลังงานไม่ใช่เพียงเพื่อป้องกันการเริ่มต้น wifi แนวคิดก็คือว่า WiFi ควรเริ่มต้นบางครั้งและสคริปต์จะไม่ปิดการใช้งานพลังงานในกรณีนั้น
Radu

2
คุณกำลังเสียเวลาพยายามปรับให้เหมาะสมถ้าคุณต้องการยืนยันdisableusbให้เสร็จก่อนที่เครือข่ายจะเริ่มต้นเพราะนี่คือวิธีที่คุณต้องการให้แน่ใจว่า WiFi ไม่เริ่มทำงาน นั่นเป็นเพียงใบ้ที่จะเปิดเผย คุณกำลังเล่นมีเค้กของฉันและกินด้วย หากคุณต้องการปิดการใช้งาน USB เพื่อประหยัดพลังงานยอดเยี่ยม แต่คุณควรจัดการกับปัญหา wifi แยกต่างหาก หากคุณไม่สามารถใส่ใจได้อย่ามัวเสียเวลาพยายามบีบวินาทีออกจากเวลาบู๊ตของคุณด้วย
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 raspistill -o /home/pi/test_boot.jpgของฉันไม่ได้ นี่เป็นเพียงการทดสอบฉันอาจแก้ไขพารามิเตอร์อีกเล็กน้อยและประหยัดเวลา แต่ในอนาคตฉันยังต้องการเปิดใช้งานเอาต์พุตดิบซึ่งจะหมายถึงอีก 10 MB หรือประมาณนั้นสำหรับแต่ละรูปซึ่งอาจใช้เวลาเพิ่มอีกหนึ่งวินาที เขียน. ผมจะพยายามสิ่ง bootchart ผมหวังว่ามันจะไม่จำเป็นต้องมีการตรวจสอบ :)
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
โอ้ปรากฎว่า bootchart ตอนนี้เรียกว่าsystemd-bootchartใน Stretch และรวมเข้ากับ systemd อย่างใกล้ชิดมากขึ้น ฉันแก้ไข @Radu ด้วยขั้นตอนที่เหมาะสมแล้ว
Aurora0001

1
ดังนั้นฉันจึงพบว่าแอพกล้องถ่ายรูปมีความล่าช้า 5 วินาทีเพียงเพราะ ฉันใช้--timeout 1และมันลดเวลาการบู๊ตเป็น 15.389s :)
Radu

2

ฉันกำลังใช้ raspberrypi Zero-head ที่ไม่ต้องใช้หัวและฉันสามารถโกนบางวินาทีจากมันได้เช่น:

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

โปรดทราบว่าsystemd-analyzeเวลาการส่งออกเอาท์พุท:

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

เอาต์พุตบูตน้อยที่สุด

ในboot/cmdline.txtการเปลี่ยนแปลงtty1ไปtty3และผนวกloglevel=3 quiet logo.nologoในตอนท้ายหลังจากที่rootwait

บันทึกนี้อีกวินาทีสำหรับฉัน

อื่น ๆ

ผู้ชายคนนี้ประสบความสำเร็จในการบูต raspberrypi 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.