プロセスを1つのCPUコアに制限する方法は?
ulimit
またはcpulimit
良いようなもの。 (確認するには:使用率や実行時間を制限したくありません。アプリケーション(およびすべてのサブプロセス(スレッド))に1つのCPUコア(または「n」個のCPUコア)を使用するように強制したいと思います。))。
ベストアンサー1
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
。これは、プロセスがCPU 0で実行されるようにする単純なラッパーです。
#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV