¿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 45678más quetaskset -c 1,3 -p 45678; es decir, que-c 1,3es una especificación de máscara y, como tal, debe colocarse entre el-py 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
numactlcomando 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.outproceso 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