¿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?

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

Respuesta1

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

taskset -cp 0,2 45678

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

Respuesta2

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 que valga la pena prestar atención a cómo realiza también 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) tendrán latencia y ancho de banda variables entre diferentes pares de CPU y memoria. También querrás investigar la afinidad NUMA, usando el numactlcomando o las llamadas al sistema con las que funciona. Un programa en el que trabajé obtuvo una mejora de rendimiento del 10% gracias a esto.

Respuesta3

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

SFenlace

Respuesta4

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

lanza el a.outproceso con argumentos dados y afinidad configurada para los procesadores 1, 2 o 3 (base cero).

Aquí hay un programa de prueba C mínimo que puede usarse para verlo en acción:https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from-c/50117787#50117787

información relacionada