¿Cómo puedo configurar la afinidad del procesador de un proceso en Linux?
29
He usado el conjunto de tareas para esto. Si tiene un conjunto de tareas instalado, algo como:
taskset -c 1,3 -p 45678
configuraría el proceso con id 45678 para tener una afinidad con los cpus 1 y 3.
taskset -p -c 1,3 45678
más quetaskset -c 1,3 -p 45678
; es decir, que-c 1,3
es una especificación de máscara y, como tal, debe colocarse entre el-p
y elpid
.Dentro del proceso, la llamada sería
sched_setaffinity()
, o para cosas de pthreads,pthread_setaffinity_np()
En una nota relacionada, si te preocupa la afinidad de la CPU de tu programa, puede valer la pena prestar atención también a cómo está haciendo la asignación de memoria. Los sistemas más grandes con memoria conectada a más de un controlador (es decir, múltiples zócalos de CPU, cada uno con el suyo propio) tendrán latencia variable y ancho de banda entre diferentes pares de CPU-memoria. También querrá examinar la afinidad de NUMA, utilizando el
numactl
comando o las llamadas al sistema con las que funciona. Un programa en el que trabajé obtuvo una mejora del rendimiento del 10% de esto.fuente
Necesita instalar
schedutils
(utilidades del planificador de Linux). Lo he usado en mi escritorio Ubuntu.Enlace SF
fuente
inicia el
a.out
proceso con argumentos y afinidad dados a los procesadores 1, 2 o 3 (basados en cero).Aquí hay un programa de prueba C mínimo que se puede usar para verlo en acción: /programming/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from -c / 50117787 # 50117787
fuente