Como posso mover um processo para um núcleo ou dedicar um processo a um processador?

5

Eu tenho um processador Intel E5620. Eu usei cat /proc/[pid]/stat para determinar em qual processador o processo foi executado pela última vez (39º campo). Como posso garantir que um processo é dedicado a um processador (tenho 8 disponíveis) ou, melhor ainda, como dedicar um processo a um núcleo (tenho 4)?

    
por Brian 06.10.2011 / 19:45

5 respostas

6

Baseado no seu comentário sobre a resposta de MikeyB, você está tentando resolver isso da maneira errada IMHO -

Tanto numactl quanto taskset bloquearão seu processo para uma CPU, mas não manterão outros processos fora dessa CPU.
Se alguém estiver nessa CPU quando seu processo precisar, você terá que esperar.

Uma solução melhor é definir o valor nice do seu processo para algo que faça com que ele capture agressivamente a CPU (algo como -20) e, se ainda não for suficiente, defina o processo como realtime priority usando o rtprio , e deixe o agendador fazer o que ele tem que fazer para garantir que o seu processo tenha sempre CPU ciclos quando ele pede para eles.

Tentar enganar o agendador é, como MikeyB apontou, geralmente uma Idéia Ruim. Deixe-o fazer o que foi projetado para fazer e solicite os ciclos de CPU da maneira CERTA ( nice values e rtprio ).

    
por 06.10.2011 / 20:10
4

numactl permite vincular um processo a uma CPU principal ou física, além de forçar uma política de alocação de memória.

Normalmente, isso não é necessário. Pare de tentar enganar o agendador.

    
por 06.10.2011 / 19:54
3

Se você o tiver instalado, poderá usar o comando taskset , por exemplo

taskset -c 2 -p 2345 

para executar o processo 2345 na cpu 2

    
por 06.10.2011 / 19:51
0

leia man taskset - tem tudo o que você precisa

    
por 06.10.2011 / 19:50
0

Para ligar um processo PID 12345 ao primeiro processador, tente isto:

# taskset -p 0x00000001 12345
    
por 06.10.2011 / 19:54