アカウント名:
パスワード:
ビルドプロセスのボトルネックはプロセッサかメモリかストレージか
私の場合はストレージでした
一般論として,LinuxのカーネルソースはC言語でシンプルに書かれているので,コンパイラはメモリをあまり必要としません.またコードの大半は,デバイスドライバ(Linux用語でいうモジュール)なのでソースコード間の依存関係が少ないです.そのためコア数が多いCPUでは,容易に並列ビルドできます.
しかしカーネルコードは比較的小さいファイルが多いため,ビルドすると小さい中間ファイルがたくさんできます結果,I/O,ファイルシステムやその背後にあるストレージがボトルネックになります.
私の環境(intelで16コア.メモリは32GB)でも,perf コマンドで分析したら,ストレージがボトルネックになっていました.HDDは当然ですが,安物のSSDでもボトルネックになります.
あとC++ & boost で書いている別ソースコードだと,メモリ消費量が激しく,1コアあたり1.5GBぐらいは必要になります.
ということで,私が調べた感じではC/C++での開発用PCだと,S-ATA接続のSSDや,コア数*2GB以下のメモリを使っていると,それがボトルネックになりCPUの稼働率が低下します.
あとファイルシステムはベンチマークしたら判りますが,なぜか ext4 が最速になります.別ファイルシステム,例えばF2FSはファイルシステムレベルでボトルネック解消を目指してるはずですが,C/C++のビルドではext4の方が早いです.もしかしたら F2FSは ext4 ほどにはチューニングできてないのかも知れません.あまり詳しくみてないですが,ベンチマーク上は ext4が最速です.
ということで,現時点で開発用のPCを組むなら- メモリはコア数*2GB以上- ストレージは NVMe- ファイルシステムは ext4が良いと私は考えています.
# あと,Spectra / Meltdown 対策をoffにするともっと早くなります.
tmpfs 上でコンパイル && gcc に -pipe オプションてのは効きませんか?
QEMUとかFFMPEGとかJavaScript製PCエミュレータとかTCCとか作ってるヤベー人が作ったTCCBOOT https://bellard.org/tcc/tccboot.html [bellard.org] とかだとブートローダとしてその場でカーネルをビルドしているのに、Pen4でもたった15秒でビルドが終わるそうな。
最適化が弱いから速度面の検証とかは期待できないけど、未だにビルド速度で悩むようなら機能面での検証はTCCBOOTみたいなので済ますほうが生産性良かったりして。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家
ボトルネックは? (スコア:0)
ビルドプロセスのボトルネックはプロセッサかメモリかストレージか
Re:ボトルネックは? (スコア:5, 参考になる)
私の場合はストレージでした
一般論として,LinuxのカーネルソースはC言語でシンプルに書かれているので,コンパイラはメモリをあまり必要としません.
またコードの大半は,デバイスドライバ(Linux用語でいうモジュール)なのでソースコード間の依存関係が少ないです.
そのためコア数が多いCPUでは,容易に並列ビルドできます.
しかしカーネルコードは比較的小さいファイルが多いため,ビルドすると小さい中間ファイルがたくさんできます
結果,I/O,ファイルシステムやその背後にあるストレージがボトルネックになります.
私の環境(intelで16コア.メモリは32GB)でも,perf コマンドで分析したら,ストレージがボトルネックになっていました.
HDDは当然ですが,安物のSSDでもボトルネックになります.
あとC++ & boost で書いている別ソースコードだと,メモリ消費量が激しく,1コアあたり1.5GBぐらいは必要になります.
ということで,私が調べた感じでは
C/C++での開発用PCだと,S-ATA接続のSSDや,コア数*2GB以下のメモリを使っていると,それがボトルネックになりCPUの稼働率が低下します.
あとファイルシステムはベンチマークしたら判りますが,なぜか ext4 が最速になります.
別ファイルシステム,例えばF2FSはファイルシステムレベルでボトルネック解消を目指してるはずですが,C/C++のビルドではext4の方が早いです.
もしかしたら F2FSは ext4 ほどにはチューニングできてないのかも知れません.あまり詳しくみてないですが,ベンチマーク上は ext4が最速です.
ということで,現時点で開発用のPCを組むなら
- メモリはコア数*2GB以上
- ストレージは NVMe
- ファイルシステムは ext4
が良いと私は考えています.
# あと,Spectra / Meltdown 対策をoffにするともっと早くなります.
Re:ボトルネックは? (スコア:1)
tmpfs 上でコンパイル && gcc に -pipe オプションてのは効きませんか?
Re: (スコア:0)
QEMUとかFFMPEGとかJavaScript製PCエミュレータとかTCCとか作ってるヤベー人が作った
TCCBOOT https://bellard.org/tcc/tccboot.html [bellard.org] とかだと
ブートローダとしてその場でカーネルをビルドしているのに、
Pen4でもたった15秒でビルドが終わるそうな。
最適化が弱いから速度面の検証とかは期待できないけど、
未だにビルド速度で悩むようなら機能面での検証はTCCBOOTみたいなので済ますほうが生産性良かったりして。