No Linux, como faço para verificar a afinidade da CPU de um processo e seus threads?

7

No Linux, como faço para verificar a afinidade da CPU de um processo e seus threads?

    
por JamesThomasMoon1979 03.01.2013 / 00:10

1 resposta

10

É bem simples. Reúna o id do processo e os ids dos threads e, em seguida, chame taskset .

pname="java"  # for example
for pid in $(pgrep "${pname}")
do 
    [ "${pid}" != "" ] || exit
    echo "PID: ${pid}"
    for tid in \
      $(ps --no-headers -ww -p "${pid}" -L -olwp | sed 's/$/ /' | tr  -d '\n')
    do
    taskset -cp "${tid}"   # substitute thread id in place of a process id
    done
done

Saídas

PID: 15695
pid 15695's current affinity list: 0
pid 15696's current affinity list: 0
pid 15697's current affinity list: 0
...

A razão pela qual isso não é um simples one-liner é porque o comando pgrep não pode retornar ids de thread (apenas ids de processo). Nós fazemos um pequeno trabalho extra com o comando ps --no-headers -ww -p "${pid}" -L -olwp

Testado no Ubuntu 12, bash 4.

    
por 03.01.2013 / 00:10

Tags