デュアルコアCPUを使用するときに人々が-j3オプションを推奨するのはなぜですか?

デュアルコアCPUを使用するときに人々が-j3オプションを推奨するのはなぜですか?

Gentoo Linuxでは、パッケージをビルドするときに並列に実行する必要があるタスクの数を示すMAKEOPTS変数を設定できます。私はデュアルコアCPUを持っているので、素直にこのオプションを使用することを選択しました。つまり、コアごとに1つのタスクなので、どちらも行うことがあります。 「問題」は、デュアルコアCPUを使用しているユーザーに、このオプションを代わりに設定するように言及していることです。そのうちのいくつかは次のとおりです。/etc/portage/make.confmake-j2-j3

たとえば、Gentooのマニュアルには次のようなものがあります。

良い選択は、システムのCPU(またはCPUコア)の数に1を加えることですが、このガイドラインは必ずしも完璧ではありません。

しかし、「CPU + 1」ルールの根拠は何ですか?なぜ追加の作業をする必要がありますか?

make.conf(5) のマニュアルページには次の内容も記載されています。

推奨設定はCPU + 1と2 * CPU + 1の間です。

makeまた、情報ページでセクション5.4(並列実行)とmakeこのオプションのマニュアルページの説明を読ん-jだが答えがないようです。

ベストアンサー1

常に機能する単純なルールはありません。人々は特定のコンピュータで特定の編集を試みたが、それが最適な設定であったか、または現実に関連しているかもしれないかもしれないいくつかの推論に従ったので、特定の番号を推薦することができます。

RAMが多い場合、長いコンパイルの制限要因はCPU時間です。その後、CPUごとに1つのジョブと時々I / Oブロックの保留ジョブを追加するのが良い設定です。これは-j3デュアルコアCPU(またはより正確にはデュアルCPUシステムに適しています。各コアがハイパースレッディングされている場合は4つのCPUがあるため-j5)に適しています。

RAMが非常に小さい場合、1つの制限要因は、多数の同時タスクを有することができないか、またはタスクが連続的に互いに交換されることであり得る。たとえば、2つのコンパイラインスタンスをメモリに簡単に合わせることができない場合は、すでにmake -j22つ以上のmakeコンパイラインスタンスがある可能性があります。これはRAMに同時に入ることができるコンパイラプロセスの数によって異なります。したがって、一般的な数字はありません。と。

その間に、より多くの仕事を持つことが役に立つかもしれません。各コンパイラプロセスは小さいですが、ビルド全体に大量のデータが含まれる場合、ディスクI / Oがブロック要因になる可能性があります。この場合、同時に実行されるCPUごとに複数のジョブが必要になるため、常に各CPUを使用する1つのジョブがあり、他のジョブはI / Oを待っています。繰り返しますが、これはビルド操作と利用可能なRAMによって大きく異なります。ここでは、データキャッシュに使用可能な項目によって異なります(作業が多すぎるとキャッシュを汚染しすぎる最適な値があります)。

おすすめ記事