6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#NervesJPAdvent Calendar 2024

Day 7

Nerves system, Buildroot のビルドを早くする tips

Last updated at Posted at 2024-12-06

どのくらい早くなるか

私は 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_JLEVELmake -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 の記事

以上です!

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?