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

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

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

Responder1

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

taskset -cp 0,2 45678

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

Responder2

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

Por falar no assunto, 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 próprio) 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 numactlcomando ou as chamadas do sistema com as quais ele funciona. Um programa em que trabalhei obteve uma melhoria de desempenho de 10% com isso.

Responder3

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

SFlink

Responder4

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

inicia o a.outprocesso com determinados argumentos 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

informação relacionada