私は8GB RAMのコアi5を持っています。マシンにVMwareワークステーション10.0.1がインストールされています。ゲストOSとしてFedora 20 Desktop EditionをVMwareにインストールしています。
Linuxカーネルのソースコードv 3.14.1に取り組んでいます。 Linuxカーネル用のI/Oスケジューラを開発しています。毎回コードを変更した後、変更を確認するためにカーネルコード全体をコンパイルしてインストールするのに約1時間30分かかります。
コンパイルおよびインストールコマンド:make menuconfig
、make
、make modules
、make modules_install
、make install
だから私の質問は、1時間30分を10〜15分に短縮することは可能ですか
ソースに加えたすべての変更に対してmake menuconfig
を実行しないでください。変更がどれほど些細なものであっても、すべての完全なコンパイルがトリガーされます。これは、カーネルの構成オプションが変更された場合にのみ必要であり、開発中に発生する可能性があります。
ただやる:
make
または、並列コンパイルを好む場合:
make -j4
または好きな数の同時タスク.
もちろん、最近ビルドされたバイナリをデプロイするには、make install
などが必要になる場合があります。
別のトリックは、テストに必要な最小限にカーネルを構成することです。多くのタスクでは、UMLコンパイル(ユーザーモードLinux)が最速であることがわかりました。また、make localmodconfig
ではなく、make menuconfig
が便利な場合もあります。
make
並列ビルドと-j
オプションを使用つまり、たとえば実行する代わりに:
make
実行:
make Arch=<your architecture> -jN
ここで、N
はマシン上のコアの数です(cat /proc/cpuinfo
はコアの数を示します)。たとえば、i386
ターゲットおよび4 cores
(cat /proc/cpuinfo
の出力)を備えたホストマシンの場合:
make Arch=i386 -j4
同様に、modules_install
フラグを使用して、他のmakeターゲット(modules
、-jN
、install
)を実行できます。
注:make
は、変更されたファイルのチェックを行い、変更されたファイルのみをコンパイルするため、最初のビルドのみに時間がかかり、その後のビルドはより高速になります。
変更するたびにmake menuconfig
を再度実行する必要はありません。カーネル.config
ファイルを作成するために1回だけ必要です。 (あるいは、Kconfig
ファイルを編集して構成オプションを追加または変更した場合、おそらくこれは頻繁には発生しないはずです。)
.config
をそのままにしておく限り、make
を実行しても、変更したファイルのみが再コンパイルされます。毎回コンパイルする必要のあるファイルがいくつかありますが、大部分はそうではありません。
make -j
は、使用可能なすべてのCPUを使用します。
ccache はコンパイル時間を劇的にスピードアップできるはずです。これは、以前のコンパイルをキャッシュし、同じコンパイルが再度行われるタイミングを検出することにより、再コンパイルを高速化します。 ccacheを使用した最初のコンパイルは、キャッシュにデータを追加する必要があるため遅くなりますが、その後のビルドははるかに高速になります。
Ccacheの設定に煩わされたくない場合は、次のように実行してカーネルをコンパイルします。
ccache make
十分なRAMがあり、カーネルの構築中にマシンを使用しない場合、uは多数の同時ジョブを生成する可能性があります。しかし、RAM =それ以外の場合、システムはハングしてクラッシュします。
おそらく、前の提案に加えて、ccacheを使用しているときに、CONFIG_GCC_PLUGINS
(設定されている場合)そうしないと、 this の例にあるように、多くのキャッシュミスが発生する可能性があります。
おそらく前の提案に加えて、ccacheソフトウェア( https://ccache.samba.org/ )とSSDドライブのコンパイルディレクトリを使用すると、コンパイル時間が大幅に短縮されます。