¿Es posible limitar un proceso de Linux para que solo pueda ejecutarse en un núcleo en particular en una máquina en particular?

10

Digamos que tengo una caja de cuatro núcleos y cuatro procesos idénticos, cada uno con diez hilos. ¿Es posible, en Linux, decir que el Proceso A solo se puede ejecutar en la CPU 0, el Proceso B solo se puede ejecutar en la CPU 1, etc.?

Miguel
fuente

Respuestas:

16
taskset <affinity mask> -p <process>

es decir

taskset 1 -p 12345

configurar el proceso 12345 para usar solo el procesador / núcleo 1

La máscara de bits puede ser una lista (es decir, 1,3,4 para usar los núcleos 1 3 y 4 de un sistema 4+ core) o una máscara de bits en hexadecimal (0x0000000D la 1,3,4, 0x00000001 solo para el núcleo 1)

tasksetgeneralmente está en un paquete llamado shedutils.

Editar: casi olvidado ... Si desea establecer la afinidad de un nuevo comando en lugar de cambiarlo para un proceso existente, use:

taskset <mask> <program> [<arg1>]...[<argN>]
David Spillett
fuente
1

uso del conjunto de tareas (util-linux 2.13-pre7): conjunto de tareas [opciones] [máscara | lista-cpu] [pid | cmd [args ...]] establece u obtiene la afinidad de un proceso

-p;

El comportamiento predeterminado es ejecutar un nuevo comando: taskset 03 sshd -b 1024 Puede recuperar la máscara de una tarea existente: taskset -p 700 O configurarlo: taskset -p 03 700 El formato de lista utiliza una lista separada por comas en lugar de un mask: taskset -pc 0,3,7-11 700 Los rangos en formato de lista pueden tomar un argumento de paso: por ejemplo, 0-31: 2 es equivalente a la máscara 0x55555555

siempre puede optimizar su servidor según lo necesite

Rajat
fuente