この質問にはすでに回答があります :Linuxでプロセスのプロセッサ親和性を設定するにはどうすればよいですか?
(4つの回答)
3年前に閉鎖されました。
Linux
(4つの回答)
3年前に閉鎖されました。
プロセスを1つのCPUコアに制限する方法は?
ulimit
に似たもの またはcpulimit
いいだろう。 (念のため:使用率や実行時間を制限したくない。アプリ(すべての子、プロセス(スレッド)を含む)に1つのCPUコア(または「n」CPUコア)を使用させるようにしたい)
承認された回答:
Linuxでは、sched_setaffinity
を実行します システムコール。プロセスのアフィニティは、プロセスを実行できるプロセッサのセットです。標準のシェルラッパーがあります:taskset
。たとえば、プロセスをCPU#0に固定するには(特定のCPUを選択する必要があります):
taskset -c 0 mycommand --option # start a command with the given affinity
taskset -c -pa 0 1234 # set the affinity of a running process
両方のPerl用のサードパーティモジュールがあります(Sys::CpuAffinity
)およびPython(affinity
)プロセスのアフィニティを設定します。これらは両方ともLinuxとWindowsの両方で機能します(Windowsには、Sys::CpuAffinity
を備えた他のサードパーティモジュールが必要な場合があります ); Sys::CpuAffinity
他のいくつかのUNIXバリアントでも機能します。
プロセスの誕生時からのアフィニティを設定する場合は、execve
を呼び出す直前に現在のプロセスのアフィニティを設定します。 。これは、プロセスをCPU0で強制的に実行する簡単なラッパーです。
#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV