J'ai utilisé l'ensemble de tâches pour cela. Si vous avez un ensemble de tâches installé, quelque chose comme :
taskset -cp 0,2 45678
définirait le processus avec l'id 45678 pour avoir une affinité avec les processeurs 1 et 3.
À 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 prêter également attention à la façon dont il fait l'allocation de mémoire. Les systèmes plus grands avec de la mémoire attachée à plus d'un contrôleur (c'est-à-dire plusieurs sockets CPU, chacun avec le leur) auront une latence et une bande passante variables entre différentes paires CPU-mémoire. Vous voudrez également examiner l'affinité NUMA, en utilisant le numactl
commande ou les appels système avec lesquels il fonctionne. Un programme sur lequel j'ai travaillé a obtenu une amélioration de ses performances de 10 %.
Vous devez installer schedutils
(Utilitaires du planificateur Linux). Je l'ai utilisé sur mon bureau Ubuntu.
Lien SF