2 つのプロセスが大規模な計算を実行しています。1 つのプロセスにプロセッサ時間の約 100% を割り当てたいのですが、どうすればよいでしょうか。

2 つのプロセスが大規模な計算を実行しています。1 つのプロセスにプロセッサ時間の約 100% を割り当てたいのですが、どうすればよいでしょうか。

私は 2 つのプロセスで Ubuntu 基本サーバーを実行しています: - プロセス 1 - 稼働時間の 100% で計算を実行し、コミュニティに計算能力を共有するために使用します (優先度 19 で実行されています) - プロセス 2 - 時々 5 ~ 10 分間計算を実行し、自分の計算に使用します (優先度 -19 で実行されています)

プロセス 2 に 100% の計算能力を与える必要があります (その時点でプロセス 1 の CPU 使用率は 0% に近づくはずです)。

nice / renice を使用しようとしたところ、プロセス 1 には prio 19 (最低) が与えられ、プロセス 2 には prio -19 (最高) が与えられました。しかし、私が得た最高の結果は、プロセス 1 に 50% の CPU が、プロセス 2 に 50% の CPU が与えられました (htop で確認)。これはちょっと驚きました...

どちらのプロセスもマルチスレッド化されており、単独で実行されている場合は CPU のすべてのコアを 100% 消費します。他のリソース (I/O、メモリ、帯域幅など) がこの使用量に影響を与えることはありません。

計算能力が必要なときに、プロセスを手動で停止/開始したくありません (両方のプロセスが常に実行されている必要があります)。プロセス 2 に 100% の CPU が自動的に割り当てられる必要があります。

目標を達成するには何をすべきでしょうか? ありがとうございます。

答え1

@ubfan1 のおかげで、さまざまなスケジュール戦略を検討してきましたが、これまでに達成した最高の結果は次のとおりです。

  • プロセス1はSCHED_BATCHポリシーで実行されています

  • プロセス2はSCHED_RRポリシーで実行されています

結果: 両方のプロセスが同時に実行されている場合: - プロセス 1 には CPU の約 5% が割り当てられます - プロセス 2 には CPU の約 95% が割り当てられます

プロセス1のみが計算を実行している場合(プロセス2は計算を開始するために入力を待機しています) - プロセス1はCPUを100%使用しています

もっと興味がある人は、これを読んでください:

  1. http://manpages.ubuntu.com/manpages/xenial/man8/schedtool.8.html
  2. 詳しくは、man7.org/linux/man-pages/man7/sched.7.html を参照してください。

関連情報