GNU/Linux >> Linux の 問題 >  >> Linux

Linuxをより速く起動する

私がこれまでに所有または使用したすべてのコンピューターの中で、最も速く起動したのは1980年代のものでした。手が電源スイッチからキーボードに移動するまでに、BASICインタープリターはコマンドの準備ができていました。最近のコンピューターは、ラップトップの15秒から、小さなホームサーバーの起動に数分かかります。なぜ起動時間​​にこのような違いがあるのですか?

BASICプロンプトを直接起動する1980年代のマイクロコンピュータは、電源が入るとすぐにメモリアドレスから命令をフェッチして実行し始める非常に単純なCPUを備えていました。これらのシステムにはROMにBASICが含まれているため、ロード時間はありませんでした。BASICプロンプトに非常にすばやく到達しました。 IBM PCやMacintoshなど、同じ時代のより複雑なシステムは、起動にかなりの時間(〜30秒)を要しましたが、これは主にフロッピーディスクからオペレーティングシステム(OS)を読み取る必要があるためでした。 OSをロードできるようになるまで、ファームウェアに費やされたのはほんの数秒でした。

最近のサーバーは通常、ディスクからOSを起動する前に、ファームウェアに数秒ではなく数分を費やします。これは主に、最新のシステムの複雑さが増しているためです。 CPUが起動して、フルスピードで命令の実行を開始することはできなくなりました。 CPU周波数のスケーリング、多くの電力を節約するアイドル状態、および複数のCPUコアに慣れてきました。実際、最近のCPUの中には、メインCPUコアを起動し、周波数が高くなりすぎたときに周波数を調整するなどのランタイムサービスを提供する、驚くほど多くの単純なCPUがあります。ほとんどのCPUアーキテクチャでは、CPU内のこれらのコアで実行されているコードは、不透明なバイナリブロブとして提供されます。

OpenPOWERシステムでは、CPU内のすべてのコアで実行されるすべての命令はオープンソースソフトウェアです。 OpenBMCを搭載したマシン(IBMのAC922システムやRaptorのTALOS IIおよびBlackbirdシステムなど)では、これはBaseboardManagementControllerで実行されているコードにも適用されます。これは、電源ケーブルを接続してからおなじみのログインプロンプトが表示されるまでにかかる時間について、非常に多くの洞察を得ることができることを意味します。

Linuxカーネルで作業するチームの一員である場合は、おそらく多くのカーネルを起動します。ファームウェアに取り組んでいるチームの一員である場合は、おそらく多くの異なるファームウェアイメージを起動し、続いてOSを起動してファームウェアが引き続き機能することを確認します。ハードウェアの起動時間を短縮できれば、これらのチームの生産性が向上し、エンドユーザーは、システムをセットアップしたり、ファームウェアやOSのアップデートをインストールするために再起動したりするときに感謝するかもしれません。

プログラミングと開発

  • RedHat開発者ブログ
  • チートシートのプログラミング
  • 無料でお試しください:RedHatLearningサブスクリプション
  • eBook:Bashを使用したプログラミングの概要
  • Bashシェルスクリプトのチートシート
  • eBook:エンタープライズJavaの最新化

何年にもわたって、Linuxディストリビューションの起動時間に多くの改善が加えられてきました。最新の初期化システムは、物事を同時にオンデマンドで実行することをうまく処理します。最新のシステムでは、カーネルの実行が開始されると、ログインプロンプトが表示されるまでに数秒かかる場合があります。この数秒は、起動時間を最適化する場所ではありません。 OSに到達する前に、早めに移動する必要があります。

OpenPOWERシステムでは、ファームウェアは、Petitbootと呼ばれるユーザースペースプログラムを実行するファームウェアフラッシュチップに格納されているLinuxカーネルを起動して、ユーザーが起動するOSとkexec()を保持するディスクを見つけることによってOSをロードします。このコードの再利用は、Linuxの起動を高速化するために行われた取り組みを活用しています。それでも、カーネル構成とユーザースペースに、起動時間を数秒短縮して簡単に短縮できる場所を見つけました。これらの最適化により、Petitboot環境の起動は、起動時間の1桁の割合であるため、他の場所でさらに改善を見つける必要がありました。

Petitboot環境が開始する前に、Skibootと呼ばれるファームウェアの前のビットがあり、その前にHostbootがあります。 Hostbootの前には、Self-Boot Engineがあります。これは、単一のCPUコアを起動し、レベル3キャッシュから命令を実行するダイ上の独立したコアです。これらのコンポーネントは、その圧倒的多数を占めるため、ブート時間を短縮する上で最も前進できる場所です。おそらく、これらのコンポーネントのいくつかは、十分に最適化されていないか、可能な限り並行して実行されていませんか?

攻撃のもう1つの方法は、起動時間ではなく再起動時間です。再起動時に、本当に すべてを再初期化する必要があります ハードウェア?

最新のシステムと同様に、起動(および再起動)時間を改善するためのソリューションは、より多くのことを並行して実行し、レガシーに対処し、(おそらく)不正行為を行うことを組み合わせたものです。


Stewart Smithは、ニュージーランドのクライストチャーチで1月21〜25日に開催されるlinux.conf.auでより高速な起動を紹介します。


Linux
  1. Linux – Vboxサービスを無効にして起動時間を短縮しますか?

  2. Linux 時間コマンドの例

  3. Linux の起動プロセス

  1. Linux での timedatectl コマンドの例

  2. ブート時に組み込み Linux カーネルモジュールに値を渡す方法は?

  3. VHD から Linux を起動できますか?

  1. Linux での uptime コマンドの例

  2. Linux プロセスの状態

  3. Linux で 100MB の ext2 ブート パーティションが推奨されるのはなぜですか?