Linuxで1つのCPUコアのみを使用するようにプロセスを制限する方法は? [コピー]

Linuxで1つのCPUコアのみを使用するようにプロセスを制限する方法は? [コピー]

プロセスを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

おすすめ記事