Você pode usar taskset
para distribuir manualmente os processos pelos núcleos, definindo suas afinidades de encadeamento. Para descobrir quais segmentos pertencem a quais núcleos e processadores, verifique /proc/cpuinfo
como mostrado abaixo:
$ grep -E '^processor|^physical id|^core id' /proc/cpuinfo |sed 's/^processor/\nprocessor/'
processor : 0
physical id : 0
core id : 0
processor : 1
physical id : 0
core id : 1
processor : 2
physical id : 0
core id : 0
processor : 3
physical id : 0
core id : 1
$ _
processor
é o número do encadeamento, physical id
é o número da CPU física e core id
é o número do núcleo. A saída acima vem de uma máquina com uma única CPU com dois núcleos e quatro threads.
taskset
pode ser usado como taskset --all-tasks -p <hex_mask> <pid>
para modificar a afinidade de todos os encadeamentos de um processo existente. O hex_mask
é uma máscara de bits, em que cada 1 bit representa um encadeamento da CPU atribuído e a numeração começa a partir da direita. Por exemplo, 0xa
para a máscara significa binário 0b1010
que indica uma afinidade do encadeamento # 1 e encadeamento # 3 para o processo. O PID, espero, é autoexplicativo.