Como limitar um processo a um núcleo de CPU no Linux? [duplicado]

63

Como limitar o processo a um núcleo de CPU?

Algo semelhante a ulimit ou cpulimit seria bom. (Apenas para garantir: NÃO quero limitar o percentual de uso ou o tempo de execução. Eu quero forçar o aplicativo (com todos os seus filhos, processos (threads)) a usar um núcleo de CPU (ou 'n' cpu core)). / p>     

por Grzegorz Wierzowiecki 22.10.2011 / 20:52

2 respostas

69

No Linux, execute a sched_setaffinity chamada do sistema. A afinidade de um processo é o conjunto de processadores nos quais ele pode ser executado. Há um wrapper de shell padrão: taskset . Por exemplo, para fixar um processo à CPU nº 0 (você precisa escolher uma CPU específica):

taskset -c 0 mycommand --option  # start a command with the given affinity
taskset -c -p 0 1234             # set the affinity of a running process

Existem módulos de terceiros para o Perl ( Sys::CpuAffinity ) e o Python ( affinity ) para definir a afinidade de um processo. Ambos funcionam no Linux e no Windows (o Windows pode exigir outros módulos de terceiros com Sys::CpuAffinity ); Sys::CpuAffinity também funciona em várias outras variantes unix.

Se você quiser definir a afinidade de um processo a partir do momento de seu nascimento, defina a afinidade do processo atual imediatamente antes de chamar execve . Aqui está um wrapper trivial que força um processo a ser executado na CPU 0.

#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV
    
por 22.10.2011 / 21:35
6

Você também pode criar conjuntos de cpu na linha de comando. %código% Mais tarde, você pode atribuir processos (em execução) a estes.

    
por 22.10.2011 / 23:18