ti-enxame.com

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

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

31
chillitom

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

taskset -c 0,2 -p 45678

configuraria o processo com id 45678 para ter uma afinidade com os cpus 1 e 3.

26
kbyrd

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

Em uma nota relacionada, se você está 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 desejará examinar a afinidade NUMA, usando o comando numactl ou as chamadas de sistema com as quais ele trabalha. Um programa em que trabalhei obteve uma melhoria de desempenho de 10% com isso.

7
Phil Miller

Você precisa instalar schedutils (utilitários de agendamento do Linux). Eu usei no meu Ubuntu Desktop.

SF link

3
Hemant
taskset -c 1-3 ./a.out arg1 arg2

lança o a.out processo com argumentos fornecidos e afinidade definida para os processadores 1, 2 ou 3 (baseado 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