どのくらい早くなるか
私は Nerves システムのビルドに AMD Ryzen 9 5950X 16-Core Processor のマシンを使っており、紹介する tips を使わないとフルビルドには 15 分程かかります。(ビルド内で走るダウンロードすべきソースが全て手元にダウンロード済みでも、それだけかかります。)
それが本設定で以下になります。
cchace 作成前❗
real 6m12.237s
user 92m27.004s
sys 19m55.984s
Yay!
cchace 作成後❗❗❗
real 2m58.663s
user 14m10.062s
sys 4m58.480s
Yay!Yay!Yay!
この結果をもたらす tips
BR2_CCACHE=y
BR2_CCACHE_DIR="$(NERVES_DEFCONFIG_DIR)/.nerves/buildroot-ccache"
BR2_CCACHE_INITIAL_SETUP="--max-size=0"
BR2_JLEVEL=0
BR2_PER_PACKAGE_DIRECTORIES=y
を nerves_defconfig に追加して、 make -j
でビルドしてみてください。
※時間計測をする場合は time make -j
注意点
この tips を利用してビルドをすると、メモリが足りなくなって OOM Killer にビルドプロセスが殺されるかもしれません。その場合は BR2_JLEVEL
と make -j args
を調整してやる(使用するコアを減らす)必要があります。
BR2_CCACHE* について
ヘルプには以下の記載があります。
This option will enable the use of ccache, a compiler cache. It will cache the result of previous builds to speed up future builds.
コンパイル時にキャッシュを作りそれを利用してビルドの高速化をはかる Ccache を利用するようになるようです。
Ccache is a compiler cache.
BR2_JLEVEL について
Number of jobs to run simultaneously. If 0, determine automatically according to number of CPUs on the host system.
ビルド時に用いるホストマシンの CPU コア数を設定できるようです。 0
指定時はいい感じ(全部使う)にしてくれるはずです。
BR2_PER_PACKAGE_DIRECTORIES について
最後の文に experimental feature
と記載があります。
This option will change the build process of Buildroot package to use per-package target and host directories.
This is useful for two related purposes:
- Cleanly isolate the build of each package, so that a given package only "sees" the dependencies it has explicitly expressed, and not other packages that may have by chance been built before.
- Enable top-level parallel build.
This is labeled as an experimental feature, as not all packages behave properly with per-package directories.
このオプションを
- 有効にしない場合、 Buildroot はパッケージをひとつずつビルドしていきます。
- 有効にする場合、 Buildroot はパッケージを並行にビルドしていきます。
なので、有効にすると早くなります。
この tips はどこから
Elixir slack の #nerves チャンネルで Abelino Romo が紹介してくださいました
が、これは Lawik さんが立ててくださったフォーラムのスレッド で Alex McLain さんが回答してくださっている内容です。
Abelino さんは Alex さんがファウンダーの redwire labs の会社で共に働いている方なので2人がいかに効率よく Nerves をビルドするかを調べており、その知見を共有してくださったということなのだと思います。
※ Alex さんはファウンダーですがゴリゴリのエンジニアです。
参考
Lawik さんが立ててくださったフォーラムのスレッド
Alex さんの会社 redwire labs の記事
以上です!