パスワードを忘れた? アカウント作成

リーナス・トーバルズ氏、メインマシンを新調。CPUはAMD Threadripper 3970X」記事へのコメント

  • by Anonymous Coward

    ビルドプロセスのボトルネックはプロセッサかメモリかストレージか

    • by annoymouse coward (11178) on 2020年05月27日 15時52分 (#3822657) 日記

      私の場合はストレージでした

      一般論として,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 オプションてのは効きませんか?

      • by Anonymous Coward

        QEMUとかFFMPEGとかJavaScript製PCエミュレータとかTCCとか作ってるヤベー人が作った
        TCCBOOT https://bellard.org/tcc/tccboot.html [bellard.org] とかだと
        ブートローダとしてその場でカーネルをビルドしているのに、
        Pen4でもたった15秒でビルドが終わるそうな。

        最適化が弱いから速度面の検証とかは期待できないけど、
        未だにビルド速度で悩むようなら機能面での検証はTCCBOOTみたいなので済ますほうが生産性良かったりして。

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

処理中...