Comment puis-je définir l'affinité processeur d'un processus sous Linux?
29
J'ai utilisé le jeu de tâches pour cela. Si vous avez installé un ensemble de tâches, quelque chose comme:
taskset -c 1,3 -p 45678
définirait le processus avec l'ID 45678 pour avoir une affinité avec les processeurs 1 et 3.
taskset -p -c 1,3 45678
plutôt quetaskset -c 1,3 -p 45678
; c'est-à-dire que le-c 1,3
est une spécification de masque et, en tant que tel, doit être placé entre le-p
et lepid
.À l'intérieur du processus, l'appel serait
sched_setaffinity()
, ou pour les trucs pthreads,pthread_setaffinity_np()
Sur une note connexe, si vous vous inquiétez de l'affinité CPU de votre programme, il peut être utile de faire attention à la façon dont il fait l'allocation de mémoire. Les systèmes plus grands avec une mémoire connectée à plusieurs contrôleurs (c'est-à-dire plusieurs sockets CPU, chacun avec leur propre) auront une latence et une bande passante variables entre différentes paires CPU-mémoire. Vous voudrez également examiner l'affinité NUMA, en utilisant la
numactl
commande ou les appels système avec lesquels elle fonctionne. Un programme sur lequel j'ai travaillé a obtenu une amélioration de 10% de ses performances.la source
Vous devez installer
schedutils
(utilitaires du planificateur Linux). Je l'ai utilisé sur mon bureau Ubuntu.Lien SF
la source
lance le
a.out
processus avec des arguments donnés et une affinité définie pour les processeurs 1, 2 ou 3 (basés sur zéro).Voici un programme de test C minimal qui peut être utilisé pour le voir en action: https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from -c / 50117787 # 50117787
la source