web-dev-qa-db-ja.com

Debianはどのように多くのCPUコアを利用していますか?

24コアVPSでアカウントを取得しました(UnixBenchによると24個のCPUがあります)。

  1. 一般的に、Debianの汎用シェルコンピューティングにこれらすべてのコアをうまく​​利用するにはどうすればよいですか?
  2. シェルから長時間実行されるアプリを発行するときに、各プロセスが利用可能な場合は別々のコアで実行するために、何か特別なものを入力する必要がありますか?それとも、Debianは私には見えない、そのすべてを処理するだけですか?
3
themirror

特別なことをする必要はありません。どのスレッドをどのCPUで実行するかを決定するのはカーネルの仕事であり、人間よりもはるかに優れた仕事をします。

ただし、実行する同時スレッドが24個以上ない場合は、CPUを24個持つ意味はありません。より多くのCPUが利用可能である場合、プログラムは魔法のように速くなりません。複数の並列スレッドを持つようにコーディングされたプログラムのみが恩恵を受け、多くのプログラムは、劣った方法で書かれているためではなく、その機能が本質的に並列化できません。

N個の同時計算スレッドを持つプログラムは最大N個のCPUの恩恵を受けます(ただし、スレッド間の同期には時間がかかるため、N倍速くならない場合があります)。同様にM個のCPUを利用する場合(またはプログラムがマルチスレッドの場合はそれ以上)、あまり相互作用しないM個の異なるプログラムを実行します。

並列処理を利用するために手動による介入が必要な場合がいくつかあります。複数のデータ処理タスクを開始する場合は、それらが次々に生成されるのではなく、並行して(CPUごとに1つをわずかに超えるタスクで)生成されるように注意してください。たとえば、ソフトウェアをビルドするときは、-jオプションをmakeに渡します。他のいくつかの例と説明を参照してください。

Webサーバーを実行している場合、高負荷用に設計されたすべてのWebサーバーは、並列処理をうまく活用できます。 Linuxカーネルでの最適化のパフォーマンスを評価するときのテストケースとしてApacheが使用されます。ただし、CPUの並列処理は、データベースアクセスや入出力帯域幅による競合など、他のボトルネックがない場合にのみ役立つことに注意してください。