起動時間をさらに短縮するにはどうすればよいですか?


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経由のネットワーキングのみが必要です(usb電源を無効にしたためにwifiは起動しませんが、起動できないように無効にしない場合があります)。

このリストを見ると、私のようなものを参照してください1.736s keyboard-setup.service958ms 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。ところで、パッケージconvert plog.svg plog.jpgをインストールすれば、すぐにできimagemagickます/
goldilocks

質問を編集してサービスファイルを追加しました。
ラドゥ

質問:どのようなSDカードをお持ちですか?より高速なSDカードは、これらの最適化のどれよりも速い起動時間を提供する場合があります。定格は60mb / s以上ですか?
cybernard 2018年

回答:


7
7.476s disableusb.service

これは永続的ではないため、何かをフォアグラウンドで実行していることを意味します。そのため、バックグラウンド化する意味がないと感じます。ただし、その処理にそれだけ時間がかかる場合は、代わりに開始されたらすぐにバックグラウンドにフォークする必要があります。

ここでの問題は、どちらの方法でも違いはないかもしれませんが、フォアグラウンドのままにしておくよりもブート時間に利益をもたらす可能性が高いということです。ただし、それが完了することに依存している場合(永続化サービスに適用される初期化を正常に完了するのではなく)、そのままにする必要があります。

1.736s keyboard-setup.serviceと958ms kbd.serviceのようなものが見られます。約3秒かかります。

あまり重要ではないので調べたことはありませんが、Raspbianでの「キーボード設定」の処理方法に問題があると思います。私はそれがsystemdによって殺される前に90秒実行するのを見ました。

キーボードを使用していない場合に必要ですか?そうでない場合は、どうすれば無効にできますか?

私はそうではないと思いますが、突然キーボードが必要になった場合、これはあなたにとって面倒なことになるかもしれません...またはそれはまったく何の違いもないかもしれません-私の疑いの一部は、実際には何も達成していないということです。セットアップ」は静的な構成であり、必要に応じて手動で変更できます。

サービスを無効にするには、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
ラドゥ

1
との関係はnetworking.serviceどうですか?私はそれが意図的ではなかったと思います。そのため、sysinit(ネットワークの初期化を待機する)の後に開始することをお勧めしました。とにかく、28秒にが含まれている場合disableusb、Piのどのモデルでもかなり妥当な起動時間になることに注意してください。それらのどれも高速ではありません。
ゴルディロックス

1
USBを無効にすることは、WiFiの起動を妨げるだけでなく、電力を節約する役割があります。アイデアは、wifiは時々起動する必要があり、その場合、スクリプトは電源を無効にしません。
Radu

2
disableusbネットワークが開始する前に終了する必要があると主張したい場合は、これがWi-Fiが起動しないことを確認する方法であるため、最適化の試行に時間を費やしています。正直言って、それはばかげています。あなたは私のケーキを持って遊んでいます。USBを無効にして電力を節約したい場合は、すばらしいですが、wifiの問題は別に処理する必要があります。気になることができない場合は、起動時間から数秒を絞ろうとする時間を無駄にしないでください。
ゴルディロックス

1
あなたの言っていることが理解できないと思います。私はあなたが提案したようにスクリプトの大部分を移動し、起動時間がほぼ2秒増加したと言いました...
Radu

3

グラフを見ると、無効console-setup.serviceにしても実際には何もスピードアップしないことは明らかです。ご覧のように、完了するnetworking.serviceまで待機しているdisableusb.serviceので、console-setup.service並列実行の1.6秒の読み込み時間は、全体の起動時間にまったく影響しません。

クリティカルパスのスケジュールには、このパスのアクティビティが遅延するとプロジェクト全体に遅延を引き起こすというアイデアがあります。他のアクティビティには「フロート」があります。つまり、それらは重要ではなく、最終的な終了時間に影響を与えることなく遅延させることができます。

重要ではないアクティビティではなく、このクリティカルパスで時間を節約する必要があります。systemd-analyze critical-chain重要な活動を特定するのに役立ちますが、プロット上でそれらをほとんど見つけることができます。限界利益がdisableusb.serviceあれば、起動時間を大幅に短縮できます。

また、サービスに時間がかかる理由を理解するのにも役立つ場合があります。このため、Bootchart2が役立つ場合があります。次のようにインストールできます。

apt-get install systemd-bootchart

実際に有効にするには、編集/boot/cmdline.txtして設定します。

init=/lib/systemd/systemd-bootchart

起動が完了すると、チャートが/run/logSVGファイルとして保存されます。次に、init=...初期設定に戻します(または、以前に設定されていなかった場合は削除します)。

マニュアルページsystemd-bootchartも参照してください。


disableusb.serviceがそれを行う唯一のcpuの高価なものraspistill -o /home/pi/test_boot.jpg。これは単なるテストであり、パラメータを少し変更して時間を節約する可能性がありますが、将来的には生の出力も有効にしたいと考えています。これは、各写真で約10 MB程度になることを意味します。書きます。ブートチャートを試してみますが、モニターが必要ないことを願っています:)
Radu

PNGも作成されていると思います。Raspbianで保存するドキュメントで注意する必要があります。
Aurora0001 2018年

残念ながら、機能しません。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.389秒に短縮しました:)
Radu

2

私はヘッドレスのraspberrypi Zeroを実行しており、次のようにそれから数秒剃ることができます:

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

これにより、さらに1秒節約できました。

その他

この男は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.