プロセスにCPUを割り当てる方法

プロセスにCPUを割り当てる方法

私は解決策を見つけようとしましたが、私が見つけたのは、ワークセットまたはsched_setaffinityを使用してプロセスをCPUに固定する方法だけでした。しかし、これはプロセスにCPUへの排他アクセスを与えないようです。つまり、スケジューラはそのCPUに別のプロセスを割り当てることができます。 CPUがプロセス専用かどうかを確認する方法やコマンドはありますか?ワークセットを使用すると、特定のプロセスが特定のCPUでのみ実行されるようにすることができますが、その逆も実行することを望みます。つまり、CPU がプロセスにバインドされています。同様の質問が見つかりました特定のCPUパフォーマンスをプロセスに割り当てる方法は?そしてLinuxで1つのCPUコアのみを使用するようにプロセスを制限する方法は?しかし、重複としてマークされています。Linuxでプロセスのプロセッサアフィニティを設定するには?これは私が望むものではありません。

答え1

フルスケジューリングからCPUを除外する必要があり、次の手順でCPUにプロセスを割り当てることができます。

taskset

あなたがすでに見つけたように。 CPUを除外するには、起動パラメータを追加してください。

isolcpus=N

数字(N)は0から始まります。

答え2

systemdを実行しているシステムでは、systemd構成で構成することもできます。システムに4つのコアがあると仮定すると、

[Manager]
CPUAffinity=0-2

/etc/systemd/system.confsystemd(PID 1)が最初の3つのCPUで実行されるようにします。デフォルトでは、systemdによって直接または間接的に開始されたプロセス(すべてのプロセスに対応)はこの設定を継承するため、4番目のCPU(3回)は使用されません。ただ追加してください

[Service]
CPUAffinity=3

4番目のコアで実行するサービスの単位ファイルに追加します。このアプローチの1つの利点は、LimitMEMLOCK同じ場所で異なるリアルタイム関連設定を調整できることです。LimitRTPRIO複数のツールを使用する必要はありません。

注:最初の変更を適用するには、systemdに対してシステムを再起動する必要があります。サービス構成のみを変更した場合は、影響を受けるサービスを再起動するだけで十分です。

systemctl daemon-reload
systemctl restart my-service.service

関連情報