it-swarm-es.tech

¿Cómo puedo configurar la afinidad del procesador de un proceso en Linux?

¿Cómo puedo configurar la afinidad del procesador de un proceso en Linux?

31
chillitom

He usado un conjunto de tareas para esto. Si tiene un conjunto de tareas instalado, algo como:

taskset -c 0,2 -p 45678

establecería el proceso con id 45678 para que tenga afinidad con cpus 1 y 3.

26
kbyrd

Dentro del proceso, la llamada sería sched_setaffinity(), o para cosas de pthreads, pthread_setaffinity_np()

En una nota relacionada, si le preocupa la afinidad de la CPU de su programa, puede valer la pena prestar atención a cómo está haciendo la asignación de memoria también. Los sistemas más grandes con memoria conectada a más de un controlador (es decir, múltiples sockets de CPU, cada uno con el suyo) tendrán latencia y ancho de banda variables entre diferentes pares de CPU-memoria. También querrá ver la afinidad de NUMA, usando el comando numactl o las llamadas al sistema con las que trabaja. Un programa en el que trabajé obtuvo una mejora del rendimiento del 10% a partir de esto.

7
Phil Miller

Necesita instalar schedutils (utilidades del programador de Linux). Lo he usado en mi escritorio de Ubuntu.

SF enlace

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

lanza el a.out proceso con argumentos dados y afinidad establecida en 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: https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in -linux-desde-c/50117787 # 50117787