Làm thế nào tôi có thể giảm thời gian khởi động nhiều hơn?


11

Sau khi xóa hầu hết các dịch vụ mà tôi không cần, vẫn mất khoảng 28 giây để khởi động, chụp ảnh và tắt máy. Tôi muốn hạ thấp điều này hơn nữa, và tôi đã làm một systemd-analyze blamevà nhận được những điều sau đây:

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.servicelà của tôi, và không giống như những gì cái tên ám chỉ nó cũng làm những việc khác. Tôi nghi ngờ tôi có thể cải thiện thời gian ở đó.

Hệ thống của tôi đang chạy không đầu, nối tiếp. Tôi chỉ cần kết nối mạng qua wifi (wifi không khởi động được vì tôi tắt nguồn USB, nhưng đôi khi tôi sẽ không tắt nó để nó có thể khởi động).

Nhìn vào danh sách này, tôi thấy những thứ như: 1.736s keyboard-setup.service958ms kbd.service. Họ mất gần 3 giây. Tôi có cần chúng nếu tôi không sử dụng bàn phím không? Nếu không, làm thế nào để tôi vô hiệu hóa chúng?

Những gì khác tôi có thể vô hiệu hóa một cách an toàn từ đây?

Ok, có một cái gì đó thực sự kỳ lạ ở đây. Tôi đã vô hiệu hóa thêm một số dịch vụ và tổng cộng vẫn mất nhiều thời gian, chỉ có điều bây giờ một số dịch vụ mất ít thời gian hơn trước đó mất nhiều thời gian hơn ...

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

Tệp dịch vụ: (không biết tại sao cú pháp mã không hoạt động)

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

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

[Install]

Dưới đây là cốt truyện: http://www.eternal-lands.com/plot.svg

nhập mô tả hình ảnh ở đây


1
Có lẽ có thể rõ ràng hơn vấn đề là gì nếu bạn chạy systemd-analyze plotvà bao gồm hình ảnh ở đây (điều đó sẽ tạo ra một biểu đồ SVG đẹp hiển thị thời gian và có thể sẽ làm sáng tỏ mọi thứ).
Aurora0001

1
Cảm ơn lời đề nghị, tôi đã chỉnh sửa bài viết để thêm cốt truyện.
Radu

Bạn nên dán vào tập tin dịch vụ cho disableusb.service. BTW, bạn có thể nhanh chóng convert plog.svg plog.jpgnếu bạn cài đặt imagemagickgói /
goldilocks

Tôi chỉnh sửa câu hỏi để thêm tập tin dịch vụ.
Radu

Câu hỏi: Bạn có loại thẻ SD nào? Thẻ SD nhanh hơn có thể cung cấp thời gian khởi động nhanh hơn bất kỳ tối ưu hóa nào trong số này. Được đánh giá ít nhất 60mb / s?
gian mạng

Câu trả lời:


7
7.476s disableusb.service

Điều này ngụ ý rằng bạn đang chạy một cái gì đó ở phía trước vì nó không bền bỉ nên bạn cảm thấy không có điểm nào trong việc tạo nền cho nó. Tuy nhiên, nếu mất nhiều thời gian để thực hiện công việc của mình, có lẽ bạn nên rẽ nhánh sang nền ngay khi nó bắt đầu.

Vấn đề ở đây chỉ đơn giản là nó có nhiều lợi ích cho thời gian khởi động của bạn hơn là để nó ở phía trước, mặc dù nó có thể không tạo ra bất kỳ sự khác biệt nào. Tuy nhiên, nếu một cái gì đó khác phụ thuộc vào việc nó hoàn thành (trái ngược với việc hoàn thành khởi tạo thành công, áp dụng nhiều hơn cho một dịch vụ liên tục), thì bạn nên để nó như là.

Tôi thấy những thứ như: 1.736s keyboard-setup.service và 958ms kbd.service. Họ mất gần 3 giây.

Tôi chưa bao giờ xem xét nó bởi vì nó không quan trọng với tôi, nhưng tôi tin rằng có điều gì đó không đúng về cách "thiết lập bàn phím" được xử lý trên Raspbian. Tôi đã thấy nó chạy 90 giây trước khi bị systemd giết.

Tôi có cần chúng nếu tôi không sử dụng bàn phím không? Nếu không, làm thế nào để tôi vô hiệu hóa chúng?

Tôi cho là không, nhưng điều này có thể tạo ra rắc rối cho bạn nếu bạn đột nhiên cần bàn phím ... hoặc nó có thể không có gì khác biệt - một phần của sự nghi ngờ của tôi là nó thực sự không hoàn thành bất cứ điều gì, vì "bàn phím thiết lập "là một cái gì đó là cấu hình tĩnh và có thể được thay đổi bằng tay theo yêu cầu.

Để vô hiệu hóa một dịch vụ , sudo systemd disable ....

raspi-config.service

Điều lạ lùng là nó vẫn còn đó vì nó được cho là tự vô hiệu hóa sau khi nó được chạy - nhưng điều đó có thể không xảy ra nếu bạn bỏ qua nó. Điều đó có thể liên quan đến điều bàn phím. Nếu có thể, bạn nên cắm vào màn hình và xem nó có bật lên bài khởi động không. Trong mọi trường hợp, đây là một cái gì đó khác bạn cũng có thể vô hiệu hóa.

Dưới đây là cốt truyện: http://www.eternal-lands.com/plot.svg

Tôi nghĩ bạn nên làm disableusb.service After=sysinit.target.


Tôi đã làm một: pi@raspberrypi:~$ sudo systemd disable raspi-config.servicevà có Excess arguments.. Ngoài ra, nhiều dịch vụ trong số đó không xuất hiện được liệt kê trong systemctl list-unit-files.
Radu

1
Còn mối quan hệ networking.servicethì sao? Tôi cho rằng đó không phải là cố ý, đó là lý do tại sao tôi khuyên bạn nên bắt đầu sau sysinit (chờ kết nối mạng để khởi tạo). Dù sao, hãy nhớ rằng nếu 28 giây bao gồm của bạn disableusb, đó là thời gian khởi động khá hợp lý cho bất kỳ mô hình nào của Pi. Không ai trong số họ là nhanh.
goldilocks

1
Vô hiệu hóa usb có vai trò bảo tồn năng lượng, không chỉ để ngăn chặn wifi bắt đầu. Ý tưởng là đôi khi wifi NÊN bắt đầu và tập lệnh sẽ không tắt nguồn trong trường hợp đó.
Radu

2
Bạn đang lãng phí thời gian để cố gắng tối ưu hóa nếu bạn muốn nhấn mạnh disableusbphải kết thúc trước khi bắt đầu kết nối mạng vì đây là cách bạn muốn đảm bảo wifi không khởi động. Thật là ngu ngốc, thẳng thắn; bạn đang chơi có bánh của tôi và ăn quá. Nếu bạn muốn tắt USB để tiết kiệm năng lượng, thật tuyệt, nhưng bạn nên giải quyết vấn đề wifi riêng. Nếu bạn không thể bị làm phiền, thì đừng lãng phí thời gian của bạn để cố gắng rút ngắn thời gian khởi động.
goldilocks

1
Tôi không nghĩ tôi hiểu những gì bạn đang nói. Tôi đã nói với bạn rằng tôi đã di chuyển phần lớn kịch bản như bạn đề xuất và thời gian khởi động tăng lên gần 2 giây ...
Radu

3

Nhìn vào biểu đồ, có vẻ như rõ ràng rằng việc vô hiệu hóa console-setup.servicesẽ không thực sự tăng tốc bất cứ điều gì. Như bạn có thể thấy networking.serviceđang đợi cho đến khi disableusb.servicehoàn thành, do đó thời gian tải 1.6 giây để console-setup.servicechạy song song sẽ không ảnh hưởng đến toàn bộ thời gian khởi động.

Có một ý tưởng trong việc lập lịch trình cho một con đường quan trọng , khi bất kỳ hoạt động nào trong đường dẫn này bị trì hoãn, gây ra sự chậm trễ cho toàn bộ dự án. Các hoạt động khác có 'nổi', tức là chúng không quan trọng và có thể bị trì hoãn mà không ảnh hưởng đến thời gian kết thúc cuối cùng.

Đây là con đường quan trọng mà bạn phải tiết kiệm thời gian chứ không phải các hoạt động không quan trọng. systemd-analyze critical-chainsẽ giúp bạn xác định các hoạt động quan trọng, mặc dù bạn có thể phát hiện ra chúng trên cốt truyện. Bất kỳ lợi nhuận cận biên disableusb.servicesẽ giúp thời gian khởi động của bạn đáng kể.

Nó cũng có thể giúp hiểu lý do tại sao các dịch vụ của bạn mất nhiều thời gian như vậy. Đối với điều này, Bootchart2 có thể hữu ích. Nó có thể được cài đặt với:

apt-get install systemd-bootchart

Để thực sự kích hoạt nó, hãy chỉnh sửa /boot/cmdline.txtvà thiết lập:

init=/lib/systemd/systemd-bootchart

Sau khi khởi động xong, bạn sẽ tìm thấy biểu đồ được lưu /run/logdưới dạng tệp SVG. Sau đó, trở lại init=...cài đặt ban đầu (hoặc xóa nó nếu nó không ở đó trước đó).

Xem thêm trang người đàn ông chosystemd-bootchart .


Điều cpu đắt tiền duy nhất mà vô hiệu hóa của tôi làm điều đó raspistill -o /home/pi/test_boot.jpg. Đây chỉ là một thử nghiệm, tôi có thể sửa đổi các tham số nhiều hơn một chút và tiết kiệm thời gian, nhưng trong tương lai tôi cũng muốn kích hoạt đầu ra thô, nghĩa là thêm ~ 10 MB hoặc hơn cho mỗi pic, có thể sẽ mất thêm một giây viết. Tôi sẽ thử điều khởi động, tôi hy vọng nó không cần màn hình :)
Radu

Tôi nghĩ rằng một PNG cũng được sản xuất; cần lưu ý trong tài liệu lưu ở Raspbian.
Aurora0001

Thật không may, nó không hoạt động. 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). Khi tôi bắt đầu, pybootchartgui -itôi nhận được một: cảnh báo: đường dẫn '/var/log/bootchart.tgz' không tồn tại, bỏ qua. Lỗi phân tích cú pháp: trạng thái trống: '/var/log/bootchart.tgz' không chứa bootchart hợp lệ
Radu

2
Ồ, hóa ra bootchart bây giờ được gọi là systemd-bootchart trong Stretch và được tích hợp chặt chẽ hơn với systemd. Tôi đã chỉnh sửa, @Radu, với các bước thích hợp.
Aurora0001

1
Vì vậy, tôi phát hiện ra rằng ứng dụng camera có độ trễ 5 giây, chỉ vì. Tôi đã sử dụng --timeout 1và nó đã giảm thời gian khởi động xuống 15.389 giây :)
Radu

2

Tôi đang chạy một raspberrypi Zero không đầu và tôi có thể cạo một vài giây từ nó như vậy:

Hệ thống

# 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

Xin lưu ý rằng systemd-analyzeđầu ra thời gian khởi động:

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

Đầu ra khởi động tối thiểu

Trong boot/cmdline.txtsự thay đổi tty1đến tty3và append loglevel=3 quiet logo.nologovào cuối saurootwait

Điều này tiết kiệm thêm một giây cho tôi.

Linh tinh

Anh chàng này đạt được khởi động raspberrypi trong 3 giây: https://www.samplerbox.org/article/fastbootrpi

Đây là một blog tốt với một số bước để giảm thời gian khởi động: http://himeshp.blogspot.com/2018/08/fast-boot-with-raspberry-pi.html

DougieLawson giải thích một số dịch vụ raspberrpi https://www.raspberrypi.org/forums/viewtopic.php?t=195692

Hướng dẫn chuyên sâu dưới dạng PDF

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.