![Linuxで1つのCPUコアのみを使用するようにプロセスを制限する方法は? [コピー]](https://linux33.com/image/18697/Linux%E3%81%A71%E3%81%A4%E3%81%AECPU%E3%82%B3%E3%82%A2%E3%81%AE%E3%81%BF%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%82%92%E5%88%B6%E9%99%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
プロセスを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
答え2
コマンドラインからCPUセットを構築することもできます。man cpuset
後でプロセスを割り当て(実行)できます。