El conjunto de tareas es para vincular un proceso a una o más CPU; esencialmente especificando dónde puede ejecutarse en la ejecución inicial o mientras se está ejecutando. Si utiliza RHEL / CentOS en equipos de servidores modernos, numactl
se recomienda que lo haga taskset
.
Cpuset / cset es para el blindaje de la CPU y es un marco creado alrededor de cgroups de Linux. Cset nunca fue popular en ciertas distribuciones (como RHEL) porque hay otras herramientas disponibles para la gestión de procesos.
El primer comando a continuación crea un escudo que limitaría las tareas del sistema operativo a los núcleos de CPU 0 y 8. El segundo movería su sesión de shell actual al escudo de CPU especificado, lo que da como resultado un aislamiento de los procesos del sistema y del usuario.
# cset shield --cpu 1-7,9-15 --kthread=on
# cset proc --move --pid=$$ --threads --toset=user
Hay otras cosas para verificar y ajustar antes de seguir el camino de los procesos de enlace a las CPU; interrupciones ( irqbalance
deshabilitación parcial), configuración de ahorro de energía, programador del sistema, elevadores de E / S, política en tiempo real ( chrt
).
Ver: Configuraciones TCP de baja latencia en Ubuntu
Aquí hay un ejemplo ( complicado ) de un contenedor de aplicaciones que selecciona un núcleo, detiene el desequilibrio, lo inicia y pone en la lista negra el núcleo seleccionado, luego ejecuta ./your_program con SCHED_FIFO y la prioridad 99 en el núcleo seleccionado.
Core=5
CoreMask=`echo "16 o 2 $Core ^ p" | dc`
service irqbalance stop
until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
IRQBALANCE_ONESHOT=1 IRQBALANCE_BANNED_CPUS=${CoreMask} irqbalance
sleep 1
until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
numactl --physcpubind=${Core} --localalloc chrt -f 99 ./your_program