Linux: como saber quais processos estão fixados em qual núcleo?

2

Existe uma maneira de saber quais núcleos têm atualmente um processo marcado para eles?

Mesmo os processos executados por outros usuários devem ser listados na saída.

Ou é possível tentar fixar um processo em um núcleo, mas falhar no caso de o núcleo requerido já ter um processo preso a ele?

PS: os processos de interesse devem ter o bin marcado nos núcleos especificados, não apenas atualmente em execução no núcleo fornecido

PS: isso não é uma duplicata, a outra pergunta é sobre como garantir o uso exclusivo de uma CPU por um processo. Aqui estamos perguntando como detectar que um processo foi fixado em um determinado núcleo (ou seja, o cpuset foi usado, não como usá-lo).

    
por daruma 19.02.2018 / 03:59

2 respostas

4

Em circunstâncias normais, os processos do Linux não são explicitamente fixados em um determinado núcleo, simplesmente não há razão para isso.

Você pode gerenciar a afinidade de processo usando o conjunto de tarefas ou ver qual processo é executado em qual CPU no presente instante usando ps com o campo 'psr'.

Verifique a atual afinidade da CPU do processo 27395:

$ ps -o psr 27395
PSR
  6

Verifique a lista de afinidades do processo 27395:

$ taskset -pc 27395
pid 27395's current affinity list: 0-7

Defina a afinidade do processo 27395 para a CPU 3

$ taskset -pc 3 27395
pid 27395's current affinity list: 0-7
pid 27395's new affinity list: 3

Verifique a atual afinidade da CPU do processo 27395:

$ ps -o psr 27395
PSR
  3

Para verificar se algum processo está fixado em qualquer CPU, você pode percorrer seus identificadores de processo e executar o taskset -p contra eles:

$ for pid in $(ps -a -o pid=); do taskset -pc $pid 2>/dev/null; done
pid 1803's current affinity list: 0-7
pid 1812's current affinity list: 0-7
pid 1986's current affinity list: 0-7
pid 2027's current affinity list: 0-7
pid 2075's current affinity list: 0-7
pid 2083's current affinity list: 0-7
pid 2122's current affinity list: 0-7
pid 2180's current affinity list: 0-7
pid 2269's current affinity list: 0-7
pid 2289's current affinity list: 0-7
pid 2291's current affinity list: 0-7
pid 2295's current affinity list: 0-7
pid 2300's current affinity list: 0-7
pid 2302's current affinity list: 0-7
pid 3872's current affinity list: 0-7
pid 4339's current affinity list: 0-7
pid 7301's current affinity list: 0-7
pid 7302's current affinity list: 0-7
pid 7309's current affinity list: 0-7
pid 13972's current affinity list: 0-7
    
por 19.02.2018 / 09:23
0

Primeiro abra o terminal e faça cat /proc/cpuinfo para listar todos os núcleos. Núcleo 0 = 1º núcleo, Núcleo 1 = 2º núcleo ...

Então

CORENUM=0
ps -e -o pid,psr,cpu,cmd | grep -E  "^[[:space:]][[:digit:]]+[[:space:]]+${CORENUM}"

para ver o que tem o núcleo 1 (substitua 0 em CORENUM= pelo número do núcleo desejado) atribuído a ele.

    
por 19.02.2018 / 04:44