Qbilinux 日記

Linux に関係することだけではなく,最近は一般的なコンピュータやガジェット関係についても記載してます.

ninja build で thread 数 (job 数) を制限する方法

qbilinux (a.k.a Plamo nora) でパッケージ作成をぼちぼちと.

ラズパイでパッケージビルドに失敗しているのを何とか出来ないかなぁと.よく見るとビルドに失敗してるのは軒並み ninja を使ってる物みたい.

ninja が thread を大量に立ち上げてメモリが足りなくなって落ちてるらしい.ラズパイはメモリが少ないからね.

ということで,ninja の立ち上げる thread 数 (job 数) を立ち上げるのを何とか制限できないかなぁと.デフォルトでは CPU 数 + 2 立ち上がるのかな?

マニュアルを見ると,-j オプションでジョブ数を指定するとか,-l オプションでロードアベレージで制限するとか方法はあるみたい.

けど,これだと linuxディストリビューション向けにパッケージ作成するときには使いにくい.

環境変数で設定できる方が良いんだけど...と思って,本家のドキュメントを探してみたけど,そういうオプションはないみたい.

うーむ.

ふと,lfs のとこをみたらパッチがありましたね.http://www.linuxfromscratch.org/patches/downloads/ninja/ninja-1.8.2-add_NINJAJOBS_var-1.patch かな.

中を見ると判りますが,環境変数 NINJAJOBS で設定すれば制限がかかるみたい.

ってことで,このパッチを当てて ninja をビルド.

上手く動作してくれてるみたい.良かった良かった.

ラズパイじゃなくて,x86/x86_64 環境の場合でも 64bit 環境ではメモリは積んでるだけ使ってくれるけど,32bit 環境だとメモリが 3G しか確保できません.なので,32bit 環境でパッケージ作成する場合にはスワップアウトして結構時間がかかってたものもあったんだけど,それもうまく環境変数で制御することで解消した感じ.

どうして本家でこういう仕様にしてないのかな?何か理由があるのかな?