L'ensemble de tâches sert à lier un processus à un ou plusieurs processeurs; spécifiant essentiellement où il peut s'exécuter lors de l'exécution initiale ou pendant son exécution. Si vous utilisez RHEL / CentOS sur un équipement de serveur moderne, il numactl
est recommandé de le faire taskset
.
Cpuset / cset est pour le blindage CPU et est un framework construit autour des cgroups Linux. Cset n'a jamais été populaire sur certaines distributions (comme RHEL) car il existe d'autres outils disponibles pour la gestion des processus.
La première commande ci-dessous crée un bouclier qui limiterait les tâches du système d'exploitation aux cœurs CPU 0 et 8. La seconde déplacerait votre session shell actuelle vers le bouclier CPU spécifié, résultant en une isolation des processus système et utilisateur.
# cset shield --cpu 1-7,9-15 --kthread=on
# cset proc --move --pid=$$ --threads --toset=user
Il y a d'autres choses à vérifier et à régler avant de suivre le chemin des processus de liaison aux CPU; interruptions ( irqbalance
désactivation partielle), paramètres d'économie d'énergie, planificateur système, ascenseurs d'E / S, politique en temps réel ( chrt
).
Voir: Paramètres TCP à faible latence sur Ubuntu
Voici un exemple ( compliqué ) d'un wrapper d'application qui sélectionne un noyau, arrête l'irqbalance, le démarre et met en liste noire le noyau sélectionné, puis exécute ./your_program avec SCHED_FIFO et la priorité 99 sur le noyau sélectionné.
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