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

28

A questão está no título: Como posso definir a afinidade do processador de um processo no Linux?

    
por chillitom 10.08.2010 / 22:01

4 respostas

21

Eu usei o taskset para isso. Se você tem taskset instalado, algo como:

taskset -c 1,3 -p 45678

configuraria o processo com o ID 45678 para ter uma afinidade com os processadores 1 e 3.

    
por 10.08.2010 / 22:05
7

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

Em uma nota relacionada, se você estiver preocupado com a afinidade da CPU com seu programa, talvez valha a pena prestar atenção em como ela está fazendo a alocação de memória também. Sistemas maiores com memória conectada a mais de um controlador (isto é, múltiplos soquetes de CPU, cada um com seus próprios) terão latência e largura de banda variáveis entre diferentes pares de memória de CPU. Você também desejará examinar a afinidade NUMA, usando o comando numactl ou as chamadas do sistema com as quais ele trabalha. Um programa em que trabalhei obteve uma melhoria de desempenho de 10% com isso.

    
por 10.08.2010 / 22:08
3

Você precisa instalar schedutils (utilitários do Linux Scheduler). Eu tenho usado no meu Ubuntu Desktop.

SF link

    
por 10.08.2010 / 22:11
1
taskset -c 1-3 ./a.out arg1 arg2

inicia o processo a.out com argumentos e afinidades determinados configurados 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: link

    
por 01.05.2018 / 16:01