Raspberry Piの起動時間を改善するには?


27

永続的にオンにならない埋め込み可能なリモートアプリケーションを作成しています。私はさまざまなOSディストリビューションをいじくり回してきましたが、読み取り速度の速い優れたSDカードを使用することで、起動時間を大幅に短縮できます。特定のディストリビューションに固定されているわけではないので、最小限のLinuxディストリビューションを使用するために必要なだけ削減できます。

(ブート時間を改善するために人々が実行したベンチマークを探しましたが、確固たる数字のあるものは見つかりませんでした。)

ビルドルートを使用することもできます(YouTubeビデオのRaspberry Pi-超高速起動時間-Marshmallow Entertainment Systemも参照)...


この質問を終了するには投票する必要があります。その後、ユーザーは元の質問にリダイレクトされ、さらに回答が追加されます。まだ回答済みとしてマークされていないため。
ピョートルクラ14年

私はこれにたくさんの活動があることを考えています(ビューは明らかに1日未満なので、ビューはそれほど高くありません)、より多くの投票とより多くの回答がありますので、これを残す方が良いかもしれないと思いましたそして、おそらくあなたの答えをここに移動します。本当に便利だと思う。1人のユーザーが回答を移動し、3人のユーザーが回答を移動し、すべての投票、会話などを失います。何らかの方法で行かなければならない理由はありますか?私はちょうど答えた他の人が移動したくない場合がありますことを考えるので、私たちを失うコンテンツよ、気にしない
RPiAwesomeness

@ppumkinデュープの閉鎖に関するこのMeta.SEの投稿をチェックしてください。適切な複製このSEのブログ投稿を削除しないでください。彼らは私の以前の点に同意すると思います。重複している場合を除き、他の1、またはひどい品質のコピー&ペースト、およびこの1つは答え/活動の多くを持っているので、私たちは彼らに、両方のオープンのままにする必要があります。
RPiAwesomeness

1
@ppumkin良い点、これが削除されない限り。私はもともと「オープンのまま」をレビューしましたが、これを複製としてマークするのが正しい方法だと思います。私が考えることができる唯一のことは、私は少なくとも、複製よりもマークされたオリジナルでより高品質のQ / Aを持ちたいということです。ここでは絶対にそうではありません。
RPiAwesomeness 14年

1
うん、あなたは正しい。ここにはさらに回答があります。もっと注目を集めたようです。ここで何をすべきかをよく知っているので、モデレーターに決定を委ねる必要があると思います。とにかく。あなたの答えに票を割り当てることでよくできました:) OPはあなたの貢献に感謝していると確信しています。+1
ピョートルクラ14年

回答:


13

Arch LinuxをFredが提案した機能と組み合わせた場合、一般に高速な起動OSが得られます。

OSの起動時間を遅くするのは

  1. 読み取り/書き込み(I / O)速度が遅い。

    したがって、より高速なSDカードを使用する役立ちます。クラス10カードはクラス4カードよりも大幅に高速になります。私はSDカードのクラスがどのように機能するかを誤解しましたが、それはコメントではっきりと指摘されています。実際、クラス10カードは、HDビデオなどの大容量ファイルの転送において、クラス4カードよりも高速です。どうやらクラス4は小さいファイルでも同じように機能します。繰り返しますが、私の悪いことですが、ちょっと、私たちは皆、時々学びます。

  2. 行き詰まった初期化シーケンス。

    ブートフェーズ中に起動するソフトウェアが多数ある場合、ブート時間は遅くなります。より多くのソフトウェアの起動==起動時間が長くなります。

    したがって、高速ブートが必要な場合は、可能な限り多くのソフトウェアを初期化シーケンスから切り取ります。メインブートシーケンスの完了にソフトウェア起動し、負荷をさらに分散させる単純なスクリプトを作成できます(または、そこにあると確信しています)。

それは基本的にそれです。以前に言ったように、Arch Linuxはおそらく、Fredが言及した機能と組み合わせた方法です。Archは非常に最小限のOSであり、初心者が使用するのに最適なものではないかもしれませんが、Linuxの経験がある場合は、それをお勧めします。それはインストールするために最低限に付属しているように、それはちょうど、セットアップのビットを取り、それはそれです

あなたのプロジェクトがうまくいくことを願っています!


3
SDカードの「クラス」は、組み込みシステムのパフォーマンスの非常に低い指標です。「クラス」の評価は、起動スクリプトなどの小さなファイルではなく、大規模な順次ファイル転送(マルチメガピクセルのデジタルカメラを使用している場合など)に対するものです。クラス4のカードは、4kの読み取りおよび書き込み操作で、ほとんどのクラス10のカードよりも100倍以上優れています。IOPSが良好なクラス10カードがありますが、それらのモデルはほとんどありません。
ベンフォイト14年

はい、私は@BenVoigtに同意します-クラス4を使用したとき、小さな書き込みと更新は高速であるように見えましたが、クラス10の大きな転送ははるかに優れています。バッテリーで動作するRAMカードを使用して、すぐにパフォーマンスを実現できるといいのですが。
ピョートルクラ14年

すみません、知りませんでした。すぐに修正します。クラスが高ければ高いほど速度が速いことを理解していました。それを指摘してくれてありがとう、私は何かを学んだ:D賛成票もありがとう:)
RPiAwesomeness 14年

私の答えがなぜダウン投票されたのだろうと思っています。私は完全に担当者の損失を気にしません。ただ、下票に値するものを知りたいので、答えを改善することができます。
RPiAwesomeness

7

Arch Linuxを使用することをお勧めします。

5秒(カーネル)+ 5秒(ユーザー空間)の通常の起動時間を取得systemdします。init を使用しているため、それほど労力を必要としません。


2
@ goldilocks、raspbianでもsystemdを使用できます。起動時間が半分になりました。
ジョンラルーイ14

@JohnLaRooy知って良かった。従来のinitとパフォーマンスの違いは主にsystemdが並列化できるためだと考えていましたが、おそらくすべてのシェルスクリプトを分岐および解釈する必要がないため、時間を節約できます。
goldilocks

@goldilocks私は同意しません、私は試しましたが、とsystemd比較して大きな違いがありsysvinitます。私の答えをご覧ください。
バスジ

@Basj知っておくと良いでしょう。「シングルコアであるため、ブート時間の点で大きな違いはない」というコメントを削除しました。私はほとんどsystemdを使用していますが、TBHではブート時間にあまり注意を払っていません。
goldilocks

7

私はそれについてここに記事を書きました。

要するに:を使用しますsystemd

RaspberryPiアプリは、電源コードを差し込んでから8秒以内、またはLinuxの起動が開始してから3秒以内に簡単に実行できます。

ここの例、私のサービスは呼ばれsamplerbox.serviceます:

ここに画像の説明を入力してください

注:ユーザー空間の時間は必要ないので最適化しようとしませんでした:とにかくアプリが早く起動するので、アプリの起動後、ネットワークのDHCP / IP属性が8秒かかるかどうかは気にしません。


4

最適な解決策はおそらく、起動時に必要なことだけを行うディストリビューションを構築することです。これにより、最小限の時間が保証されます(sinitのような最小限のinitシステムを使用)。または、Linuxカーネルのディスクへのサスペンド(休止状態)機能の使用を検討することもできます。一度起動すると、その後のサスペンドおよびレジューム操作は非常に速く、その間システムは完全にオフになります。


3

modprobingドライバーの代わりに静的にリンクされたカーネルを使用すると、パフォーマンスが劇的に向上します。カーネルを慎重に構成および再コンパイルすることにより、他の最適化を行う必要があります。


1
数年前の答えをぶつけてすみません。しかし、「静的にリンクされたカーネルを使用する」方法についてさらに情報を提供できますか?
シーザー


これに追加するには、静的にリンクされたカーネルをコンパイルするには、「make menuconfig」または「make xconfig」を実行し、必要なドライバーをモジュールとして選択するのではなく、カーネルに含めるだけです。そうすると、それらがvmlinuzに組み込まれ、ブートアップ時にmodprobeシーケンスをスキップできます。これにより、必要に応じてカーネルモジュールを検出してロードするのにかなりの時間がかかります。
酒に酔ったコードモンキー

ご回答ありがとうございます。有用であるために、それを機能させるための再現可能な手順をいくつか含めることができますか?(のようなもの1) Do this in command line, 2) Do this and this 3) Modify this and this in config.txt 4) Boot, it will take 3.2 seconds! 5) Here is the result of my benchmarks: ...
-Basj

実際には、カーネルの再コンパイルは5ステップの単純なプロセスではありません。Linuxカーネルを構成およびコンパイルする方法を示すハウツーがウェブ上にたくさんあります...
Drunken Code Monkey

1

TinyCoreLinuxを使用します。これは、高速のロードと停電に耐えるように作られています。


ご回答ありがとうございます。動作させるための再現可能な手順をいくつか教えていただけますか?(のようなもの1) Download an image here: +link 2) Flash it on your microSD 3) Modify this and this in config.txt 4) Boot, it will take 3.2 seconds!
-Basj

0

eINITを使用して起動プロセスを高速化することができます。:http ://sourceforge.net/projects/einit/

残念ながら、現在(2016年10月)eINITホームページの注意事項:

eINITは、LinuxおよびFreeBSD用の/ sbin / initプログラムの代替実装でした。まあ、それはまだあると思いますが、プロジェクトは何年も保留されています。


ここでは、情報のないリンクのみの回答に関する新しいポリシーを試行しています。この投稿が最小限の場合でも、答えとなる情報を含むように編集されていない場合、48時間以内にコミュニティWikiに変換され、コミュニティによる修正が簡単になります。
ガニマ

-3

使用しないカーネルモジュールを削除します。


4
このサイトの回答には、推奨アクションの実行に必要な手順(ロードされているモジュールの判別方法、必要なモジュール、削除方法)、および詳細情報への参照とリンクを含める必要があります。
スティーブロビラード14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.