Determinando o processador específico no qual um processo está sendo executado

7

Eu tenho acesso a um nó de 8 núcleos de um cluster Linux. Quando logado no nó, posso ver uma lista de processadores usando este comando:

more /proc/cpuinfo

No meu nó de 8 núcleos, os processadores são numerados de 0 a 7. Cada processador é um processador Intel Xeon (E5430 @ 2.66GHz).

Agora, suponha que eu chame o programa foo com alguns argumentos args :

foo args

O programa foo leva muito tempo para ser executado (horas ou dias, por exemplo). Tendo chamado foo , é possível determinar o processador particular (ou seja, 0 a 7) no qual foo está sendo executado? O programa top mostra o ID do processo e informações semelhantes, mas não vejo o processador número . Essa informação está disponível?

    
por Andrew 15.06.2013 / 18:22

4 respostas

8

ps pode fornecer essa informação se você solicitar a coluna psr (ou usar o sinal -F que a inclui).

Ex:

$ ps -F $$
UID        PID  PPID  C    SZ   RSS PSR STIME TTY      STAT   TIME CMD
me        6415  6413  0  5210  2624   2 18:52 pts/0    SN     0:00 -su

Ou:

$ ps -o pid,psr,comm -p $$
  PID PSR COMMAND
 6415   0 bash

Meu shell estava rodando na CPU 2 quando eu executei o primeiro comando, na CPU 0 quando eu corri o segundo. Esteja ciente de que processos podem mudar CPUs muito rapidamente, então as informações que você vê são essencialmente obsoletas.

Mais algumas informações nas respostas desta pergunta de superusuário:

Linux: comando saber o número do processador em que um processo é carregado?

    
por 15.06.2013 / 18:56
4

Com o top de procps (geralmente o padrão nas distribuições Linux atualmente), em top , pressione f , navegue até P = Last User CPU (SMP) e pressione Espaço para selecionar (você também pode mover o campo, por exemplo, antes do campo COMMAND com a tecla Direita e, em seguida, mover para cima e para baixo). q para retornar à tela principal (onde você verá o processo se mover de processador para processador, a menos que você o tenha explicitamente configurado para ficar com um). Você pode pressionar W para salvá-lo como padrão.

Pressione ? para ajuda.

    
por 15.06.2013 / 20:00
4

O comando taskset é o que você está procurando:

taskset - recupera ou define a afinidade da CPU de um processo

Exemplo

$ taskset -p 12345
pid 12345's current affinity mask: f

Uma máscara de f significa todos os processadores, 0x00000001 seria apenas processador 0.

$ taskset -c -p 24389 
pid 24389's current affinity list: 0-3

Mostra a cpu em formato de lista. Eu tenho 4 núcleos no meu laptop neste exemplo.

Veja a página de manual com mais detalhes .

    
por 15.06.2013 / 19:55
1

Você também pode obter essas informações diretamente de /proc/[pid]/stat . É o 39º campo delimitado por espaço (desde o Linux 2.2.8).

Por exemplo para mostrar em qual processador da CPU o shell atual está rodando (nesta instância):

cat  /proc/$$/stat | cut -d' ' -f39
    
por 16.12.2016 / 13:48