Como posso definir a afinidade do processador de um processo no Linux?
29
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.
taskset -p -c 1,3 45678
e nãotaskset -c 1,3 -p 45678
; isto é, que-c 1,3
é uma especificação de máscara e, como tal, deve ser colocada entre o-p
e opid
.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
numactl
comando ou as chamadas de sistema com as quais trabalha. Um programa em que trabalhei obteve uma melhoria de desempenho de 10% com isso.fonte
Você precisa instalar
schedutils
(utilitários do planejador Linux). Eu uso-o no meu Ubuntu Desktop.Link SF
fonte
inicia o
a.out
processo com argumentos fornecidos e afinidade definidos para os processadores 1, 2 ou 3 (com base em zero).Aqui está um programa de teste C mínimo que pode ser usado para vê-lo em ação: https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from -c / 50117787 # 50117787
fonte