Como posso definir a afinidade do processador de um processo no Linux?

29

Como posso definir a afinidade do processador de um processo no Linux?

chillitom
fonte

Respostas:

24

Eu usei o conjunto de tarefas para isso. Se você possui o conjunto de tarefas instalado, algo como:

taskset -c 1,3 -p 45678

definiria o processo com o ID 45678 para ter uma afinidade com o cpus 1 e 3.

kbyrd
fonte
1
Uma edição anônima sugeriu que o comando deve ser taskset -p -c 1,3 45678e não taskset -c 1,3 -p 45678; isto é, que -c 1,3é uma especificação de máscara e, como tal, deve ser colocada entre o -pe o pid.
G-Man diz 'Reinstate Monica'
7

Dentro do processo, a chamada seria sched_setaffinity(), ou para coisas de pthreads,pthread_setaffinity_np()

Em uma nota relacionada, se você estiver preocupado com a afinidade da CPU do seu programa, pode valer a pena prestar atenção em como ele está fazendo a alocação de memória também. Sistemas maiores com memória conectada a mais de um controlador (ou seja, vários soquetes de CPU, cada um com o seu) terão latência e largura de banda variáveis ​​entre diferentes pares de CPU / memória. Você também deve procurar a afinidade do NUMA, usando o numactlcomando ou as chamadas de sistema com as quais trabalha. Um programa em que trabalhei obteve uma melhoria de desempenho de 10% com isso.

Phil Miller
fonte
3

Você precisa instalar schedutils(utilitários do planejador Linux). Eu uso-o no meu Ubuntu Desktop.

Link SF

Hemant
fonte